Hibernate一级缓存与Spring Boot:缓存生命周期相关疑问
Hibernate一级缓存在Spring Boot环境中的常见疑问解答
你的核心理解有部分偏差——Hibernate一级缓存(也叫Session缓存)是完全绑定到Session实例的生命周期,而非直接绑定事务。事务只是影响Session的使用时机,但缓存的存活与否最终由Session的状态决定。
1. 请求完成后一级缓存是否仍会保留数据?
在Spring Boot的Web环境中,默认情况下Session的生命周期和请求/事务强绑定:
- 当请求进入、事务开启时,Spring会为当前请求创建一个独立的Session实例;
- 当请求处理完成(事务提交或回滚)后,这个Session会被Spring容器关闭并销毁,对应的一级缓存也会被彻底清理,不会保留任何数据。
2. 后续GET API请求是否会命中该缓存?
不会。每个请求都会生成全新的Session实例,不同Session的一级缓存是完全隔离的,彼此无法共享数据。后续的GET请求会使用新的Session,自然无法命中之前请求的缓存内容。
3. 一级缓存是否存在逐出对象的时间限制?
没有内置的时间过期机制。一级缓存中对象的留存时间完全由Session的生命周期决定:
- 只要Session处于活跃状态(未被关闭),缓存的对象就会一直保存在内存中;
- 只有当Session被关闭、调用
session.clear()清空整个缓存,或者调用session.evict(Object)逐出特定对象时,缓存里的对象才会被移除。
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

