悲观锁和乐观锁、缓存

悲观锁:

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

相关推荐
大大大水蜜桃几秒前
DNS主从同步及解析
数据库
DKPT7 分钟前
正则表达式
java·数据库·笔记·学习·正则表达式
CodeJourney.9 分钟前
DeepSeek与WPS的动态数据可视化图表构建
数据库·人工智能·信息可视化
背着黄油面包的猫23 分钟前
速通FlinkCDC3.0
数据库·mysql·flink
星迹日30 分钟前
MySQL:数据库设计
数据库·mysql
听闻风很好吃1 小时前
Redis高级数据类型解析(二)——Set、Sorted Set与Geo实战指南
数据库·redis·缓存
小刘同学++1 小时前
Qt 使用 MySQL 数据库的基本方法
数据库·qt·mysql
陈大大陈1 小时前
基于 C++ 的用户认证系统开发:从注册登录到Redis 缓存优化
java·linux·开发语言·数据结构·c++·算法·缓存
编程在手天下我有1 小时前
缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析
数据库·缓存·oracle·软件开发·架构设计·数据一致性
云攀登者-望正茂1 小时前
Redis 及其在系统设计中的作用
数据库·redis·缓存