我们的项目使用Entity Framework,有两种类型的缓存(in-memory,Redis),没有任何缓存提供者。由于lack of second-level cache support in EF,我们自己实现了它。所以我们的内存缓存是一组简单的键值对,其中key是缓存的Id,value是缓存的对象。我们也实现了类似的缓存来使用Redis。对于查询,我们查看内存中的缓存列表,如果没有,我们就查看redis,如果没有,我们就查询数据库。
因为entity框架实体引用了context,所以我们不能在缓存中使用DbContext
的entity,我们需要映射它。所以我们需要创建大量的DTO。
我知道缓存是cross-cutting concern的,所以我寻找更干净的解决方案。出于这个原因,首先我决定在内存中使用Memcached (而不是简单的list)。第二,也是最重要的是,我可能会从EF迁移到NHibernate,以获得对二级缓存的支持。我知道那个first level cache is occupied by session object。所以我想使用Memcached作为二级缓存。但是Redis有没有三级缓存呢?
发布于 2015-11-17 10:55:44
在不创建大量DTO的情况下实现二级缓存的一种方法是在键值列表中使用属性名值列表,而不是存储DTO。据我所知,NHibernate中没有三级缓存。一种方法是实现一个自定义缓存提供程序,它可以首先在Redis中查找,如果找不到它,则从Memcached中获取值。
https://stackoverflow.com/questions/33673392
复制相似问题