如何使用 redis
1、引入场景启动器(依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、编写控制器
RedisController
package com.example.boot.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
public class RedisController {
@Autowired
StringRedisTemplate stringRedisTemplate;
@RequestMapping("/redis/index")
public String index() throws InterruptedException {
ValueOperations<String, String> operator = stringRedisTemplate.opsForValue();
operator.set("hello", "hello redis!", 3, TimeUnit.SECONDS);
String value = operator.get("hello");
log.info("hello -> {}", value);
Thread.sleep(3000);
value = operator.get("hello");
log.info("hello -> {}", value);
return "ok";
}
}
3、测试效果
核心技术点
1、StringRedisTemplate
如果 key / value 都是 String 类型,用 StringRedisTemplate 就可以了。
下面是 StringRedisTemplate 的部分源码,可以看到,是
2、RedisTemplate
如果 value 是 Object 类型,希望取出来直接用,那使用 RedisTemplate 。
RedisTemplate 是一个泛型类,StringRedisTemplate 不是。
下面是 RedisTemplate 的部分源码,可以看到,是一个泛型类。
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
<dependency><br /> <groupId>org.springframework.boot</groupId><br /> <artifactId>spring-boot-starter-data-redis</artifactId><br /> </dependency>
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