我们的项目使用 Entity Framework 并有 2 种类型的缓存(内存中,Redis),没有任何缓存提供程序。由于lack of second-level cache support in EF我们自己实现了。所以我们的内存缓存是一组简单的键值对,其中键是缓存的 Id,值是缓存的对象。我们也实现了类似的缓存来使用 Redis。对于查询,我们查看内存缓存列表,如果不存在,我们查看 Redis,如果不存在,我们查询数据库。
因为 Entity Framework 实体引用了上下文,我们不能在缓存中使用 DbContext
的实体,我们需要映射它。所以我们需要创建很多 DTO。
我知道缓存是cross-cutting concern所以我寻找更清洁的解决方案。出于这个原因,首先我决定使用 Memcached用于内存中(而不是使用简单列表)。作为第二个也是最重要的,我可能会从 EF 迁移到 NHibernate 以获得其对 Second-Cache 的支持。我知道 first level cache is occupied by session object .所以想用Memcached做二级缓存。但是Redis有没有三级缓存呢?
最佳答案
在不创建大量 DTO 的情况下实现二级缓存的一种方法是在键值列表中使用属性名称值列表,而不是存储 DTO。 据我了解,NHibernate 中没有三级缓存。一种方法是实现自定义缓存提供程序,它可以首先查看 Redis,如果找不到,则从 Memcached 获取值。
关于entity-framework - NHibernate 的三级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673392/