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
If you are using Maven2 for your application build you can follow the instructions on the 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. |