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" />
3、查询语句前

加上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的二级缓存的更多相关文章

  1. Hibernate的二级缓存策略

    Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次 ...

  2. Hibernate的二级缓存使用(spring使用)

    (一)Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库 ...

  3. ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存

    ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate  : Hibernate是一个持久层框架,经常访问物理数据库 ...

  4. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

    转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...

  5. hibernate(九) 二级缓存和事务级别详讲

    序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...

  6. Java面试题:Hibernate的二级缓存与Hibernate多表查询

    我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...

  7. (转)为Spring集成的Hibernate配置二级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/52896195 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...

  8. Hibernate之二级缓存

                                                            Hibernate之二级缓存 一.简介 Gaving King曾经对别人说,hibern ...

  9. hibernate的二级缓存

    缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数 ...

随机推荐

  1. 如何使excel表格的内容自动添加前缀

    一.假设是要在一列的单元格内容前加上固定的内容,则 方法一在原单元格实现,分两种情况 如果原单元格的内容是数字内容,要在原数字前添加"ABC"这样的前缀则选中这些单元格----右键 ...

  2. Servlet生命周期方法,request.getRequestDispatcher

    1,request.getRequestDispatcher 方法全称javax.servlet.ServletRequest.getRequestDispatcher(String) 2,在web. ...

  3. OpenCV教程二 - Mat对象与它各种用法

    学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源, ...

  4. JS-鼠标滚轮事件 和 阻止默认行为

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. java算法 蓝桥杯 高精度加法

    问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

  6. MEAN教程3-NPM安装

    NPM简介Node只是一个平台,它的功能和API将只是一个最小集.想获得更多的功能,可以使用模块系统来扩展平台.安装.更新和删除Node.js模块最好的方法是使用NPM工具.NPM有如下两个主要特性: ...

  7. 支撑Pinterest日均1000+次试验的A/B测试平台揭秘

    编者按:本文详细介绍了 Pinterest 内部A/B测试平台的搭建过程,对于无论是有技术能力和资源想要自建A/B测试系统的大公司,还是想在业务中引入第三方A/B测试方法和工具的中小公司都极具参考意义 ...

  8. vs2010 入门程序

    #include <stdio.h> int main(){ printf("hello world!\n"); getchar(); //此处避免执行完程序自动退出 ...

  9. excel表格的特殊需求引发的Java思考

    前言: 前些天遇到了这样的一个需求,将下图: 将表格中货号-前面部分一致的行合成一行,并且将第二行,第三行的价格添加到第一行中为价格二,价格三.如图: 接到这样的需求,我的第一感觉是直接手动合并(暗暗 ...

  10. tomcat基础应用

    1. Tomcat版本和支持的API和JDK版本 Apache Tomcat Servlet API JSP API JDK 7.0 3.0 2.2 1.6 6.0 2.5 2.1 1.5 5.5 2 ...