Spring Boot 学习----SpringBoot整合Redis
SpringBoot整合Redis
说明:由于使用的是window系统,所以本文中使用的redis是再Docker中运行的。
至于如何启动redis这里不再说明,需要的请自行百度。
配置pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
编写redis配置类
/** * redis配置类 */ @Configuration //开启缓存 @EnableCaching public class RedisConfig extends CachingConfigurerSupport { /** * 自定义生成key的规则 * @return */ @Override public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object o, Method method, Object... objects) { //格式化缓存key字符串 StringBuilder sb = new StringBuilder(); //追加类名 sb.append(o.getClass().getName()); //追加方法名 sb.append(method.getName()); System.out.println("调用Redis缓存Key : " + sb.toString()); return sb.toString(); } }; } /** * 采用RedisCacheManager作为缓存管理器 * @param connectionFactory */ @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory); return redisCacheManager; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { // 解决键、值序列化问题 StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
- 上面的redisTemplate可以使用其他序列化的实现。
- key的生成规则可以由自己定义,返回值会成为redis的key。
编写redis操作工具类
redis工具类主要使用redisTemplate类进行操作,至于怎么操作这里不再阐述。你可以找网上大佬封装好的,也可以自己封装。
使用缓存
这里主要讲解一下 @Cacheable、@CachePut、@CacheEvict
- @Cacheable(在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。)
@Cacheable(key = "#id",value = "key",unless = "#id==null") @PostMapping("/{id}/{value}") public String setKey(@PathVariable String value,@PathVariable String id){ return value+id; }
PS:若去掉value属性则会抛错。若没有key则会进入到配置类中的key生成策略中生成对应key。
最后进入redis中的key格式回事 key::value
- @CacheEvict(方法执行成功后会从缓存中移除相应数据)
@CacheEvict(value = "key",key = "#id") @DeleteMapping("/{id}") public String clear(@PathVariable String id){ return null; }
- @CachePut(主要用于数据新增和修改方法)
@CachePut(value = "value", key = "#id") @PutMapping("/{id}/{value}") public User save(){ return null; }
PS:参数, value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件
具体又哪些参数根据注解的参数来对照。
相关推荐
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23
jackbon 2020-10-19
kaixinfelix 2020-10-04