扫码关注官方订阅号
hibernate里的session一级缓存,当一个用户通过get()load()等方法从数据库拿到某条数据,数据被缓存,此时第二个用户修改该条数据,数据库该数据被修改,此时第一个用户再get()该数据,从缓存中拿到数据,拿到的并不是实时的数据而是缓存的数据。这样想对不对?应该怎么解决?
学习是最好的投资!
是这样的,所以一般session很短小,因为session关闭重开所有cache就都没了
在session内可以用evict()或clear()刷新缓存
Session接口中定义了一个refresh()方法,调用该方法,调用get()或load()方法之前,调用该方法可以拿到最新的数据;
怎样拿到最新的数据楼上都已经说了。我的建议是首先session对应一个数据库事务,事务的执行时间应该尽可能的短。第二,对于在session期间数据在其它地方发生改变,官方的解决方法应该是用锁机制,对于可容忍一定的事务失败回滚的情况可使用乐观锁,否则可考虑悲观锁,由楼主在实际应用中自己权衡使用哪一种方式。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
是这样的,所以一般session很短小,因为session关闭重开所有cache就都没了
在session内可以用evict()或clear()刷新缓存
Session接口中定义了一个refresh()方法,调用该方法,调用get()或load()方法之前,调用该方法可以拿到最新的数据;
怎样拿到最新的数据楼上都已经说了。我的建议是首先session对应一个数据库事务,事务的执行时间应该尽可能的短。第二,对于在session期间数据在其它地方发生改变,官方的解决方法应该是用锁机制,对于可容忍一定的事务失败回滚的情况可使用乐观锁,否则可考虑悲观锁,由楼主在实际应用中自己权衡使用哪一种方式。