【发布时间】:2010-06-12 13:12:53
【问题描述】:
您好,我想要一个执行以下操作的示例: 数据库 数据访问 + 缓存 业务逻辑 UI
所以基本上你想要从数据库中获取的所有东西都应该可以从缓存中访问,如果它不在缓存中,底层数据访问层将填充 if 并返回它,否则从缓存中返回
有什么缺点吗?在什么场景下这可能是一个很好的解决方案
【问题讨论】:
标签: asp.net architecture caching
您好,我想要一个执行以下操作的示例: 数据库 数据访问 + 缓存 业务逻辑 UI
所以基本上你想要从数据库中获取的所有东西都应该可以从缓存中访问,如果它不在缓存中,底层数据访问层将填充 if 并返回它,否则从缓存中返回
有什么缺点吗?在什么场景下这可能是一个很好的解决方案
【问题讨论】:
标签: asp.net architecture caching
我喜欢为 System.Web.Caching.Cache 类创建自己的静态包装类。
基本上,您在 Web 应用程序模块中创建一个类,并创建所有标准缓存函数(获取、添加、删除等)。这些方法需要使用泛型来实现以确保类型安全。
Here 就是一个很好的例子
然后,您创建另一个静态类,它充当从 Web 层到数据层的服务模型。
您的 Web 层将调用静态类上的方法,该静态类将首先根据提供的方法参数生成一个 CacheKey,检查缓存,如果找到则返回,否则调用数据层,添加到缓存并返回。
根据您的业务对象的设置方式,您可能需要在对象上提供深层副本(即实现 IClonable 并覆盖 Clone 方法)。
此外,您的缓存解决方案取决于您的网络场架构。如果您有很多 Web 服务器,那么您的数据可能会变得陈旧,因此您需要决定那里的最佳选项(SQLCacheDependecy、分布式缓存等)。
【讨论】:
明显的缺点是缓存有效性(您怎么知道数据在缓存后没有更改/添加)和内存/磁盘使用情况。
当您的数据是静态的(无需考虑何时更新缓存)时,这是一个很好的解决方案。
我们对动态数据使用了类似的方法,并且缓存引入了很多问题。有时缓存更新太昂贵(服务器必须通知所有客户端他们缓存的数据和已更改的数据),有时客户端上的内存使用量太高。
【讨论】: