后来我在想hibernate的延迟加载为何不能先查找缓存中的数据?
看sql发现每次延迟加载都发了一条sql
于是乎我在属性上加了@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
ok条件达成,即有lazy又有查询缓存
---
越来越喜欢hibernate的二级缓存了看着需要几秒的查询结果时间缩短为十级毫秒能看出缓存的力量。
关于hibernate维护缓存的方式还不太明确,看一些资料上只是说当表发生修改的时候查询缓存会失效。
这样直接省了维护缓存的开销了,但是如何确保缓存尽可能的保留下来?
维护缓存确实是麻烦,例如Topic这样的最简单的单一对象的查询缓存来说,修改其中的一个属性也许就使整个查询结果发生了质的变化。添加一条记录也不太好控制与缓存的同步。
能否让缓存失效之后自动还原呢?缓存失效的后果是需要重新缓存一次,这样以为就着有几次请求会非常缓慢。
例如Topic表前几页,添加新的Topic导致缓存失效之后,用户访问的结果是直接查询数据库的结果,可能要好几秒
如果一旦对表发生了修改操作,缓存立刻重新更新 。对于用户来说这几秒也不需要去等待,而查询缓存设置过期时间,到时
间了之后缓存也会按预定的消失。