问题:
平常使用的时候,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"
;
}
}
|
_