我正在使用ehcache来缓存使用休眠的实体。Ehcache存储但不检索(Ehcache +休眠)
看着ehcache监视器,一切似乎工作正常(刷新缓存计数为零,并重新加载计数回到一),但如果我直接更改一些值的数据库和重新加载,更新后的值显示和不是缓存的。我不知道这是否是预期的行为,但作为一个缓存来执行这种操作会很奇怪。
我试过找到的每个解决方案都没有成功。
我正在使用ehcache来缓存使用休眠的实体。Ehcache存储但不检索(Ehcache +休眠)
看着ehcache监视器,一切似乎工作正常(刷新缓存计数为零,并重新加载计数回到一),但如果我直接更改一些值的数据库和重新加载,更新后的值显示和不是缓存的。我不知道这是否是预期的行为,但作为一个缓存来执行这种操作会很奇怪。
我试过找到的每个解决方案都没有成功。
这是预期的行为。数据库是所有缓存正确数据的来源,以加速对数据库中数据的访问。如果数据不同,则根据定义,缓存是错误的。
所以,如果你重新加载缓存是从数据库重新加载。
如果您通过Hibernate保存数据,那么数据将写入缓存和数据库。当您有多个线程/进程读取或写入时,可能存在问题。有关如何管理的信息,请参阅caching strategies in the Hibernate documentation
通常直接更新数据库会导致缓存中没有正确的数据,除非通知它必须使其拥有的数据和/或从数据库重新加载的数据无效。
对于缓存来说,确实需要查看数据库中的值 - 缓存意味着数据库的副本。 – Mark 2012-07-18 20:24:44
确实如此,但是如果在缓存过期之前更改一个值,它必须返回缓存的值,对吧?除非缓存可以足够聪明地检测到db的值变化 – jmoreira 2012-07-18 20:33:52
这是db或cacjh的正确值 - 如果缓存为什么它不在db中? – Mark 2012-07-18 20:45:07