首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate-memcached-在Hibernate中施用Memcached作为一个二级分布式缓存

2012-10-30 
hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存hibernate-memcached--在Hiberna

hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存

hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存今天在网上看到一个用Memcached作为Hibernate二级分布式缓存,感觉挺有兴趣,就是尝试用了,感觉还不错,就推荐给大家看一下。

官方网址:?http://code.google.com/p/hibernate-memcached/
目前最新版本为1.0, 支持Hibernate3.3.

下面是具体的使用方法:
hibernate-memcached需要支持的类库如下:

  • hibernate-memcached-<version>.jar
  • memcached-2.1.jar
  • spy-2.4.jar
  • commons-codec 1.3
  • slf4j-1.5.0.jar 如果你的项目使用的是Log4j,可以用?slf4j-log4j12-1.5.0.jar
    配置方法如下:

    配置Hibernate使用cache提供类

    hibernate.cache.provider_classcom.googlecode.hibernate.memcached.MemcachedCacheProvider

    设置查询缓存开启

    hibernate.cache.use_query_cachetrue
    其它一些参数设置说明:PropertyDefaultDescriptionhibernate.memcached.serverslocalhost:11211memcached 服务地址,多个用空格分隔
    格式host:port?
    hibernate.memcached.cacheTimeSeconds300缓存失效时间,单位秒hibernate.memcached.keyStrategyHashCodeKeyStrategy缓存Key生成存储HashCode算法hibernate.memcached.readBufferSizeDefaultConnectionFactory.DEFAULT_READ_BUFFER_SIZE从服务器读取数据缓存区大小
    hibernate.memcached.operationQueueLengthDefaultConnectionFactory.DEFAULT_OP_QUEUE_LENMaximum length of the operation queue returned by this connection factoryhibernate.memcached.operationTimeoutDefaultConnectionFactory.DEFAULT_OPERATION_TIMEOUT操作超时时间设置hibernate.memcached.hashAlgorithmHashAlgorithm.KETAMA_HASH新增缓存数据到服务器时使用的Hash散列算法。 当 hibernate-memcached 设置成 KETAMA_HASH算法时,注意:默认客户端API使用的是 HashAlgorithm.NATIVE_HASHhibernate.memcached.clearSupportedfalse支持MemcachedCache.clear()方法清空缓存。
    建议不要开启。

    配置示例(本文以Hibernate3.3-entitymanager为例)
    配置 persistence.xml文件
    <?xml?version="1.0"?encoding="UTF-8"?>
    <persistence?xmlns="http://java.sun.com/xml/ns/persistence""?target="_new">http://java.sun.com/xml/ns/persistence"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xsi:schemaLocation="http://java.sun.com/xml/ns/persistence?http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"?version="1.0">

    <persistence-unit?name="entityManager"?transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:comp/env/jdbc/qualitydb</jta-data-source>

    <properties>
    <property?name="hibernate.dialect"?value="org.hibernate.dialect.PostgreSQLDialect"?/>
    <property?name="hibernate.max_fetch_depth"?value="3"?/>
    <property?name="hibernate.show_sql"?value="true"?/>


    <property?name="hibernate.cache.region_prefix"?value="quality.cache.ehcache"/>
    <property?name="hibernate.cache.use_second_level_cache"?value="true"/>
    <property?name="hibernate.cache.use_structured_entries"?value="true"/>
    <property?name="hibernate.cache.use_query_cache"?value="true"/>
    <property?name="hibernate.cache.provider_class"?value="com.googlecode.hibernate.memcached.MemcachedCacheProvider"/>
    <property?name="hibernate.memcached.servers"?value="localhost:11211"/>

    </properties>

    </persistence-unit>

    </persistence>

    启动后,提示如下:
    2008-08-28 17:10:08,312 JCLLoggerAdapter.java265 INFO -- Starting MemcachedClient...
    2008-08-28 17:10:08.718 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
    2008-08-28 17:10:08.750 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@16e59da

    表示我们第一步配置已经成功了,接下来,对需要进行缓存的Entity进行配置
    ?1?@Entity
    ?2?@Cache(usage?=?CacheConcurrencyStrategy.READ_WRITE)//设置要求缓存
    ?3?public?class?Student?{
    ?4?
    ?5???@Id
    ?6???@Column(length=32)
    ?7?????private?String?id;
    ?8?????
    ?9?????@Column(length=20)
    10?????private?string?name;
    11?????
    12?????@OneToMany
    13?????@Cache(usage?=?CacheConcurrencyStrategy.READ_WRITE)
    14?????private?Set<Book>?books;
    15?
    16?}

热点排行