NHibernate的三级缓存

Sey*_*avi 10 nhibernate caching entity-framework hibernate redis

我们的项目使用Entity Framework,并且有两种类型的缓存(内存中,Redis),没有任何缓存提供程序.由于EF中缺乏二级缓存支持,我们自己实现了它.因此,我们的内存缓存是一组简单的键值对,其中键是缓存的Id,值是缓存的对象.我们还实现了类似的缓存以使用Redis.对于查询,我们查看内存缓存列表,如果不是,我们会查看redis,如果没有,我们会查询数据库.

因为实体框架实体引用了上下文,所以我们不能DbContext在缓存中使用实体,我们需要映射它.所以我们需要创建很多DTO.

我知道缓存是跨领域的问题所以我寻求更清洁的解决方案.出于这个原因,首先我决定将Memcached用于内存中(而不是使用简单列表).作为第二个也是最重要的一点,我可以从EF迁移到NHibernate以获得Second-Cache支持.我知道第一级缓存被会话对象占用.所以我想将Memcached用于二级缓存.但Redis有没有任何三级缓存?

Low*_*can 2

在不创建大量 DTO 的情况下实现二级缓存的一种方法是在键值列表中使用属性名称值列表,而不是存储 DTO。据我了解,NHibernate 中没有三级缓存。实现此目的的一种方法是实现一个自定义缓存提供程序,它可以首先在 Redis 中查找,如果找不到,则从 Memcached 获取值。