問題:
平常使用的時候,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";
}
}

