redis动态切换库

 

 
 

 

 

问题:

平常使用的时候,redis的db是写死的,如何去动态的修改呢?

 

 

解决办法

  • 新建一个RedisDBChangeUtil.java
1
2
@Component
public class RedisDBChangeUtil {
1
2
3
4
5
6
7
8
9
10
11
12
    @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中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@RestController
@RequestMapping("/")
public class RedisStringController {
    <br>    @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";
    }
}

  

 

 

 

_

posted @ 2022-03-02 09:00  wiukong  阅读(751)  评论(0)    收藏  举报