我正在使用 ehcache 来缓存使用休眠的实体。
查看 ehcache 监视器,一切似乎都工作正常(将缓存计数刷新为零,然后重新加载将计数恢复为一),但如果我直接在 db 上更改某些值并重新加载,则会显示更新的值而不是缓存的值. 我不知道这是否是预期的行为,但作为缓存这样做会很奇怪。
我已经尝试了所有找到的解决方案来解决这个问题,但没有成功。
我正在使用 ehcache 来缓存使用休眠的实体。
查看 ehcache 监视器,一切似乎都工作正常(将缓存计数刷新为零,然后重新加载将计数恢复为一),但如果我直接在 db 上更改某些值并重新加载,则会显示更新的值而不是缓存的值. 我不知道这是否是预期的行为,但作为缓存这样做会很奇怪。
我已经尝试了所有找到的解决方案来解决这个问题,但没有成功。
这是预期的行为。数据库是所有正确数据的来源,缓存的存在是为了加快对数据库中数据的访问。如果数据不同,则缓存根据定义是错误的。
因此,如果您重新加载缓存,则会从数据库中重新加载。
如果通过 Hibernate 保存数据,则数据将写入缓存和数据库。当您有多个线程/进程读取或写入时,这里可能会出现问题。有关如何管理它,请参阅Hibernate 文档中的缓存策略
一般来说,更新数据库会直接导致缓存没有正确数据的问题,除非通知它必须使其拥有的数据无效和/或从数据库重新加载。