博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
session.flush()与session.clear()的区别及使用环境
阅读量:6411 次
发布时间:2019-06-23

本文共 906 字,大约阅读时间需要 3 分钟。

hot3.png

首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的,

session.flush()和session.clear()就针对session的一级缓存的处理。

   简单的说,

1 session.flush()的作用就是将session的缓存中的数据与数据库同步。

2 session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。

 

   详细的说:网上很多这样的文章,我就不说了,可以看看这篇文章,写的很详细。http://blog.csdn.net/lssssss/article/details/6839633

我说一下一些需要注意的信息:

1 session.clear()的作用是只清除session中的缓存数据,但不管缓存与数据库的同步。

比如,你执行了

Po po = new Po();

session.save(po),

之后马上执行session.clear(),在事务结束的时候,这条数据是不会被持久化到数据库中的,因为一般缓存是在事务提交的时候进行清理的,当在清理缓存前就把缓存给清除了,自然就不会同步到数据库了。不过这个也有例外的情况,就是当对象使用native生成器来生成主键id时,当执行session.save()方法时,就会立马往数据库插入一条数据,这时候执行session.clear()也不会影响了。

2 当更新或者保存大批量数据的时候,可以每固定数量的时候,进行清理缓存,同时清除缓存:

for (int i = 0; i < 1000;i ++){

if (i /20 == 0) {

  session.flush();

  session.clear();

}

}

因为把大量的对象放到session缓存中会浪费大量的内容空间。

 

3 执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。

转载于:https://my.oschina.net/airship/blog/1517963

你可能感兴趣的文章
Hive操作大全(原创)
查看>>
区块链开发公司谈供应链金融的优势
查看>>
Android实际开发中实用的第三方(开源)框架
查看>>
Why I quit from Qt5 Quick?
查看>>
java线程池的原理学习
查看>>
Git之Eclipse提交项目到Github并实现多人协作
查看>>
阿里云邮免费企业邮箱使用smtp发送邮件失败(SMTP开启、配置问题)
查看>>
我们不再需要 Chrome?
查看>>
调查显示开发者最讨厌 PHP,最爱 Python
查看>>
文档和元素的几何滚动
查看>>
gcd算法
查看>>
Storm
查看>>
图片人脸检测——OpenCV版(二)
查看>>
上部 本地实战
查看>>
在oracle linux下使用yum安装报错:[Errno -1] Metadata file does not match checksum
查看>>
个人对CPU状态的描述
查看>>
小白如何学习Python网络爬虫?
查看>>
Ubuntu18.04更换国内源
查看>>
算法导论——贪心算法
查看>>
JVM笔记10-性能优化之高级特性
查看>>