本篇文章给大家分享的是有关使用SpringBoot怎么对复述,进行集成来实现缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>复述,简介强>
复述是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件,复述的优势包括它的速度,支持丰富的数据类型,操作原子性,以及它的通用性。
<强>案例整合强>
<强> 1,在Maven pom。xml文件中加入复述,包强>
& lt; !——复述,比; & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-redis & lt; version> $ {boot.version} & lt;/version> & lt;/dependency>
2, SpringBoot配置文件中配置复述,连接(YAML方式配置)
春: 应用程序: 名称:spring-boot-redis 复述: 主持人:192.168.145.132 端口:6379 超时:20000 集群: 节点:192.168.211.134:7000、192.168.211.134:7001 192.168.211.134:7002 maxRedirects: 6 池: max-active: 8 min-idle: 0 最大空闲:8 最大等待:1
解释:本配置采用复述一主三从的的配置方式来提高缓存的吞吐量
<强> 3,复述,配置类强>
@ configuration 公开课RedisConfig { @ bean 公共RedisTemplate<对象,Object>redisTemplate (RedisConnectionFactory connectionFactory) { Object> RedisTemplate<对象;,模板=new RedisTemplate<的在(); template.setConnectionFactory (connectionFactory);//使用Jackson2JsonRedisSerializer来序列化和反序列化复述,值的值 Jackson2JsonRedisSerializer序列化器=new Jackson2JsonRedisSerializer (Object.class); objectmap mapper=new objectmap (); mapper.setVisibility (PropertyAccessor。所有,JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping (ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(映射); template.setValueSerializer(序列化器);//使用StringRedisSerializer来序列化和反序列化复述的关键值 模板。setKeySerializer(新StringRedisSerializer ()); template.afterPropertiesSet (); 返回模板; } }
解释:SpringBoot提供了对复述的自动配置功能,在RedisAutoConfiguration中默认为我们配置了JedisConnectionFactory(客户端连接),RedisTemplate以及StringRedisTemplate(数据操作模板),其中StringRedisTemplate模板只针对键值对都是字符型的数据进行操作,本示例采用RedisTemplate作为数据操作模板,该模板默认采用JdkSerializationRedisSerializer的二进制数据序列化方式,为了方便演示本示例采用Jackson2JsonRedisSerializer来序列化和反序列化复述的价值值,使用StringRedisSerializer来序列化和反序列化复述的关键值。
<强> 4,服务层应用缓存(注解方式)强>
@ Service 公开课PersonService { @ autowired 私人PersonRepo PersonRepo;/* * * @Cacheable应用到读取数据的方法上,先从缓存中读取,如果没有再从DB获取数据,然后把数据添加到缓存中 *除非表示条件表达式成立的话不放入缓存 * @param用户名 * @return */@Cacheable(值=https://www.yisu.com/zixun/坝没А?键=" #根。targetClass + #用户名”,除非=" #结果eq零”) 公众人物getPersonByName(字符串的用户名){ 人的人=personRepo.getPersonByName(用户名); 返回的人; }/* * * @CachePut应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓存 * @param人 * @return */@CachePut(值=坝没А?键=" #根。targetClass + #结果。用户名”,除非=" #人情商null”) 公众人物savePerson(人){ 返回personRepo.savePerson(人); }/* * * @CacheEvict应用到删除数据的方法上,调用方法时会从缓存中删除对应的关键的数据 * @param用户名 * @return */@CacheEvict(值=坝没А?键=" #根。targetClass + #用户名”,条件=" #结果情商真”) 公共布尔removePersonByName(字符串的用户名){ 返回personRepo.removePersonByName(用户名)> 0; } 公共布尔isExistPersonName(人){ 返回personRepo.existPersonName(人)> 0; } }
<>强解释:强>
1,这里的缓存关键为简单的字符串组合,也可根据具体需要实现自定义的关键生成器,然后在注解中使用keyGenerator来引用。
2,春天缓存提供了一些供我们使用的?上下文数据,通过#来引用,具体可查看春官网:http://docs.spring。io/spring/docs/经常/spring-framework-reference/htmlsingle/# cache-spel-context。