首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的asp.net mvc解决方案需要一个缓存解决方案

我的asp.net mvc解决方案需要一个缓存解决方案
EN

Stack Overflow用户
提问于 2013-10-14 14:43:05
回答 2查看 482关注 0票数 1

我的应用程序在做这件事时生成了很多对象。对象是由数据库查询生成的,它们是我们ORM解决方案的一部分。使用这些对象的程序通常一个接一个地请求它们。

我想使用System.Runtime.Caching,但我不确定如何使用,因为我有特定的标准:

每个用户都可以登录到不同的数据库。适用于所有物体。

数据库可以有几个不同的公司简介。适用于大多数物体。

大多数对象是多语言的。

某些对象仅在数据库事务处于活动状态时缓存,然后在回滚或提交时转储。

想到的第一个解决方案是为缓存生成一个复杂的字符串键(即。database+company+language+object主键值),但我不确定这是否正确。我也不知道如何实现事务范围的缓存。

如果我使用自己的实现,也许我会对缓存有更多的控制权。就像这样:

代码语言:javascript
复制
public class DatabaseCache
{
    private ConcurrentDictionary<string, ClassCache> m_databases = new ConcurrentDictionary<string, ClassCache>();

    public void Add(string database, string className, object item, params string[] itemKeys)
    {
    }
}

public class ClassCache
{
    private ConcurrentDictionary<string, KeyCache> m_cache = new ConcurrentDictionary<string, KeyCache>();

    public void Add(string className, object item, params string[] itemKeys)
    {
    }
}

public class KeyCache
{
    private ConcurrentDictionary<string, object> m_cache = new ConcurrentDictionary<string, object>();

    public void Add(object item, params string[] itemKeys)
    {
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-14 20:36:48

我在CMS中使用了一种非常类似的方法,它工作得很好(在CMS中,大多数对象被读了很多次,写了几次)。

当发生更新时,缓存的对象将失效。在我的缓存键字符串中,第一个参数是缓存索引,当更新发生时,该索引会发生更改。

如果您有很多更新,那么每个事务都可以做两件事。在数据库中进行更改,然后更新缓存中的对象,这样就不必使它们失效。

关于事务范围缓存,您可以保留一个包含事务对象的所有键的列表。

在事务结束时,可以循环这个列表并从缓存中删除所有这些项。

另一种方法是保存事务对象的集合,并将集合对象存储在缓存中。使用这种方法,只有要从缓存中移除的集合对象。

票数 1
EN

Stack Overflow用户

发布于 2013-10-14 14:50:34

考虑到所有可能发生变化的东西(数据库/公司/语言/主键),使用所有这些东西来构建唯一的缓存密钥的解决方案是合理的。我使用了一个非常类似的方案,来自我所支持的应用程序之一,它的工作没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19362860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档