Session的缓存

Session的缓存又称为Hibernate的第一级缓存。Session的缓存是内置不能被卸载的,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库或一个事务)。Session缓存中的对象为持久化对象,Session根据持久化对象状态的改变同步更新数据库。在一级缓存中,持久化类的每次实例都有唯一的对象标识符(OID)。正常情况下,一级缓存由Hibernate自动维护的,无需人工干预。

Session缓存的应用:

Session接口时Hibernate向应用程序提供操纵数据库的最主要的接口,它提供了的基本的保存、更新、删除和加载等方法。

(1)save()、update()和saveOrUpdate():当session对象调用save()方法、update()方法或saveOrUpdate()方法持久化一个对象后,该对象就会被加入到session的缓存中。

(2)get()和load():当session对象调用get()方法或load()方法从数据库中取出一个对象,该对象也会被加入到session缓存中。

(3)close():当session对象调用close()方法时,session缓存就会被清空。

Session缓存的作用:

(1)减少数据库的访问频率:应用程序从内存中读取持久化对象的速度比到数据库中查询数据要快得多,因此使用Session缓存可以提高数据库的访问性能。

(2)保证缓存中对象与数据库的数据同步:当缓存中持久化对象的状态发生改变时,Session不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以减少数据库的访问次数,提高访问效率。

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

一般情况下,Session会在下面的时间点清理缓存:

(1)当应用程序调用Transaction的commit()方法时,commit()方法先清理缓存,然后再向数据库提交事务。

(2)当应用程序显示调用Session的flush()方法的时候。

(3)当应用程序调用Session的find()或itreate()时,若缓存中持久化对象的属性发生改变,先清理缓存,以保证查询的结果能反映持久化对象的最新状态。

时间: 2024-11-13 16:49:27

Session的缓存的相关文章

session 一级缓存相关

Session 具有一个缓存, 位于缓存中的对象称为持久化对象, 它和数据库中的相关记录对应. Session 能够在某些时间点, 按照缓存中对象的变化来执行相关的 SQL 语句, 来同步更新数据库, 这一过程被称为刷新缓存(flush). hibernate把对象分为三种状态:Session 的特定方法能使对象从一个状态转换到另一个状态. •flush:Session 按照缓存中对象的属性变化来同步更新数据库: •默认情况下 Session 在以下时间点刷新缓存: –显式调用 Session

Hibernate入门(三)之hibernate 的session的缓存机制

session缓存 缓存的生命周期 当打开session以后,该缓存就开始了,当session关闭以后,该缓存不存在,其生命周期和session的生命周期是一样的 如何将数据存放到缓存中 get方法 session.get方法可以把一个对象放入到session的缓存中,以主键标识该对象,所以我们把这样的主键也叫oid save方法 Session.save方法可以把对象放入到缓存中 update方法 session.update方法把对象放入到了session缓存中 如何测试缓存中是否有数据 说

转载!!!Hibernate中Session的缓存及对象的状态

对于session这个接口的学习可以说是最痛苦也是最复杂的,因为它所涉及的方面太多了,一些隐藏的机制也很多,谁让它是Central API呢. 对于它的几个最基本的方法如save().delete().flush()等的学习都花了我一定的时间.在深入了解这些这些方法前,了解session的缓存机制以及Hibernate中Java对象的状态对我们是很有帮助的. 一.Session的缓存 Java是纯面向对象的语言,因此不可能像C语言那样直接操纵内存,例如声明一段可用的内存空间.在Java里面,缓存

windows使用nginx+memcached实现负载均衡和session或者缓存共享

windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台服务器 服务器1:115.29.186.215 windows2008 64位操作系统 服务器2:114.215.193.64 windows2008 32位操作系统 其中服务器1同时做nginx负载均衡服务器 使用概要:由于两台服务器:所以数据库连接可以使用一台服务器: 由于本人使用的ibatis框架:所以在数据库层使用ibatis Cache 这样就可以使用一台sql服务器:两台服务器访问都是缓存数

asp.net core webapi Session 内存缓存

Startup.cs文件中的ConfigureServices方法配置: #region Session内存缓存 services.Configure<CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); //启用内存缓存(该步骤需在AddSession()调用前使用)

Hibernate的session一级缓存

一级缓存是Session周期的,当session创建的时候就有,当session结束的时候,缓存被清空 当缓存存在的时候,每次查询的数据,都会放在缓存中,如果再次查询相同的数据,则不会再次查询数据库,可以有效的减少数据库的访问量. 但是,session的生命周期很短,当session创建,进行数据库操作后,就会被关闭,同样的,缓存就会被清空.如果是在javaweb中,session的生命周期,就是浏览器向服务器的一次请求.所以,后面hibernate会有相应的二级缓存 操作缓存的几个方法介绍 一

cookie,session,缓存

一.cookie和sessioncookie和session都是为了弥补http协议的无状态特性,对服务端来说无法知道两次http请求是否来自同一个用户,利用cookie和session就可以让用户只登录一次,服务就知道某个请求是否需要重新登录.cookie是保存在客户端,session是存在服务器,session依赖于cookie.cookie是一些用户信息,不是缓存. 二.缓存缓存是浏览网页产生的临时文件,比如图片,css,js.1.强缓存直接从本地缓存中取资源,不会和服务器通信,返回的ht

session与缓存

分布式系统开发常见问题-1. session的复制与共享 2. 分布式缓存的设计 1. session的复制与共享 在web应用中,为了应对大规模访问,必须实现应用的集群部署.要实现集群部署主要需要实现session共享机制,使得多台应用服务器之间会话统一, tomcat等多数主流web服务器都采用了session复制以及实现session的共享. 但问题还是很明显的: 在节点持续增多的情况下,session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快

laravel下的cookie、session、缓存和提交信息处理

$value = Cookie::get('name'); $response = Response::make('world'); $response->withcookie(Cookie::make('name','value',$minutes)); $cookie = Cookie::forever('name','value'); //Session Input::flash(); //将用户提交的信息存入session Input::flashonly(); Input::flash