hibernate-memcached补丁:支持Whalin的MemCached Java客户端
hibernate-memcached(http://code.google.com/p/hibernate-memcached/ )是允许hibernate使用MemCached作为二级缓存的项目,它用到了spymemcached(http://code.google.com/p/spymemcached/ )这个MemCached的Java客户端。花了一点时间做了个补丁,让它也支持Whalin的Java客户端(http://whalin.com/memcached/ )。
所有的代码(包括原hibernate-memcached的所有源码)、javadoc及重新制作的发布包请见附件,限于篇幅就不具体说明了。以下是我更新过的hibernate-memcached的配置说明,原配置说明请参见http://code.google.com/p/hibernate-memcached/wiki/Configuration
Adding hibernate-memcached to your application
MavenRepository page. For those that aren't using Maven2 you'll need to collect a few simple jars for yourself. I am going to assume you already have hibenrnate3 setup before you came here.
You'll need...
- hibernate-memcached-<version>.jar
- commons-codec 1.3
- slf4j-1.5.0.jar
- An slf4j implementation for your preferred logging framework. For log4j you can use slf4j-log4j12-1.5.0.jar .
If you are using spymemcached as the MemCached client, you also need
or if you prefer Whalin's memcached client for java , you need to download java_memcached-release_2.0.1.jar from the download page according to your Java VM version.
Configuring Hibernate
| hibernate.cache.provider_class | com.googlecode.hibernate.memcached.MemcachedCacheProvider |
| hibernate.cache.use_query_cache | true |
Cache Wide Settings
| Property | Default | Description |
| hibernate.memcached.servers | localhost:11211 | Space delimited list of memcached instances in host:port format |
| hibernate.memcached.cacheTimeSeconds | 300 | The default number of seconds items should be cached. Can be overriden at the regon level. |
| hibernate.memcached.keyStrategy | HashCodeKeyStrategy | Sets the strategy class to to use for generating cache keys. Must provide a class name that implements KeyStrategy |
| hibernate.memcached.clearSupported | false | Enables support for the MemcachedCache.clear() method for all cache regions. The way clear is implemented for memcached is expensive and adds overhead to all get/set operations. It is not recommended for production use. |
For spymemcached, you can set:
| hibernate.memcached.readBufferSize | DefaultConnectionFactory.DEFAULT_READ_BUFFER_SIZE | The read buffer size for each server connection from this factory |
| hibernate.memcached.operationQueueLength | DefaultConnectionFactory.DEFAULT_OP_QUEUE_LEN | Maximum length of the operation queue returned by this connection factory |
| hibernate.memcached.operationTimeout | DefaultConnectionFactory.DEFAULT_OPERATION_TIMEOUT | Default operation timeout in milliseconds |
| hibernate.memcached.hashAlgorithm | HashAlgorithm.KETAMA_HASH | Which hash algorithm to use when adding items to the cache. Note: the MemcachedClient defaults to using HashAlgorithm.NATIVE_HASH, while the hibernate-memcached cache defaults to KETAMA_HASH for "consistent hashing" |
For Whalin's client, you can set:
| hibernate.memcached.weights | Space delimited list of server weights. If not set, all servers get the same weight | |
| hibernate.memcached.errorHandler | com.googlecode.hibernate.memcached. dangamemcached.SimpleErrorHandler |
Error handler used by Whalin's client internally |
| hibernate.memcached.poolName | default | The name of SockIOPool |
| hibernate.memcached.initConn | 1 | Initial pool size |
| hibernate.memcached.minConn | 1 | Min pool size |
| hibernate.memcached.maxConn | 10 | Max pool size |
| hibernate.memcached.maxIdle | 3000000 | Max idle time for available sockets. Default 5 minutes |
| hibernate.memcached.socketTimeout | 30000 | Default timeout of socket reads. Default 30 seconds |
| hibernate.memcached.socketConnectTimeout | 3000 | Default timeout of socket connections. Default 3 seconds |
| hibernate.memcached.maintSleep | 30000 | Maintenance thread sleep time. Default 30 seconds |
| hibernate.memcached.compressEnable | true | If compression enabled |
| hibernate.memcached.defaultEncoding | UTF-8 | Default encoding |
Cache Region Settings
| Property | Default | Description |
| hibernate.memcached.[region-name].cacheTimeSeconds | none, see hibernate.memcached.cacheTimeSeconds | Set the cache time for this cache region, overriding the cache-wide setting. |
| hibernate.memcached.[region-name].keyStrategy | none, see hibernate.memcached.keyStrategy | Overrides the strategy class to to use for generating cache keys in this cache region. Must provide a class name that implements KeyStrategy |
| hibernate.memcached.[region-name].clearSupported | none, see hibernate.memcached.clearSupported | Enables clear() operations for this cache region only. Again, the clear operation incurs cost on every get/set operation. |
Hibernate-MemCached-1.0.zip (139.3 KB)
-----------------------------------
附件里的代码中,包com.googlecode.hibernate.memcached.dangamemcached中的代码是我加的,其它的是原项目中的代码。我已经发邮件给Ray Krueger,把我的代码捐赠给了这个项目,因为Ray还收到了另一份捐赠的Whalin补丁,现在还不知道他到底会采用谁的代码。不管怎样,希望这个项目越来越好
上面的配置中忘了提到一点:使用Whalin的客户端时,还必须把hibernate.memcached.memcacheClientFactory设为com.googlecode.hibernate.memcached.whalin.DangaMemcacheClientFactory