1.使用背景
因客户需求,需要将现在的项目缓存架构换掉,现在使用的memcached缓存服务器。由于memcached出现了一些bug,客户要求换成Redis缓存服务器。所用的项目是spring+springmvc+hibernate4.18架构。
2.引入jar包
所需的jar:
或者使用maven下载依赖
<dependency>
<groupId>com.github.debop</groupId>
<artifactId>hibernate-redis</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>fst</artifactId>
<version>2.48</version>
</dependency>
3.配置文件
applicationContext.xml
<!-- redis二级缓存 -->
<prop key="hibernate.cache.use_query_cache">true</prop><!-- 开启缓存 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop><!-- 开启二级缓存 -->
<prop key="hibernate.cache.use_structured_entries">true</prop><!-- 结构化存储 -->
<prop key="hibernate.cache.region_prefix">hibernate</prop><!-- 二级缓存前缀名称-->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.redis.hibernate4.SingletonRedisRegionFactory</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">hibernate-redis.properties</prop>
hibernate-redis.properties
# Redisson configuration file
redisson-config=classpath:redisson.yaml
redis.expiryInSeconds.default=120
redis.expiryInSeconds.hibernate.common=0
redis.expiryInSeconds.hibernate.account=1200
redisson.yaml:这是单点的配置,若要配置分布式缓存,需修改,可参考其他资料
# redisson configuration for redis servers
# see : https://github.com/mrniko/redisson/wiki/2.-Configuration
singleServerConfig:
idleConnectionTimeout: 10000
pingTimeout: 1000
connectTimeout: 1000
timeout: 1000
retryAttempts: 1
retryInterval: 1000
reconnectionTimeout: 3000
failedAttempts: 1
password: 123456
subscriptionsPerConnection: 5
clientName: null
address:
- "redis://192.168.39.100:6379"
subscriptionConnectionMinimumIdleSize: 1
subscriptionConnectionPoolSize: 25
connectionMinimumIdleSize: 5
connectionPoolSize: 100
database: 0
dnsMonitoring: false
dnsMonitoringInterval: 5000
threads: 0
# Codec
codec: !<org.redisson.codec.SnappyCodec> {}
useLinuxNativeEpoll: false
eventLoopGroup: null
注意address的配置,配成数组格式,否则会报错。
4.hibernate实体类上加上@cache注解,在query查询上开启缓存就可以使用redis缓存了。
参考网址:http://wzalong.iteye.com/blog/2324290
https://github.com/debop/hibernate-redis
https://yq.aliyun.com/articles/551640#77