本文參考:(Redis使用系列) Springboot 實(shí)現(xiàn)Redis 同數(shù)據(jù)源動態(tài)切換db 八
原文作者:小目標(biāo)青年
問題:平常使用的時候,redis的db是寫死的,如何去動態(tài)的修改呢?

image.png
解決辦法
- 新建一個RedisDBChangeUtil.java
@Component
public class RedisDBChangeUtil {
@Autowired
private StringRedisTemplate redisTemplate;
public void setDataBase(int num) {
LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
if (connectionFactory != null && num != connectionFactory.getDatabase()) {
connectionFactory.setDatabase(num);
this.redisTemplate.setConnectionFactory(connectionFactory);
connectionFactory.resetConnection();
}
}
}
需要注意的地方:
LettuceConnectionFactory 是 在springboot 2.X版本使用,
但是springboot 版本 spring-boot-starter-data-redis 的版本對這個redis切換db非常不友好?。ㄒ迷髡叩脑??)
測試一下:(版本:2.1.3.RELEASE)
- 如果不是以上的版本的話,切換數(shù)據(jù)庫是沒有效果的,數(shù)據(jù)都會插入到默認(rèn)的db0中。
@RestController
@RequestMapping("/")
public class RedisStringController {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RedisDBChangeUtil redisDBChangeUtil;
@PostMapping("/changeDb")
public String changeDb(){
//默認(rèn)的插入
stringRedisTemplate.opsForValue().set("name","db0");
//插入db1
redisDBChangeUtil.setDataBase(1);
stringRedisTemplate.opsForValue().set("name1","db1");
//插入db2
redisDBChangeUtil.setDataBase(2);
stringRedisTemplate.opsForValue().set("name2","db2");
return "ok";
}
}

image.png
DB0

image.png
DB1

image.png