清除休眠二级缓存

Posted

技术标签:

【中文标题】清除休眠二级缓存【英文标题】:Clear Hibernate 2nd level Cache 【发布时间】:2017-07-05 17:49:45 【问题描述】:

我想通过调用以下方法从二级缓存中清除缓存数据:

sessionFactory.getCache().evictEntityRegions();

我只是想知道,这样做有什么坏处吗?例如:如果我尝试在事务中间清除缓存会发生什么?

提前致谢。

【问题讨论】:

【参考方案1】:

不,这样做没有害处。实际上,当您将缓存提供程序配置为根据定义的逐出/过期策略逐出/过期项目时,也会发生同样的事情。

【讨论】:

嗨 Dragan,我有一个案例。假设某个事务正在运行以从中获取数据,并且当时二级缓存有数据。同时,另一个线程在前一个事务尚未完成时驱逐所有区域缓存。那么在这种情况下会发生什么。我可以从该事务中的缓存中获取 null 并且会发生数据库命中吗?有没有可能出现问题? @VikasVats 在这种情况下,对象已经在第一级缓存(会话)中,并将在事务结束时从那里获取。如果对象被手动从会话中逐出或整个会话被手动清除,那么对象将简单地从数据库中重新加载并存储在一级和二级缓存中。没有任何问题的可能性。

以上是关于清除休眠二级缓存的主要内容,如果未能解决你的问题,请参考以下文章

休眠:无法启用二级缓存

休眠:批处理大小?二级缓存?

ehCache 3.0 默认堆上条目大小(与休眠二级缓存一起使用)

共享 nHibernate 和 hibernate 二级缓存

hibernate里,get方法会访问二级缓存吗

hibernate二级缓存很慢