一些闲扯的话

我们清楚,Redis 尽管提供了 16 个索引库,但是每个数据库之间是隔离互不共享的,客户端默认连接使用的是 0 号数据库 。

注意:上方情况是基于单机 Redis 的,在集群模式下是没有多数据库概念的,只有一个 db0,不支持多 db

所以,本文切换数据库是基于单机版 Redis 的。

为什么 Redis 要有这么多的数据库,以及为啥要切换?

个人理解 ,Redis 之所以分这么多个数据库,也是为了区分业务,不同的业务存放在不同的库,但是一个 Redis,一般是给一个项目用,项目内的不同业务,单独用一个库,这样不会相互有数据交叉。比如:用户信息放到 0 库,商品数据放在 1 库等等。

今天整理这篇文章是前段时间面试遇到了,然后整理了出来,只是个思路,未提供动态切换的工具类,好了废话不多说了,进入正题吧。

方式一:配置文件方式

springboot的配置文件中提供了指定使用数据库的属性字段。

1、application.properties
spring.redis.database=0spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.password=1234
2、application.yml
spring  redis:    host: 127.0.0.1    port: 6379    password: 1234    database: 0

方式二:JedisConnectionFactory

JedisConnectionFactory 提供了 setDatabase() 方法来供我们指定使用的数据库。

我们知道 Java 为我们提供了两种 Redis 实现类:RedisTemplateStringRedisTemplate

本文以 StringRedisTemplate 为例,进行 Redisdb 切换。

SpringBoot 1.X之前的版本
JedisConnectionFactory jedisConnectionFactory = (JedisConnectionFactory) stringRedisTemplate.getConnectionFactory(); jedisConnectionFactory.setDatabase(切换到指定的db上);stringRedisTemplate.setConnectionFactory(jedisConnectionFactory);
SpringBoot 2.X之后的版本
LettuceConnectionFactory jedisConnectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();jedisConnectionFactory.setDatabase(切换到指定的db上);redisTemplate.setConnectionFactory(jedisConnectionFactory);jedisConnectionFactory.resetConnection();
简单使用:
 @Autowiredprivate 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();        }}

面试:你们是如何切换Redis数据库的?

一种参考回答,JedisConnectionFactory 提供了 setDatabase() 方法,可以通过该方法改变 Redis 使用的库。

SpringBoot如何切换Redis默认库相关推荐

  1. springboot+redis 切换redis库操作简洁明了

    springboot整合redis后默认使用的是redist的db0号库,在学习redis时对redis库进行了很多数据操作,今天使用redis开始正式写项目的时候我想换一个库,但是不知道操作上网一搜 ...

  2. 为什么 Redis 默认 16 个库?90% 以上程序员不知道!

    在实际项目中Redis常被应用于做缓存,分布式锁.消息队列等.但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示. Redis为什么 ...

  3. SpringBoot:整合Redis(概述,数据类型,持久化,RedisTemplate)

    1,Redis概述 1.1,Redis基本概念 在传统的Java Web项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面.比如一些商品抢购的场景,或者是主页访问量瞬间较 ...

  4. SpringBoot动态切换数据源-快速集成多数据源的启动器

    简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器. 其支持 Jdk 1.7+, SpringBoot 1.4 ...

  5. Docker下redis与springboot三部曲之三:springboot下访问redis哨兵

    在< Docker下redis与springboot三部曲之二:安装redis主从和哨兵>一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的 ...

  6. springBoot+dubbo整合Redis - 脚手架系列(三)

    1.介绍 Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五种不同 ...

  7. Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo

    Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...

  8. springboot中使用redis详解

    一.redis简介 redis是一款高性能key-value(键值对)内存型数据库,是非关系型数据库的一种,它采用单线程的架构方式,避免了多线程存在的锁处理造成的资源耗费,读取速度非常快,非常适合变化 ...

  9. 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>

    封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>(使用lettuce连接池) 代码环境 框架:springb ...

最新文章

  1. cfa三级真题和mock_两年高分过CFA三级的女学霸:复习秘诀刷爆了朋友圈!
  2. c++ 使用throw抛出异常
  3. Boost:由内部绑定的值返回的智能指针的测试程序
  4. FWK005 parse may not be called while parsing
  5. java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码
  6. 正则表达式,验证字符串由:中文、数字、英文、空格组成
  7. 牛客小白月赛13 解题报告
  8. 【比赛】百度之星2017 复赛
  9. java static int count,static int bitCount(long i)
  10. 日本惠普发表14.1型液晶内藏笔记本PC「dv4」系列2种模式
  11. 大众汽车宣布联手AWS开发汽车工业云
  12. java对excel加密_java 加密 excel
  13. 区分iphone和ipad 函数sysctlbyname 来获取设备名称
  14. 程序员如何写工作日志?
  15. ctype函数_Ctype函数简介
  16. 程序员懒人投资大法之定投指数基金
  17. PMP|项目经理如何做好相关方管理?
  18. python自动输入支付密码_python接入支付宝的实例操作
  19. [渝粤教育] 西南科技大学 外国文学 在线考试复习资料
  20. 哈夫曼树及哈夫曼编码(10分)

热门文章

  1. [html] 制作一个不规则形状有哪些方法可以实现?
  2. [css] 你所理解的css高级技巧有哪些?
  3. [css] 为什么伪类的content不能被选中?
  4. 前端学习(2465):ajax发送请求
  5. 前端学习(590):调试javascript的流程
  6. spring mvc学习(45):springMVC的三大组件
  7. 第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!
  8. 第五十二期:甲骨文遭遇“中年危机”:继阿里后,再被亚马逊永久抛弃
  9. 计算机操作系统(4):操作系统的重要功能
  10. 嵌入式开发中关键字_IO 和 volatile的用法