• Spring Boot (23) Lettuce Redis


    Spring Boot除了支持常见的ORM框架外,更是对常用的中间件提供了非常好的封装,随着SpringBoot2.x的到来,支持的组件也越来越丰富,也越来越成熟,其中对Redis的支持不仅仅是它丰富的API,更是替换掉了底层Jedis的依赖,取而代之的是Lettuce。

    Redis

      Redis是一个开源的使用ANSI c语言编写、支持网络、可基于内存也可持久化的日执行、key-value数据库,并提供多种语言的API,相比memcached它支持更多类型存储(字符串、哈希、集合、有续集合、列表),同时Redis是线程安全的。

    Lettuce

      Lettuce和Jedis都是连接Redis Server的客户端程序,Jedis在实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个Jedis势力增加物理连接。Lettuce基于Netty的势力连接,可以再多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接势力不够的情况也可以按需增加连接实例。

    导入依赖

      在pom.xml中引入spring-boot-starter-data-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>

    属性配置

      在application.yml中配置如下内容

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/david2018_db?characterEncoding=utf8
        username: root
        password: 1234
      redis:
        host: 10.211.55.5 #redis服务器地址
        timeout: 10000 #超时时间
        database: 0 #0-15 16个库 默认0
        lettuce:
          pool:
            max-active: 8 #最大连接数
            max-wait: -1 #默认-1 最大连接阻塞等待时间
            max-idle: 8 #最大空闲连接 默认8
            min-idle: 0 #最小空闲连接

    实体类

    package com.spring.boot.bean;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private Integer userId;
        private String userName;
    
        public Integer getUserId() {
            return userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    }

    自定义Template

      默认情况下的模板只能支持RedisTemplate<String,String>,只能存字符串。这时需要自定义模板,当自定义模板后又想存储String字符串时,可以使用StringRedisTemplate的方式,他们俩并不冲突。

    package com.spring.boot.utils;
    
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import java.io.Serializable;
    
    @Configuration
    @AutoConfigureAfter(RedisAutoConfiguration.class)
    public class RedisCacheAutoConfiguration {
    
        @Bean
        public RedisTemplate<String,Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory){
            RedisTemplate<String,Serializable> template = new RedisTemplate<String,Serializable>();
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    }

    测试redis

        @GetMapping("/redis")
        public String redis(){
            //字符串
            stringRedisTemplate.opsForValue().set("rediskey","redisvalue");
            String rediskey = stringRedisTemplate.opsForValue().get("rediskey");
            System.out.println(rediskey);
            //对象
            User user = new User(1,"username");
            redisCacheTemplate.opsForValue().set("user",user);
    
            User getUser = (User) redisCacheTemplate.opsForValue().get("user");
            System.out.println(getUser.getUserName());
            return "redis";
        }

    下列就是redis其他类型的对应操作方式:

      opsForValue:对应String字符串

      opsForZSet:对应ZSet有序集合

      opsForHash:对应Hash哈希

      opsForList:对应List列表

      opsForSet:对应Set集合

      opsForGeo:对应GEO地理位置

  • 相关阅读:
    显而易见的python
    GitHub 使用教程图文详解
    linux下搭建hexo环境
    linux 删除软链接
    Django2.1入门教程
    windows下安装PyQt4
    python3 Flask安装
    学习之源
    白话C++系列教程
    面试笔试试题精选
  • 原文地址:https://www.cnblogs.com/baidawei/p/9156410.html
Copyright © 2020-2023  润新知