我使用ehcache来缓存使用hibernate的实体。
查看ehcache监视器,一切似乎都很正常(flush将cache count设置为0,reload将count恢复为1),但如果我直接在db上更改某个值并重新加载,则会显示更新后的值,而不是缓存的值。我不知道这是否是预期的行为,但作为一个缓存,这样做会很奇怪。
我尝试了所有能找到的解决方案,但都没有成功。
发布于 2012-07-19 05:06:24
这是预期的行为。数据库是所有正确数据的来源,缓存的存在只是为了加快对数据库中数据的访问。如果数据不同,则根据定义,缓存是错误的。
因此,如果您重新加载,则会从数据库重新加载高速缓存。
如果您通过Hibernate保存数据,那么数据将被写入缓存和数据库。当您有多个线程/进程读取或写入时,可能会出现问题。有关如何管理此问题的信息,请参阅caching strategies in the Hibernate documentation
通常,直接更新数据库会导致问题,除非通知缓存必须使其拥有的数据无效和/或从数据库重新加载,否则缓存将不会有正确的数据。
https://stackoverflow.com/questions/11549591
复制相似问题