SpringBoot如何切换Redis默认库
一些闲扯的话
我们清楚,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 实现类: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();
简单使用:
@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默认库相关推荐
- springboot+redis 切换redis库操作简洁明了
springboot整合redis后默认使用的是redist的db0号库,在学习redis时对redis库进行了很多数据操作,今天使用redis开始正式写项目的时候我想换一个库,但是不知道操作上网一搜 ...
- 为什么 Redis 默认 16 个库?90% 以上程序员不知道!
在实际项目中Redis常被应用于做缓存,分布式锁.消息队列等.但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示. Redis为什么 ...
- SpringBoot:整合Redis(概述,数据类型,持久化,RedisTemplate)
1,Redis概述 1.1,Redis基本概念 在传统的Java Web项目中,使用数据库进行存储数据,但是有一些致命的弊端,这些弊端主要来自于性能方面.比如一些商品抢购的场景,或者是主页访问量瞬间较 ...
- SpringBoot动态切换数据源-快速集成多数据源的启动器
简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器. 其支持 Jdk 1.7+, SpringBoot 1.4 ...
- Docker下redis与springboot三部曲之三:springboot下访问redis哨兵
在< Docker下redis与springboot三部曲之二:安装redis主从和哨兵>一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的 ...
- springBoot+dubbo整合Redis - 脚手架系列(三)
1.介绍 Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五种不同 ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- springboot中使用redis详解
一.redis简介 redis是一款高性能key-value(键值对)内存型数据库,是非关系型数据库的一种,它采用单线程的架构方式,避免了多线程存在的锁处理造成的资源耗费,读取速度非常快,非常适合变化 ...
- 封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>
封装自定义的redis切库工具类ByteArrayRedisTemplate,读取byte数组反序列化成List<Object>(使用lettuce连接池) 代码环境 框架:springb ...
最新文章
- cfa三级真题和mock_两年高分过CFA三级的女学霸:复习秘诀刷爆了朋友圈!
- c++ 使用throw抛出异常
- Boost:由内部绑定的值返回的智能指针的测试程序
- FWK005 parse may not be called while parsing
- java爬虫代码示例_那些让你代码思维和能力有较大的提升Java源码
- 正则表达式,验证字符串由:中文、数字、英文、空格组成
- 牛客小白月赛13 解题报告
- 【比赛】百度之星2017 复赛
- java static int count,static int bitCount(long i)
- 日本惠普发表14.1型液晶内藏笔记本PC「dv4」系列2种模式
- 大众汽车宣布联手AWS开发汽车工业云
- java对excel加密_java 加密 excel
- 区分iphone和ipad 函数sysctlbyname 来获取设备名称
- 程序员如何写工作日志?
- ctype函数_Ctype函数简介
- 程序员懒人投资大法之定投指数基金
- PMP|项目经理如何做好相关方管理?
- python自动输入支付密码_python接入支付宝的实例操作
- [渝粤教育] 西南科技大学 外国文学 在线考试复习资料
- 哈夫曼树及哈夫曼编码(10分)
热门文章
- [html] 制作一个不规则形状有哪些方法可以实现?
- [css] 你所理解的css高级技巧有哪些?
- [css] 为什么伪类的content不能被选中?
- 前端学习(2465):ajax发送请求
- 前端学习(590):调试javascript的流程
- spring mvc学习(45):springMVC的三大组件
- 第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!
- 第五十二期:甲骨文遭遇“中年危机”:继阿里后,再被亚马逊永久抛弃
- 计算机操作系统(4):操作系统的重要功能
- 嵌入式开发中关键字_IO 和 volatile的用法