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

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

  • 相关阅读:
    java中检测网络是否相通
    springBoot学习资料
    mybatis-Plus 增强版用法收藏
    idea生成springBoot 报错403
    java中所有开源注解收集
    JsonCpp操作数组对象
    第三方库 jsoncpp 读写json
    c++ 判断是64还是32位系统
    c++ 读写结构体到文件
    c/c++ 按照行读取文件
  • 原文地址:https://www.cnblogs.com/bananafish/p/12347035.html
Copyright © 2020-2023  润新知