(Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八

默认redis使用的是db 0,而我们自己在配置连接的时候可以设置默认使用db ,如:


spring:
  redis:
    lettuce:
      pool:
        #连接池最大连接数 使用负值代表无限制 默认为8
        max-active: 10
        #最大空闲连接 默认8
        max-idle: 10
        #最小空闲连接 默认0
        min-idle: 1
    host: 127.0.0.1
    password: 12345
    port: 6379
    database: 0
    timeout: 2000ms


那么怎么去实现动态 去切换自己想使用的db呢?

 

先回顾性我们在配置redis的时候,连接redis使用的代码段(举例StirngRedisTemplate):


image.png


那么切换也是同理,就是传入factory的时候,设置好选择的db:


新建RedisDBChangeUtil.java:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
/**
 * @Author : JCccc
 * @CreateTime : 2020/4/21
 * @Description :
 **/
@Component
public class RedisDBChangeUtil {
    @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非常不友好!


亲测 ,使用 springboot 2.1.3.RELEASE   springboot 2.1.4.RELEASE springboot 2.1.5.RELEASE ,2.2.4.RELEASE可以成功切换。


但是从springboot 2.1.6.RELEASE 开始 到springboot 2.2.0.RELEASE 都是有问题的。


ok,最后简单的切换使用演示:


    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    RedisDBChangeUtil redisDBChangeUtil;
    @ResponseBody
    @RequestMapping("/addRedis")
    public String addRedis() {
        redisDBChangeUtil.setDataBase(2);
        stringRedisTemplate.opsForValue().set("add to 2", "2020-06-02");
        redisDBChangeUtil.setDataBase(3);
        stringRedisTemplate.opsForValue().set("add to 3", "2020-06-02");
        redisDBChangeUtil.setDataBase(1);
        stringRedisTemplate.opsForValue().set("add to 1", "2020-06-02");
        return "添加成功";
    }


调用接口,可以看到redis里面的值已经分别插入了:


image.png


ok,该篇教程就暂且到此结束。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
23天前
|
缓存 NoSQL Java
Redis 缓存与数据库数据不一致问题
Redis 缓存与数据库数据不一致问题
52 3
|
1天前
|
存储 NoSQL Redis
Redis存储原理与数据模型
Redis存储原理与数据模型
|
1月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
27天前
|
消息中间件 缓存 数据库
Redis问题之如何解决缓存更新失败导致的数据不一致问题
Redis问题之如何解决缓存更新失败导致的数据不一致问题
|
26天前
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
26天前
|
缓存 NoSQL Redis
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
Redis性能优化问题之当Redis内存达到maxmemory后,淘汰数据的逻辑是怎样的
|
5天前
|
存储 NoSQL Ubuntu
在Ubuntu 14.04上如何备份和恢复Redis数据
在Ubuntu 14.04上如何备份和恢复Redis数据
11 0
|
5天前
|
缓存 NoSQL Shell
"揭秘!Redis数据导出大揭秘:从繁琐到一键搞定,让你的数据飞跃而出,感受前所未有的数据导出快感!"
【8月更文挑战第15天】Redis是高性能键值存储系统,适用于缓存等多种场景。随数据增长,需导出数据以分析、备份或迁移。本文详述三种导出方法:1) Redis命令与重定向,如SCAN与GET命令结合;2) 利用RDB快照或AOF持久化机制;3) 第三方工具如redis-dump。每种方法各有优势,可根据数据量及需求选择,同时需考虑操作对性能的影响及数据安全。
16 0
|
13天前
|
缓存 NoSQL Redis
redis数据持久化之RDB和AOF
redis数据持久化之RDB和AOF
|
1月前
|
存储 NoSQL Redis