session的缓存有两大作用

(1)减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,音系Session的缓存

可以提高数据库访问性能

(2)保证缓存中的对象与数据库中的相关记录保持同步,位于缓存中的对象被称为持久化对象。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的sql语句,这使得Session能够把几条相关的sql语句并为一条sql语句,以便减少访问数据库的次数,从而提高应用程序的性能,以下程序代码对Customer的name属性修改了两次:

当Session清理缓存时,只需执行一条update语句:

(3)当缓存中的持久化对象之间存在循环关联关系时,Session会保证不出现访问对象图的死循环,以及由死循环引起的JVM堆栈溢出异常。

Session在清理缓存时,按照以下顺序执行sql语句

按照应用程序调用的session.save()方法的先后顺序,执行所有对实体进行插入的insert语句

执行所有对实体进行更新的 update语句

执行所有对集合进行删除的delete语句

执行所有对集合元素进行删除,更新,插入的sql语句

执行所有对集合进行插入的insert语句

按照应用程序调用session.delete()方法的先后顺序,执行所有对实体进行删除的delete语句

下图列出了三种清理模式执行清理操作的时间点

FlushMode.AUTO是默认值,这也是优先考虑的清理模式,它会保证在整个事务中,数据保持一致。如果事务仅包含查询数据库的操作,而不会修改数据库的数据,也可以选用FlushMODE.COMMIT模式,这个可以避免在执行Session的查询方法时先清理缓存,以稍微提高应用程序的性能。

文章内容摘自《精通Hibernate(孙卫琴)》

理解Session缓存的更多相关文章

  1. 转!!深入理解 Session 与 Cookie

    摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...

  2. [转]session缓存机制和三种对象状态

    摘自 http://blog.csdn.net/csh624366188/article/details/7612142 Hibernate 的Session就是其中的一个,它提供了基本的增,删,改, ...

  3. 深入理解 Session 与 Cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  4. 【转】深入理解 Session 与 Cookie

    Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简单又复 ...

  5. 理解session和cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  6. 第10章 深入理解Session与Cookie

    需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...

  7. 理解Session与Cookie

    写在前面的话:Session和Cookie是非常有意思的两个概念,对于两者的管理可以处理的很复杂,但是无论如何,理解Session和Cookie的基本概念和发明初衷,对于问题的解决,大有裨益. === ...

  8. ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存

    前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介绍下怎么样在 asp.net core 中使用 Redis 进行资 ...

  9. hibernate笔记--缓存机制之 一级缓存(session缓存)

    一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询i ...

随机推荐

  1. openssl中RSA数字签名的使用

    参考: OpenSSL命令行工具验证数字签名 客户端需要生成一对密钥,服务器需要生成一对密钥,分别记为client_private.pem/client_public.pem和server_priva ...

  2. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。

    在应用程序配置文件中找不到名为“OAEntities”的连接字符串. 分析原因:由于Model类是数据库实体模型,通过从数据库中引用的方式添加实体,所以会自动产生一个数据库连接字符串,而程序运行到此, ...

  3. JAVA追加写入文本文件

    public void method1() { FileWriter fw = null; try { //如果文件存在,则追加内容:如果文件不存在,则创建文件 File f=new File(&qu ...

  4. 爬取文件时,对已经操作过的URL进行过滤

    爬取文件时,对已经操作过的URL进行过滤 1.创建过滤规则文件filter.py在spiders同级目录 class RepeatUrl: def __init__(self): self.visit ...

  5. Java生成生成密码类

    import java.util.Date; import java.util.Random; public class PasswordUtil { public final static Stri ...

  6. IIS中配置访问HTTPS

    1,新建网站,选中类型为 https,然后更改SSL证书为你配置的SSL证书, 对于SSL证书的配置是这样的 点开第二步,然后点击 创建自签名证书 确定以后点开网站看到有个SSL, 双击进去,再选中 ...

  7. 线程 ID

    摘自<Linux 环境编程:从应用到内核> 在 Linux 中,目前的线程实现是 Native POSIX Thread Library,简称 NPTL.在这种实现下,线程又被称为轻量级进 ...

  8. 通过impala更改Kudu表属性

    开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据.这些属性包括表名, Kudu 主地址列表,以及表是否由 Impala (内部)或外部管理. Rename an Im ...

  9. windows快速进入安装目录

    ctrl+R 输入%LOCALAPPDATA%\+应用名字 %LOCALAPPDATA%\composer

  10. oracle的DBMS_JOB相关知识

    http://langgufu.iteye.com/blog/1179235 查看当前定时任务 select job,next_date,next_sec,failures,broken from u ...