SpringBoot如何切换Redis默认库
一些闲扯的话
我们清楚,Redis 尽管提供了 16 个索引库,但是每个数据库之间是隔离互不共享的,客户端默认连接使用的是 0 号数据库 。
注意:上方情况是基于单机 Redis 的,在集群模式下是没有多数据库概念的,只有一个 db0,不支持多 db。
所以,本文切换数据库是基于单机版 Redis 的。
为什么 Redis 要有这么多的数据库,以及为啥要切换?
个人理解 ,Redis 之所以分这么多个数据库,也是为了区分业务,不同的业务存放在不同的库,但是一个 Redis,一般是给一个项目用,项目内的不同业务,单独用一个库,这样不会相互有数据交叉。比如:用户信息放到 0 库,商品数据放在 1 库等等。
今天整理这篇文章是前段时间面试遇到了,然后整理了出来,只是个思路,未提供动态切换的工具类,好了废话不多说了,进入正题吧。
方式一:配置文件方式
springboot的配置文件中提供了指定使用数据库的属性字段。
1、application.properties
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=1234
2、application.yml
spring
redis:
host: 127.0.0.1
port: 6379
password: 1234
database: 0
方式二:JedisConnectionFactory
JedisConnectionFactory 提供了 setDatabase() 方法来供我们指定使用的数据库。
我们知道 Java 为我们提供了两种 Redis 实现类:RedisTemplate 和 StringRedisTemplate;
本文以 StringRedisTemplate 为例,进行 Redis 的 db 切换。
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();
简单使用:
@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();
}
}
面试:你们是如何切换Redis数据库的?
一种参考回答,JedisConnectionFactory 提供了 setDatabase() 方法,可以通过该方法改变 Redis 使用的库。
SpringBoot如何切换Redis默认库的更多相关文章
- 从源码研究如何不重启Springboot项目实现redis配置动态切换
上一篇Websocket的续篇暂时还没有动手写,这篇算是插播吧.今天讲讲不重启项目动态切换redis服务. 背景 多个项目或微服务场景下,各个项目都需要配置redis数据源.但是,每当运维搞事时(修改 ...
- SpringBoot中整合Redis、Ehcache使用配置切换 并且整合到Shiro中
在SpringBoot中Shiro缓存使用Redis.Ehcache实现的两种方式实例 SpringBoot 中配置redis作为session 缓存器. 让shiro引用 本文是建立在你是使用这sh ...
- 由浅入深学习springboot中使用redis
很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...
- 基于async/non-blocking高性能redis组件库BeetleX.Redis
BeetleX.Redis是基于async/non-blocking模式实现的高性能redis组件库,组件支持redis基础指令集,并封装更简便的List,Hashset和Subscribe操作.除了 ...
- SpringBoot入门 (七) Redis访问操作
本文记录学习在SpringBoot中使用Redis. 一 什么是Redis Redis 是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与 多种 ...
- (一)由浅入深学习springboot中使用redis
很多时候,我们会在springboot中配置redis,但是就那么几个配置就配好了,没办法知道为什么,这里就详细的讲解一下 这里假设已经成功创建了一个springboot项目. redis连接工厂类 ...
- SpringBoot中使用Redis
在SpringBoot中使用Redis,思路如下: 查询时先查Redis缓存,如果缓存中存在信息,就直接从缓存中获取. 如果缓存中没有相关信息,就去数据库中查找,查完顺便将信息存放进缓存里,以便下一次 ...
- springboot(五)-使用Redis
Redis服务器 springboot要使用redis,首先当然要确保redis服务器能够正常跑起来. pom.xml 这里添加redis的依赖,当然也是springboot集成好的. <!-- ...
- 在springboot中使用redis缓存,将缓存序列化为json格式的数据
背景 在springboot中使用redis缓存结合spring缓存注解,当缓存成功后使用gui界面查看redis中的数据 原因 springboot缓存默认的序列化是jdk提供的 Serializa ...
随机推荐
- 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (三)
本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...
- mysql数据库备份工具xtrabackup
1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...
- sprintboot+mybatis+@Mapper中in的使用方法
错误的使用方法: @Select("select goods_sn from ${tableName} where goods_sn in (#{skuStr})") public ...
- Angular6 学习笔记——路由详解
angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...
- PCA:主成分分析
PCA的概念: 主要思想是将n维特征映射到k维上,这k维是全新的正交特征,这k维特征被称为主成分,在原数据的基础上重新构造出来k维.就是从原始的空间顺序的找出一组相互正交的坐标轴,新坐标轴的选择和数据 ...
- 前端图片canvas,file,blob,DataURL等格式转换
将file转化成base64 方法一:利用URL.createObjectURL() <!DOCTYPE html> <html> <head> <title ...
- MySQL各类型字段可定义最大宽度
今天浏览mysql的官网文档,无意中看到如图划线部分一句话,引起了我的兴趣,所以决定做实验官方所言. 条例1.创建数据表时,所有字段定义时"宽度之和"不得超过65535字节: 条例 ...
- 为什么改了JS数组中的一个元素的值,其他数组元素值都跟着变了
原因: 数组是引用类型,数组变量存储在栈,元素数据存储在堆中,将数组赋值不同的对象,所以的赋值对象都指向堆同一个数据,所以改变其中一个数组中的元素,别的数组元素也会改变. 解决方案: 原理就是先把数组 ...
- Jenkins的使用(三)-------Publish over SSH和Publish over FTP
七.构建后操作 1.使用Publish over SSH 1.左边菜单栏 Manage Jenkins --->ManagePlugins--->可选插件,然后搜索 Publish ...
- 私钥、公钥与https
HTTP的安全缺陷 通信内容不加密,导致被窃听 不验证客户端和服务端的身份,导致: 服务器伪装 响应返回到了其他的客户端 海量恶意连接 无法证明报文的完整性,导致:请求和响应内容被篡改,这称为中间人攻 ...