本文參考:(Redis使用系列) Springboot 實現(xiàn)Redis 同數(shù)據(jù)源動態(tài)切換db 八
原文作者:小目標青年
問題:平常使用的時候,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非常不友好C锰铩(引用原作者的話??)
測試一下:(版本:2.1.3.RELEASE)
- 如果不是以上的版本的話踪宠,切換數(shù)據(jù)庫是沒有效果的国撵,數(shù)據(jù)都會插入到默認的db0中瞪醋。
@RestController
@RequestMapping("/")
public class RedisStringController {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RedisDBChangeUtil redisDBChangeUtil;
@PostMapping("/changeDb")
public String changeDb(){
//默認的插入
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