悲观锁和乐观锁、缓存

悲观锁:

悲观锁的实现通常依赖于数据库提供的机制,在整个处理的过程中数据处于锁定状态,session的load方法有一个重载方法,该重载方法的第三个参数可以设置锁模式,load(object.class , int id,LockMode.?),该方法的?就是具体的锁模式。

乐观锁:

乐观锁使用版本号或者时间戳来保证数据的唯一性和完整性,乐观锁的实现大多数基于数据版本的记录方式(version),读取数据时,将版本号一起读出当对数据进行更新时版本号自动加1,当对数据进行更新操作时会首先比较查出的版本号,和数据库中最新的版本号比较,若果小于数据库中的版本号说明数据是旧数据,那么不予更新,否则与数据库数据同步,更新数据并将版本号加1.

悲观锁和乐观锁用于数据库并发访问操作多用于数据更新操作,version字段在实体类中进行书写并写上它的set和get方法,并且需要在实体映射文件中配置参数

<class name="com.qrsx.bean.User" optimistic-lock="version"></class>

HQL(hibernate Query language)用面向对象的方式生成SQL,以类和属性来代替表和数据列,支持多态,支持各种关联,减少SQL的冗余。

缓存:

一级缓存的作用:

一级缓存基于session的缓存,主要是用于提升系统的性能,对于变化不大的数据,可以存放到session缓存中,用于减少访问数据库的频率,提升性能。

Load方法和get方法(load支持延迟加载[load方法使用时不会发出SQL当使用load查询出来的结果时才会发出SQl语句],get不支持延迟加载)使用一级缓存,load时会发出SQL语句并将查询结果放入到session一级缓存中,下次load查询时会从session缓存中取得。一级缓存缓存的是实体对象,查询实体对象时才会使用到一级缓存。

一级缓存的生命周期:

一级缓存的生命周期与session的生命周期相同当session创建时,一级缓存生效,当session关闭时,一级缓存失效。一级缓存的数据不能跨session使用,session不能共享一级缓存数据,session关闭时一级缓存也会失效。

Session级缓存(一级缓存)的管理:

Session的clear方法清除缓存,会将缓存中的所有的对象信息清除掉;session的evict方法可以清除掉指定对象的信息;一级缓存机制无法取消但是可以管理,例如保存大量对象信息时,可以使用clear方法清除缓存达到管理缓存的目的。

如何避免一次性大批量数据的插入,导致内存溢出:

先session.flush(),清理缓存,再session.clear()清除缓存。

相关推荐
♡喜欢做梦31 分钟前
【MySQL】深入浅出事务:保证数据一致性的核心武器
数据库·mysql
遇见你的雩风34 分钟前
MySQL的认识与基本操作
数据库·mysql
dblens 数据库管理和开发工具37 分钟前
MySQL新增字段DDL:锁表全解析、避坑指南与实战案例
数据库·mysql·dblens·dblens mysql·数据库连接管理
weixin_4196583138 分钟前
MySQL的基础操作
数据库·mysql
不辉放弃2 小时前
ZooKeeper 是什么?
数据库·大数据开发
Goona_2 小时前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
daixin88483 小时前
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
java·开发语言·redis·缓存
程序员编程指南3 小时前
Qt 数据库连接池实现与管理
c语言·数据库·c++·qt·oracle
幼儿园老大*5 小时前
数据中心-时序数据库InfluxDB
数据库·时序数据库
daixin88485 小时前
Redis过期数据的删除策略是什么?有哪些?
数据库·redis·缓存