详解Spring boot使用Redis集群替换mybatis二级缓存
1.pom.xml添加相关依赖
org.springframework.boot spring-boot-starter-parent 1.5.1.RELEASE org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0 redis.clients jedis org.springframework.data spring-data-redis
2.配置Redis集群,参考spring-data-redis官方文档
@Component
@ConfigurationProperties(prefix="spring.redis.cluster")
publicclassClusterConfigurationProperties{
/*
*spring.redis.cluster.nodes[0]=127.0.0.1:7379
*spring.redis.cluster.nodes[1]=127.0.0.1:7380
*...
*/
Listnodes;
/**
*Getinitialcollectionofknownclusternodesinformat{@codehost:port}.
*
*@return
*/
publicListgetNodes(){
returnnodes;
}
publicvoidsetNodes(Listnodes){
this.nodes=nodes;
}
}
@Configuration
publicclassAppConfig{
/**
*Typesaferepresentationofapplication.properties
*/
@AutowiredClusterConfigurationPropertiesclusterProperties;
public@BeanRedisConnectionFactoryconnectionFactory(){
returnnewJedisConnectionFactory(
newRedisClusterConfiguration(clusterProperties.getNodes()));
}
}
3.自定义二级缓存类
publicclassRedisCacheimplementsCache{
privatestaticfinalStringPREFIX="SYS_CONFIG:";
privatefinalReadWriteLockreadWriteLock=newReentrantReadWriteLock(true);
privateStringid;
privateJdkSerializationRedisSerializerjdkSerializer=newJdkSerializationRedisSerializer();
privatestaticRedisConnectionFactoryredisConnectionFactory;
publicRedisCache(finalStringid){
if(id==null){
thrownewIllegalArgumentException("CacheinstancesrequireanID");
}
this.id=id;
}
@Override
publicStringgetId(){
returnthis.id;
}
@Override
publicvoidputObject(Objectkey,Objectvalue){
RedisClusterConnectionconn=redisConnectionFactory
.getClusterConnection();
if(key==null)
return;
StringstrKey=PREFIX+key.toString();
conn.set(strKey.getBytes(),jdkSerializer.serialize(value));
conn.close();
}
@Override
publicObjectgetObject(Objectkey){
if(key!=null){
StringstrKey=PREFIX+key.toString();
RedisClusterConnectionconn=redisConnectionFactory
.getClusterConnection();
byte[]bs=conn.get(strKey.getBytes());
conn.close();
returnjdkSerializer.deserialize(bs);
}
returnnull;
}
@Override
publicObjectremoveObject(Objectkey){
if(key!=null){
RedisClusterConnectionconn=redisConnectionFactory
.getClusterConnection();
conn.del(key.toString().getBytes());
conn.close();
}
returnnull;
}
@Override
publicvoidclear(){
//关键代码,data更新时清理缓存
RedisClusterConnectionconn=redisConnectionFactory
.getClusterConnection();
Setkeys=conn.keys((PREFIX+"*").getBytes());
for(byte[]bs:keys){
conn.del(bs);
}
conn.close();
}
@Override
publicintgetSize(){
//TODOAuto-generatedmethodstub
return0;
}
@Override
publicReadWriteLockgetReadWriteLock(){
returnthis.readWriteLock;
}
publicstaticvoidsetRedisConnectionFactory(RedisConnectionFactoryredisConnectionFactory){
RedisCache.redisConnectionFactory=redisConnectionFactory;
}
}
使用一个Transfer类间接注入RedisConnectionFactory
@Component
publicclassRedisCacheTransfer{
@Autowired
publicvoidsetJedisConnectionFactory(
RedisConnectionFactoryjedisConnectionFactory){
RedisCache.setRedisConnectionFactory(jedisConnectionFactory);
}
}
4.在application.propreties中开启二级缓存
开启mybatis的二级缓存
spring.datasource.cachePrepStmts=true
5.基于注解的使用
@CacheNamespace(implementation=RedisCache.class)
publicinterfaceConfigDaoMapper{
.....
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。