我了解到 Ehcache 可以用作 Hibernate 的二级缓存。
但是,什么是一级缓存?它有什么用?一级缓存是否与二级缓存通信?有人可以准确解释在两级系统中缓存数据时会发生什么吗?
谢谢你。
Hibernate 的第一级缓存位于您的 Hibernate 会话中。它的生命周期很短,而且一级缓存的数量与 Hibernate 会话的数量一样多。通常,Web 应用程序中每个用户请求一个会话。
第一级缓存包含会话中使用的所有对象,以及尚未持久化到底层数据库的脏对象。刷新会话后,一级缓存中的所有脏对象将通过二级缓存传播,并保存到您的数据库中。
只有一个二级缓存,用作数据库和会话中所有一级缓存之间的缓存。因此,当有人从数据库加载一个对象时,它将被保存在二级缓存中。这样,当其他人加载相同的对象时,它不会来自数据库,而是来自二级缓存。对象会一直保留在二级缓存中,直到不再需要,具体取决于您的缓存驱逐策略。
当有人更改对象并将其刷新到数据库时,第二个缓存中的对象也会更改。用户已经在他们的一级缓存中拥有相同的对象,并尝试更改和刷新它,因此会出现异常。