SSH整合缓存之-Memcached作为hibernate的二级缓存
Hibernate本身不提供二级缓存,所以需要使用第三方插件来作为二级缓存;本次使用memcached作为Hiberbate的二级缓存:添加步骤如下:
一、需要安装memcached服务端
1. 下载memcached的windows稳定版,
(本次测试使用下载memcached http://www.newasp.net/soft/63735.html)
2. 在CMD下进入memcached解压路径:输入 memcached.exe -d install" 安装.
3.
再输入:memcached.exe -d start" 启动,可以看到进程中多了memcached。
NOTE:1、
一定要开启memcached服务;2、以后memcached将作为windows的一个服务每次开机时自动启动。
二、导包
commons-codec-1.3.jar
hibernate-memcached-1.2.2.jar(很多文章中少了这个,导致失败!)
memcached-2.1.jar
spy-2.4.jar
slf4j-api-1.5.0.jar
三、修改配置文件
1、applicationContext.xml

- <property name="hibernateProperties">
- <!-- hibernate memcached 二级缓存 -->
- <value>
- hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
- hibernate.show_sql=true
- hibernate.format_sql=true
- hibernate.query.substitutions=true 1, false 0
- hibernate.jdbc.batch_size=20<!--默认的数据库-->
- <!--配置Hibernate使用cache提供类-->
- hibernate.cache.provider_class=com.googlecode.hibernate.memcached.MemcachedCacheProvider
- <!-- 开启Hibernate的二级缓存 -->
- hibernate.cache.use_second_level_cache=true
- <!--设置查询缓存开启-->
- hibernate.cache.use_query_cache=true
- <!-- 设置memcached缓存服务器的端口 -->
- hibernate.memcached.servers=localhost:11211
- <!-- 设置二级缓存的前缀名称 -->
- hibernate.cache.region_prefix=quality.cache.ehcache
- <!-- 否使用结构化的方式缓存对象 -->
- hibernate.cache.use_structured_entries=true
- <!-- 操作超时时间设置,单位ms -->
- hibernate.memcached.operationTimeout=300000
- <!-- 缓存失效时间,单位秒 -->
- hibernate.memcached.cacheTimeSeconds=300
- </value>
- </property>
更多详细的参数请参考http://code.google.com/p/hibernate-memcached/wiki/Configuration
此时启动tomcat服务器,console假如有如下的信息,
2013-07-20 18:29:42.426 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2013-07-20
18:29:42.426 INFO net.spy.memcached.MemcachedConnection: Connection state
changed for sun.nio.ch.SelectionKeyImpl@8c4549
那恭喜您,您已经成功配置memcached作为二级缓存了!但是此时还不能使用memcached。
2、修改数据表映射文件*.hbm.xml
只需在需要缓存的字段前加上<cache
usage="read-write"/>,根据不同的需求,usage可改为read、write
- <hibernate-mapping package="com.xxx.xxx.xxx">
- <class name="xxx" table="xxx_xxx">
- <cache usage="read-only" />
- <id name="id">
- <generator class="native" />
- </id>
- <property generated="never" lazy="false" name="title" />
- <property generated="never" lazy="false" length="50000" name="content"
- type="text" />
- <property generated="never" lazy="false" name="faceIcon" />
- <property generated="never" lazy="false" name="postTime"
- type="timestamp" />
- <property generated="never" lazy="false" name="ipAddr" />
加上query.setCacheable(true);//这样才能使查询的时候调用缓存!要对查询设计到的所有方法添加开启二级缓存

OK,此时应该是可以使用memcached作为强大的二级缓存了!
四、案例
第一次点击搜索按钮,console输出信息为
- Hibernate:
- select
- department0_.id as id21_0_,
- department0_.name as name21_0_,
- department0_.principal as principal21_0_,
- department0_.description as descript4_21_0_,
- department0_.parentId as parentId21_0_
- from
- suma_department department0_
- where
- department0_.id=?
- Hibernate:
- select
- department0_.id as id21_0_,
- department0_.name as name21_0_,
- department0_.principal as principal21_0_,
- department0_.description as descript4_21_0_,
- department0_.parentId as parentId21_0_
- from
- suma_department department0_
- where
- department0_.id=?
第二、三、四...次点击搜索按钮,console输出信息为:
就没有sql语句的打印信息:页面依旧正常能查询到数据,说明memcached二级缓存添加成功
Ok,第一次之后的查询在缓存生命周期内都不用到数据库去取数据了。
骚年:已经成功了,还等什么?
参考地址忘记了 :-----
SSH整合缓存之-Memcached作为hibernate的二级缓存的更多相关文章
- Hibernate的二级缓存策略
Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次 ...
- Hibernate的二级缓存使用(spring使用)
(一)Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库 ...
- ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存
ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate : Hibernate是一个持久层框架,经常访问物理数据库 ...
- 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示
转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...
- hibernate(九) 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...
- Java面试题:Hibernate的二级缓存与Hibernate多表查询
我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...
- (转)为Spring集成的Hibernate配置二级缓存
http://blog.csdn.net/yerenyuan_pku/article/details/52896195 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...
- Hibernate之二级缓存
Hibernate之二级缓存 一.简介 Gaving King曾经对别人说,hibern ...
- hibernate的二级缓存
缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数 ...
随机推荐
- 华为oj---合并数组
题目标题: 将两个整型数组按照升序合并,并且过滤掉重复数组元素 详细描述: 接口说明 原型: voidCombineBySort(int* pArray1,intiArray1Num,int* pAr ...
- WinForm DataGridView控件、duck布局
1.DataGridView控件 显示数据表 (1)后台数据绑定: List<xxx> list = new List<xxx>(); dataGridView1.DataSo ...
- localStorage , sessionStorage ,cookie 使用介绍
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 自己动手系列——实现一个简单的ArrayList
ArrayList是Java集合框架中一个经典的实现类.他比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小.处于练手的目的,实现一个简单的ArrayList,并且把实现 ...
- 笑谈ArcToolbox (3) ArcToolbox的一亩三分地
笑谈ArcToolbox (3) ArcToolbox的一亩三分地 by 李远祥 每个人都会有一些鲜为人知的小秘密,都有着不允许别人染指的一亩三分地.软件是人编写的,当然也会给它留有自己所拥有的一亩三 ...
- 谨慎能捕千秋蝉(三)——界面操作劫持与HTML5安全
一.界面操作劫持 1)ClickJacking ClickJacking点击劫持,这是一种视觉上的欺骗. 攻击者使用一个透明的.不可见的iframe,覆盖在网页的某个位置上,诱使用户点击iframe. ...
- java多线程安全问题 静态函数的修饰
/* 如果同步函数被静态修饰后,使用的锁是什么呢? 通过验证,发现不在是this.因为静态方法中也不可以定义this. 静态进内存是,内存中没有本类对象,但是一定有该类对应的字节码文件对象. 类名.c ...
- Javascript面对对象. 第四篇
原型模式创建对象也有自己的缺点,它省略看构造函数传参初始化这一过程,带来的缺点就是初始化的值都是一致的. 而原型最大的缺点就是它优点,那就是共享. 原型中所有属性是被很多实例共享的,共享对于函数非常合 ...
- Jquery动态增加行和删除行
$("#add_5").click(function(){ var str_1="<tr> <td><input type=\"t ...
- oracle系列笔记(1)---查询数据
查询数据 1. 查询(select .. form ..) (1)普通查询 select * from employees --代表查询employees表中所有数据 select last_n ...