`
neptune
  • 浏览: 367192 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

hibernate 二级cache FAQ

阅读更多
1.已被缓存的对象,被修改后,再get时是从那里获取对象?

修改方法(update)提交后,会更新缓存中对象的属性,然后生成sql语句交提交.如果再get将直接从二级cache中读取.

2.批量(bulk)的update或delete sql执行后的二级cache如果处理?

bulk的sql将把涉及要修改表对应的二级缓存对象作废
例如:bulk sql:update user set name='fff' where id='111',则user的二级缓存将全部作废,
如果下面再有get方法,将直接从数据库中读取,并存放到二级cache中.

3.查询缓存

查询缓存依赖于二级缓,但两者存放不同的空间,查询缓存中的key是hql语句和对应的附加参数,而value是查询出数据的id集合.这些id对应的二级缓存中对象的id,如果某id在二级缓存中不存在,将从数据库中读取.因此使用查询缓存一定要注意这一点.

查询缓存无效原理:
查询缓存需要有两个存储空间,一个是查询缓存,一个表最后被修改时间。每次查询时,都将判断查询缓存时间,是否大于修改时间,如果大于有效,否则无效。

执行update方法中被修改相关表,都将修改表的"最后修改时间",已方便查询缓存无效比较.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics