java中一级缓存、二级缓存三级缓存
时间: 2023-12-18 10:27:47 浏览: 74
Java中的缓存分为一级缓存和二级缓存,没有三级缓存的概念。一级缓存是指Session级别的缓存,二级缓存是指SessionFactory级别的缓存。
一级缓存:
1. 一级缓存是Session级别的缓存,它是默认开启的,可以通过session.clear()或session.close()清空。
2. 一级缓存存储的是持久化类的对象,当查询一个对象时,如果一级缓存中有该对象,则直接从缓存中获取,否则从数据库中查询,并将查询结果存入一级缓存中。
3. 一级缓存的生命周期与Session相同,当Session关闭时,一级缓存也会被清空。
二级缓存:
1. 二级缓存是SessionFactory级别的缓存,它是可选的,需要手动配置。
2. 二级缓存存储的是持久化类的对象,当查询一个对象时,如果一级缓存中没有该对象,则从二级缓存中获取,如果二级缓存中也没有,则从数据库中查询,并将查询结果存入二级缓存中。
3. 二级缓存的生命周期与SessionFactory相同,当SessionFactory关闭时,二级缓存也会被清空。
以下是一个简单的使用Hibernate二级缓存的例子:
```java
// 配置二级缓存
Configuration cfg = new Configuration().configure();
cfg.setProperty("hibernate.cache.use_second_level_cache", "true");
cfg.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
// 获取SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
// 获取Session
Session session = sessionFactory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
// 查询对象
User user = (User) session.get(User.class, 1);
// 提交事务
tx.commit();
// 关闭Session
session.close();
// 再次获取Session
session = sessionFactory.openSession();
// 开启事务
tx = session.beginTransaction();
// 再次查询对象
user = (User) session.get(User.class, 1);
// 提交事务
tx.commit();
// 关闭Session
session.close();
// 关闭SessionFactory
sessionFactory.close();
```
阅读全文