【发布时间】:2012-03-17 12:10:14
【问题描述】:
我正在寻找一个可以实现以下模式的c#对象缓存库:
- 缓存用于缓存具有主键的某种类型 T 的对象。示例:一个 Person 类(包含名字、姓氏等),键是 PersonId
- 缓存可以存储无限数量的键。键的类型为 int 或 long。
- 但是,缓存只能存储有限的 # 个 T 类型的对象。T 对象占用大量内存,我不能一次在缓存中存储大量此类对象。
- 在溢出时,缓存可以将对象序列化到数据库或文件等(快速介质),但缓存仍会保留键。
我基本上需要处理的 T 个对象比我可以保存在内存中的要多,我想在将结果保存到数据库之前使用缓存快速检索它们。
所以,我正在考虑使用Proxy 模式并让缓存存储代理对象,这些对象可以获取/序列化我的真实对象。
你知道任何可以与这些模式一起使用的缓存 c# 库吗?我自己也找不到任何东西。
谢谢
【问题讨论】:
-
到底是什么问题?据我所知,没有内存缓存包。除了你能看到的博客。懒惰的代理是要走的路。还要对缓存项设置过期时间。如果要限制缓存大小,请执行 LRU impl 以驱逐缓存项。
-
重新表述了这个问题。我希望现在很清楚。
-
我不明白将 ID 保存在缓存中会有什么帮助。无论如何,您都需要访问数据库来检索实际数据。
-
如果您需要访问更多的 T,那么您可以保留在内存中,那么您开始听起来像 memcached/memcachedb/RavenDB 就是您正在寻找的那种东西。我认为像 RavenDB 这样的 ORM 几乎肯定会覆盖你的基础。
-
分布式缓存与内存缓存的区别在于您没有任何网络延迟。但是你还有其他问题。这是一个很大的话题,最好有代码和经验,解决问题。查看内存缓存。