Java Hibernate查询缓存并发策略

Java Hibernate查询缓存并发策略,java,hibernate,caching,concurrency,Java,Hibernate,Caching,Concurrency,Hibernate缓存并发策略是否也适用于其查询缓存(例如,一个可缓存查询获取一些标量数据,然后两个查询同时修改该标量数据)?如果不是,查询的并发更新(或读取/更新)会发生什么情况?如果是,如何为查询缓存指定它们?策略如下 时间戳缓存跟踪每个表的上次更新时间戳 每次执行可缓存查询并且结果位于查询缓存中时,Hibernate都会检查查询结果的时间戳是否大于(最近)查询所涉及的每个表的更新时间戳。如果较大,则结果不会过时,并返回缓存的结果。如果较低,则缓存的结果可能会过时,并且会对数据库执行查询。O

Hibernate缓存并发策略是否也适用于其查询缓存(例如,一个可缓存查询获取一些标量数据,然后两个查询同时修改该标量数据)?如果不是,查询的并发更新(或读取/更新)会发生什么情况?如果是,如何为查询缓存指定它们?

策略如下

时间戳缓存跟踪每个表的上次更新时间戳


每次执行可缓存查询并且结果位于查询缓存中时,Hibernate都会检查查询结果的时间戳是否大于(最近)查询所涉及的每个表的更新时间戳。如果较大,则结果不会过时,并返回缓存的结果。如果较低,则缓存的结果可能会过时,并且会对数据库执行查询。

Oh ok!谢谢你的回答。这是否意味着查询缓存本身永远不会更新,而只是失效,从而避免了任何并发更新问题?我不知道缓存如何处理对缓存的并发更新。但它是一个从多个线程访问的缓存。我想应该使用同步和并发集合。其实,对于二级缓存,像非严格读写和读写这样的策略表现不同,影响性能。所以我想知道类似的事情是否也适用于查询缓存,从而影响其性能。因此有了这个问题。这是一篇好文章: