第九章:(6)Spring Boot 与 缓存 之 整合 Redis

一、使用 Docker 快速安装 Redis

  1、安装 redis,使用 docker 方式

    使用 Docker 中国,镜像中国 加速下载 https://www.bbsmax.com/A/amd083yqdg/

  2、命令安装

获取 Redis 镜像
docker pull registry.docker-cn.com/library/redis

启动 Redis 容器,并设置端口映射
docker run -d -p 6379:6379 --name myredis imgId

查看运行的 Docker 容器
docker ps

  

二、引入 redis 的 starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

三、配置 Redis 

  在 SpringBoot 的配置文件中配置 Redis 信息

#redis 的配置信息
spring.redis.host=192.168.8.119

  

四、RedisAutoConfiguration

  当在项目中导入 redis 的相关依赖时,RedisAutoConfiguration 就会生效。

  RedisAutoConfiguration 会给我们导入两个用于操作 Redis 的类:

  

   其中:

    StringRedisTemplate stringRedisTemplate;  //操作k-v都是字符串的

    RedisTemplate redisTemplate;  //k-v 都是对象的

  

五、使用 RedisTemplate 操作 Redis

  1、操作常用数据结构

    Redis 常见的五大数据类型

String 字符串     redisTemplate.opsForValue(); //操作字符串
list   列表       redisTemplate.opsForList();  //操作list
Set    集合       redisTemplate.opsForSet();   //操作set
Hash   散列       redisTemplate.opsForHash();  //操作hash
ZSet   有序集合   redisTemplate.opsForZSet();  //操作有序set

    代码示例:

    @Test
    public void test01() {
        // redis 中保存数据
        //stringRedisTemplate.opsForValue().append("msg", "hello");

        // 读取数据
        String msg = stringRedisTemplate.opsForValue().get("msg");
        System.out.println("msg = " + msg);

        //操作列表
        stringRedisTemplate.opsForList().leftPush("myList", "1");
        stringRedisTemplate.opsForList().leftPush("myList", "2");
        stringRedisTemplate.opsForList().leftPush("myList", "3");
    }

  2、保存对象

    使用 Redis 保存自定义的 JavaBean 对象,JavaBean 需要实现序列化 Serializable 接口。

    示例:

    @Test
    public void test02() {
        Employee emp = employeeMapper.getEmpById(1);
        //默认如果保存对象,使用 jdk 序列化机制,序列化后的数据保存到 redis 中
        redisTemplate.opsForValue().set("emp-01", emp);
    }

    通过 Redis 的可视化工具看到的效果:

    

    默认使用的是 JDK 序列化机制来保存的。

    

      

    如果想把数据以 JSON 的方式保存,怎么办呢?

    (1)保存数据的时候,自己将对象转为 json 字符串

    (2)redisTemplate 有默认的序列化规则,可以自己定制序列化器

      配置自定义序列化器:

@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<Object, Employee> empRedisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {

        RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
        //设置默认的序列化器
        template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Employee>(Employee.class));
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

      保存数据:

    @Autowired
    RedisTemplate<Object, Employee> empRedisTemplate;  //使用自定义的 redisTemplate
    
    @Test
    public void test02() {
        Employee emp = employeeMapper.getEmpById(1);

        //如果想保存 JSON 字符串
        //1. 将数据以 json 的方式保存,自己将对象转为 json 字符串
        //2. redisTemplate 有默认的序列化规则
        empRedisTemplate.opsForValue().set("emp-02", emp);

    }

     查看效果:

      

原文地址:https://www.cnblogs.com/niujifei/p/15731746.html