悲观锁和乐观锁、缓存

悲观锁:

悲观锁的实现通常依赖于数据库提供的机制,在整个处理的过程中数据处于锁定状态,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()清除缓存。

相关推荐
稀饭过霍6 分钟前
数据类型【TINYINT、SMALLINT、INT、BIGINT、decimal(18,2)】表示意思
数据库
俺不要写代码10 分钟前
数据库:DML
数据库·oracle
这个DBA有点耶12 分钟前
两张百万级大表JOIN跑崩了?试试这3招
数据库·代码规范
IntMainJhy19 分钟前
「Flutter三方库sqflite的鸿蒙化适配与实战指南:从入门到踩坑的本地数据库开发全记录」
数据库·flutter·华为·信息可视化·数据库开发·harmonyos
counting money35 分钟前
Spring框架基础(依赖注入-全注解形式)
java·数据库·spring
计算机安禾42 分钟前
【Linux从入门到精通】第33篇:数据库MySQL/MariaDB安装与基础调优
linux·数据库·mysql
瀚高PG实验室1 小时前
ERROR: invalid input syntax for type integer: “a“
数据库·瀚高数据库
S1998_1997111609•X1 小时前
论next/js在打击省份及犯罪行为集团的系统分析[特殊字符]设计
网络·数据库·百度·ssh·开闭原则
dfdfadffa1 小时前
如何创建仅在首次订阅时执行一次计算的 RxJS 懒加载 Observable
jvm·数据库·python
Irene19911 小时前
Oracle 中:为什么 from 子查询后面需要一个别名
数据库·oracle