Springboot+Redis 同数据源动态切换db
2020-06-23 本文已影响0人
HeloWxl
本文参考:(Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
原文作者:小目标青年
问题:平常使用的时候,redis的db是写死的,如何去动态的修改呢?
解决办法
- 新建一个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)
- 如果不是以上的版本的话,切换数据库是没有效果的,数据都会插入到默认的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