悲观锁和乐观锁、缓存

悲观锁:

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

相关推荐
国强_dev9 分钟前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist12312 分钟前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器17 分钟前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天1 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
桌面运维家1 小时前
如何用半缓存云桌面将服务器硬盘容量扩展至本地终端?
运维·服务器·缓存
南墙上的石头2 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画3 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc3 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t4 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
执子手 吹散苍茫茫烟波4 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql