Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
308 views
in Technique[技术] by (71.8m points)

redis切换db后找不到数据

问题

redis从db0切换到db2后找不到db2中的数据

问题出现的环境背景及自己尝试过哪些方法

使用redis,在用户登录后将token存入db2,然后在用户查找自己邀请人的时候提示去SSO验证token发现找不到reids的值

在SSO中打印了db2所有的key,能正常显示key:
image.png
在用户模块打印db2所有的key,显示为空:
image.png

查看了下对应的是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为[]


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...