springcloud框架下中使用redis

这篇文章会记录自己在使用springcloudredis的组合使用时一些注意点

1、RedisTemplate和StringRedisTemplate

  RedisTemplateStringRedisTemplate在同样配置下所存储的位置一样。但是,一样的key却无法相互获取。他们两者之间的区别主要在于他们使用的序列化类。RedisTemplate使用的是JdkSerializationRedisSerializerStringRedisTemplate使用的是StringRedisSerializerRedisTemplate使用的序列类在操作数据的时候,会将数据先序列化成字节数组然后在存入Redis数据库。StringRedisTemplate则是以可读的形式存入redis所以,对你来说是同样的存入一个key,但是,实际上存入的key值并不相同。

2Redis切换DB的问题。

   当我们使用同样的配置文件统一配置Redis时。可能会遇到需要切换数据库的问题。配置如下

spring:
  redis:
    database: 0
    host: your-redis-name
    port: 6379
    password:
    pool:
      max-active: 8
      max-wait: -1
      max-idle: 8

这个时候又不想单独,再给redis做另一套匹配。这时可以使用如下方式来进行切换

    private final int REDIS_DB = 5;//需要特殊指定的DB
    @Value("${spring.redis.database}")
    private int redisDbDefault;//默认的配置
    private RedisTemplate redisTemplate;
    /**
     * 将数据存储到指定DB
     *
     * @param key   要存到redis的key
     * @param value 要存到redis的值
     */
    private void setInDB5(String key, JSONArray value) {
        synchronized (redisTemplate) {
            try {
                changeRedisDB(REDIS_DB);
                redisTemplate.opsForValue().set(key, value);
            } catch (Exception e) {
            } finally {
                changeRedisDB(redisDbDefault);
            }
        }
    }

    /**
     * 将数据存储到指定DB
     *
     * @param key 要取值redis的key
     */
    private JSONArray getInDB5(String key) {
        JSONArray value = new JSONArray();
        synchronized (redisTemplate) {
            try {
                changeRedisDB(REDIS_DB);
                value = JSONArray.fromObject(redisTemplate.opsForValue().get(key));
            } catch (Exception e) {
            } finally {
                changeRedisDB(redisDbDefault);
            }
        }
        return value;
    }

    /**
     * 将redis切换到DB5,使用后一定要切回来(此方法不公用)
     *
     * @return
     */
    private RedisTemplate changeRedisDB(int dbNum) {
        JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) redisTemplate.getConnectionFactory();
        jedisConnectionFactory.setDatabase(dbNum);
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        return redisTemplate;
    }




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值