码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Boot 学习----SpringBoot整合Redis

时间:2020-02-22 22:12:10      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:val   cts   定义   pat   manager   int   art   getname   redist   

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否决缓存条件

具体又哪些参数根据注解的参数来对照。

Spring Boot 学习----SpringBoot整合Redis

标签:val   cts   定义   pat   manager   int   art   getname   redist   

原文地址:https://www.cnblogs.com/bananafish/p/12347035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!