如何使用 redis

1、引入场景启动器(依赖)

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-redis</artifactId>
  4. </dependency>

image.png

2、编写控制器

RedisController

  1. package com.example.boot.controller;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.data.redis.core.StringRedisTemplate;
  5. import org.springframework.data.redis.core.ValueOperations;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.concurrent.TimeUnit;
  9. @RestController
  10. @Slf4j
  11. public class RedisController {
  12. @Autowired
  13. StringRedisTemplate stringRedisTemplate;
  14. @RequestMapping("/redis/index")
  15. public String index() throws InterruptedException {
  16. ValueOperations<String, String> operator = stringRedisTemplate.opsForValue();
  17. operator.set("hello", "hello redis!", 3, TimeUnit.SECONDS);
  18. String value = operator.get("hello");
  19. log.info("hello -> {}", value);
  20. Thread.sleep(3000);
  21. value = operator.get("hello");
  22. log.info("hello -> {}", value);
  23. return "ok";
  24. }
  25. }

3、测试效果

image.png
image.png

核心技术点

1、StringRedisTemplate

如果 key / value 都是 String 类型,用 StringRedisTemplate 就可以了。
image.png

下面是 StringRedisTemplate 的部分源码,可以看到,是
image.png

2、RedisTemplate

如果 value 是 Object 类型,希望取出来直接用,那使用 RedisTemplate 。

RedisTemplate 是一个泛型类,StringRedisTemplate 不是。
image.png

下面是 RedisTemplate 的部分源码,可以看到,是一个泛型类。
image.png

3、StringRedisTemplate 和 RedisTemplate

3.1、两者的数据各自存取,不互通

RedisTemplate不能取StringRedisTemplate存放的数据。
StringRedisTemplate不能取RedisTemplate的数据。

3.2、序列化策略不同

RedisTemplate默认采用的的是JDK自带的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略。

知识点

1、Lettuce 与 jedis

1.1、Lettuce

1.2、jedis

1.3、如何从 Lettuce 切换到 jedis

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



redis.clients
jedis

spring:
redis:
host: r-bp1nc7reqesxisgxpipd.redis.rds.aliyuncs.com
port: 6379
password: lfy:Lfy123456
client-type: jedis
jedis:
pool:
max-active: 10

2、自动配置原理

spring-boot-starter-data-redis 默认的配置规则源码分析。

自动配置:

  • RedisAutoConfiguration 自动配置类。RedisProperties 属性类 —> spring.redis.xxx是对redis的配置
  • 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration
  • 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
  • 自动注入了StringRedisTemplate;k:v都是String
  • key:value
  • 底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis