SpringBoot-技术专区-Redis同数据源动态切换db
2023-02-18 16:24:00 时间
问题:
平常使用的时候,redis的db是写死的,如何去动态的修改呢?
![](https://img2020.cnblogs.com/blog/1854114/202007/1854114-20200702140013138-1762167474.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)
- 如果不是以上的版本的话,切换数据库是没有效果的,数据都会插入到默认的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"; } }
相关文章
- [日常] 前端资源测试机上忽略版本号的的nginx配置
- [PHP] PHP PDO与mysql的连接单例防止超时情况处理
- [PHP] 使用Socket提供Http服务
- [PHP] 实现路由映射到指定控制器
- [PHP] 命令行执行整合pathinfo模拟定时任务
- [PHP] 自定义错误处理
- [Php] windows下使用composer出现SHA384 is not supported by your openssl extension
- [PHP] url的pathinfo模式加载不同控制器的实现
- [PHP] 自动加载的实现
- [PHP] 新版本PHP7.4与新版本MySQL8认证问题
- [PHP] PHP请求Socket接口测试
- [PHP] error_reporting(0)可以屏蔽Fatal error错误
- [PHP] 读取大文件并显示
- [PHP] PDO对象与mysql的连接超时
- [PHP] time_wait与长连接短连接
- [PHP] Ubuntu快速安装起PHP7.4
- [PHP] CentOS下搭建下PHP的运行环境
- [日常] 修复了grub引导问题
- [MySQL] docker下安装使用mysql配置主从复制
- [日常] lscpu查看cpu的详细信息