详解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 */ publicList getNodes(){ returnnodes; } publicvoidsetNodes(List nodes){ 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。