2012-07-18 142 views
3

我正在使用ehcache来缓存使用休眠的实体。Ehcache存储但不检索(Ehcache +休眠)

看着ehcache监视器,一切似乎工作正常(刷新缓存计数为零,并重新加载计数回到一),但如果我直接更改一些值的数据库和重新加载,更新后的值显示和不是缓存的。我不知道这是否是预期的行为,但作为一个缓存来执行这种操作会很奇怪。

我试过找到的每个解决方案都没有成功。

+0

对于缓存来说,确实需要查看数据库中的值 - 缓存意味着数据库的副本。 – Mark 2012-07-18 20:24:44

+0

确实如此,但是如果在缓存过期之前更改一个值,它必须返回缓存的值,对吧?除非缓存可以足够聪明地检测到db的值变化 – jmoreira 2012-07-18 20:33:52

+0

这是db或cacjh的正确值 - 如果缓存为什么它不在db中? – Mark 2012-07-18 20:45:07

回答

0

这是预期的行为。数据库是所有缓存正确数据的来源,以加速对数据库中数据的访问。如果数据不同,则根据定义,缓存是错误的。

所以,如果你重新加载缓存是从数据库重新加载。

如果您通过Hibernate保存数据,那么数据将写入缓存和数据库。当您有多个线程/进程读取或写入时,可能存在问题。有关如何管理的信息,请参阅caching strategies in the Hibernate documentation

通常直接更新数据库会导致缓存中没有正确的数据,除非通知它必须使其拥有的数据和/或从数据库重新加载的数据无效。

+0

其实我正在数据库上直接更新数据,以测试休眠获取缓存数据,而不是存储在数据库 – jmoreira 2012-07-18 21:11:03

+0

@Jame你不清楚 - 因为目标总是要获得与数据库中相同的数据 - 你想测试一个特定的错误吗? – Mark 2012-07-18 21:12:38

+0

我想测试缓存是否正常工作。我知道缓存背后的想法是加速访问时间,但如果我直接更改缓存源(在本例中为数据库),则返回的值必须是缓存的值,而不是源中的更改值,否则缓存将执行就像读直接读取 – jmoreira 2012-07-18 21:19:41