问题
redis从db0切换到db2后找不到db2中的数据
问题出现的环境背景及自己尝试过哪些方法
使用redis,在用户登录后将token存入db2,然后在用户查找自己邀请人的时候提示去SSO验证token发现找不到reids的值
在SSO中打印了db2所有的key,能正常显示key:
在用户模块打印db2所有的key,显示为空:
查看了下对应的是db0的数据
相关代码
sso将token存入redis代码:
String token = JwtUtils.getJwtToken(userId);
String uuid = UUIDUtils.getUuid();
redisUtil.setDay(uuid, token, 7L);
redisUtil.getDI();
return uuid;
redisUtil代码:
/**
* 切换数据库
* @param num
*/
public void setDataBase(int num) {
LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
System.out.println("当前Reids数据库下标为:=================" + connectionFactory.getDatabase());
if (connectionFactory != null && num != connectionFactory.getDatabase()) {
connectionFactory.setDatabase(num);
this.redisTemplate.setConnectionFactory(connectionFactory);
connectionFactory.resetConnection();
this.redisTemplate.afterPropertiesSet();
}
System.out.println("变更后Reids数据库下标为:=================" + connectionFactory.getDatabase());
}
public void getDI() {
LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
System.out.println("当前Reids数据库下标为:================="+connectionFactory.getDatabase());
}
/**
* 普通缓存放入并设置时间
* @param key 键
* @param value 值
* @param time 时间(天) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean setDay(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.DAYS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
用户模块获取token代码:
redisUtil.setDataBase(2);
String access_token = request.getHeader("access_token");
System.out.println(redisUtil.get(access_token));
String ac = String.valueOf(redisUtil.get(access_token));
String accessToken =ac;
redisUtil.setDataBase(0);
用户模块获取缓存代码:
/**
* 普通缓存获取
* @param key 键
* @return 值
*/
public Object get(String key) {
System.out.println(redisTemplate.keys("*"));
getDI();
return key == null ? null : redisTemplate.opsForValue().get(key);
}
sso的redis配置:
redis:
database: 2
host: localhost
port: 6379
password:
lettuce:
pool:
max-wait: -1
max-active: 20
max-idle: 10
min-idle: 0
timeout: 0
用户模块的redis配置:
redis:
database: 0
host: localhost
port: 6379
password:
lettuce:
pool:
max-wait: -1
max-active: 20
max-idle: 10
min-idle: 0
timeout: 0
你期待的结果是什么?实际看到的错误信息又是什么?
期待结果:用户模块能够获取到SSO模块存入db2的值
实际错误:打印出来的db2中key为[]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…