• 02 Springboot整合redis look


    02 Springboot整合redis

    RedisTemplate使用

    项目的搭建

    创建springboot项目哦

    1 加入依赖

     <!-- spring boot redis缓存引入 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <!-- 缓存连接池-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>
    
            <!-- redis 存储 json序列化 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
            </dependency>
    		 <!-- 生成getset方法 -->
    		 <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    

    2 实体类

    /**
     * @author : look-word
     * @date : 2022-05-12 15:55
     **/
    @Component
    @Data
    public class Student implements Serializable {
        @Value("1")
        private Long id;
        @Value("李四")
        private String name;
        @Value("18")
        private String age;
    }
    
    

    3 配置文件

    application.yaml

    server:
      port: 8110 # 服务端口
    
    spring:
    
      #spring:
      redis:
        host:  # 主机地址
        port: 7003 # 端口
        database: 0
        password: 317311 # 默认为空
        timeout: 3000ms #最大等待时间,超时则抛出异常,否则请求一直等待
        lettuce:
          pool:
            max-active: 20  #最大连接数,负值表示没有限制,默认8
            max-wait: -1    #最大阻塞等待时间,负值表示没限制,默认-1
            max-idle: 8     #最大空闲连接,默认8
            min-idle: 0     #最小空闲连接,默认0
    
    

    测试

    @SpringBootTest
    public class RedisTest {
    
    
        /**
         * 注入我们交给spring管理的对象
         * 
         */
        @Resource
        private Student student;
        /**
         * 注入redis
         */
        @Resource
        private RedisTemplate<String, Student> redisTemplate;
        @Test
        void save(){
            // key 一般使用这个格式 look:student:id 用冒号隔开
            redisTemplate.opsForValue().set("look:student:id",new Student(),1, TimeUnit.MINUTES);
        }
    
    }
    

    结果

    发现RedisTemplate默认使用了JDK的序列化方式存储了key和value

    image-20220512161517878

    解决乱码

    创建RedisConfig配置文件

    @Configuration
    public class RedisConfig {
    
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
    
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
    
            //首先解决key的序列化方式
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            redisTemplate.setKeySerializer(stringRedisSerializer);
    
            //解决value的序列化方式
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
    
            //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
    
            // 解决jackson2无法反序列化LocalDateTime的问题
            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            objectMapper.registerModule(new JavaTimeModule());
    
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
            return redisTemplate;
        }
    }
    

    效果如下

    image-20220512162159194

  • 相关阅读:
    【强化学习】python 实现 q-learning 例二
    【强化学习】python 实现 q-learning 例一
    python棋类游戏编写入门
    推荐几个表格工具
    【Java并发编程实战】----- AQS(四):CLH同步队列
    【Java并发编程实战】----- AQS(三):阻塞、唤醒:LockSupport
    【Java并发编程实战】----- AQS(二):获取锁、释放锁
    【Java并发编程实战】----- AQS(一):简介
    【Java并发编程实战】-----“J.U.C”:CLH队列锁
    【Java并发编程实战】-----“J.U.C”:CAS操作
  • 原文地址:https://www.cnblogs.com/look-word/p/16263056.html
Copyright © 2020-2023  润新知