网站首页 > java教程 正文
在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。
# 16个数据库的由来
Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。
以MySQL实例为例
Redis默认支持16个数据库,可以通过调整Redis的配置文件redis/redis.conf中的databases来修改这一个值,设置完毕后重启Redis便完成配置。
客户端与Redis建立连接后会默认选择0号数据库,不过可以随时使用SELECT命令更换数据库。
# 切库redis> SELECT 1 # 默认0号db,切换为1号dbOKredis [1] > GET username # 从1号库中获取 username (nil)
在实际项目中则可以通过以Redis配置文件的形式指定数据库,如下图所示
# 正确理解Redis的“数据库”概念
由于Redis不支持自定义数据库的名字,所以每个数据库都以编号命名。开发者则需要自己记录存储的数据与数据库的对应关系。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么全部数据库都没有权限访问。但是,要正确地理解Redis的“数据库”概念这里不得不提到一个命令:
# 清空一个Redis实例中所有数据库中的数据redis 127.0.0.1:6379> FLUSHALL
该命令可以清空实例下的所有数据库数据,这与我们所熟知的关系型数据库所不同。关系型数据库多个库常用于存储不同应用程序的数据 ,且没有方式可以同时清空实例下的所有库数据。所以对于Redis来说这些db更像是一种命名空间,且不适宜存储不同应用程序的数据。比如可以使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不同的应用应该使用不同的Redis实例存储数据。Redis非常轻量级,一个空Redis实例占用的内在只有1M左右,所以不用担心多个Redis实例会额外占用很多内存。
# 集群情况下是否支持一个实例多个db?
要注意以上所说的都是基于单体Redis的情况。而在集群的情况下不支持使用select命令来切换db,因为Redis集群模式下只有一个db0。再扩展一些集群与单机Reids的区别,感兴趣的朋友可以去查阅相关的资料深入理解,这里就不做讨论了。
- key批量操作支持有限:例如mget、mset必须在一个slot
- Key事务和Lua支持有限:操作的key必须在一个节点
- key是数据分区的最小粒度:不支持bigkey分区
- 不支持多个数据库:集群模式下只有一个db0
- 复制只支持一层:不支持树形复制结构
# 总结
Redis实例默认建立了16个db,由于不支持自主进行数据库命名所以以dbX的方式命名。默认数据库数量可以修改配置文件的database值来设定。对于db正确的理解应为“命名空间”,多个应用程序不应使用同一个Redis不同库,而应一个应用程序对应一个Redis实例,不同的数据库可用于存储不同环境的数据。最后要注意,Redis集群下只有db0,不支持多db。
Redis太难?这份阿里P8总结的Redis灵魂拷问70题解析,你又懂了多少?
在大数据时代,频繁地在应用和数据库之间进行读写操作在性能、速度、体验上已经远远不能满足用户、客户、开发人员的要求了,于是一种基于内存操作的数据库便应运而生。Redis 是一种基于内存的数据库,如何轻松理解并熟练操作 Redis 是一个有责任心、进取心程序员应该了解和掌握的技术。Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难。在将面试问的Redis高级题目进行详细的梳理,并结合了解析在这免费分享给大家!
Redis高级面试专题
一、Redis基础概念相关问题
二、Redis 数据结构及指令相关问题
三、Redis 高并发处理策略相关问题
四、Redis 集群相关问题
五、Redis 缓存管理及持久化机制相关问题
六、Redis 应用场景设计相关问题
面试题答案
1. 什么是 Redis?
Redis 全称为:Remote Dictionary Server(远程数据服务),是一个基于内存且支持持久化的高性能 key-value 数据库。具备以下几个基本特征:
1. 多数据类型
2. 持久化机制
3. 主从同步
2. Redis 的特点有哪些?
1. Redis 本质上是一个 key-value 类型的数据库
2. 整个数据库都是在内存中进行操作,可定期刷新到磁盘进行持久化存储
3. 由于是在内存操作,读写能力非常好,每秒可以处理 10 万次读写操作
4. Redis 支持多种数据结构,提供了丰富的数据类型选择
5. Redis 同时支持数据备份,主从配置
6. Redis 的所有操作都是原子性的
3. Memcache 与 Redis 的区别都有哪些?
1. 存储方式不同:Memcache 把数据全部存在内存之中,断电后会丢失。Redis 所有数据加载在内存,但也会持久化到磁盘,保证数据的持久性。
2. 支持数据类型不同:Memcache 对数据类型支持相对简单,只支持 key-value 结构。Redis 有复杂的数据类型。
3. 底层模型不同:底层实现方式以及客户端通信应用协议不一样。 Redis 直接自己构建了 VM 机制。
4. 运行环境不同:Redis 目前官方只支持 Linux 上运行。
4. Redis 相比 Memcached 有哪些优势?
1. Memcached 所有的值均是简单的字符串,Redis 作为其替代者,支持更为丰富的数据类型
2. Redis 的速度比 Memcached 快很多
3. Redis 可以持久化其数据
由于篇幅限制,太长看下去会很乏味,也会影响阅读体验,下面展现将以图片形式展示。获取原文件以及更多资源请关注转发分享后,后台私信回复【学习】获取资料免费领取方式!
- 上一篇: Java实现Redis发布订阅
- 下一篇: 因为不会Redis的scan命令,我被开除了
猜你喜欢
- 2025-05-28 学习笔记:深入浅出redis
- 2025-05-28 Vue3 + Nest 实现权限管理系统 后端篇:如何在 NestJS 中使用 redis
- 2025-05-28 Redis 中地理位置功能 Geospatial 了解一下?
- 2025-05-28 推荐几个好用Redis图形化客户端工具
- 2025-05-28 因为不会Redis的scan命令,我被开除了
- 2025-05-28 Redis中9种基本数据类型及常用操作命令和应用场景
- 2025-05-28 Java实现Redis发布订阅
- 2025-05-28 快!做对这 10 点,让你的 Redis 性能更上一层楼
- 2025-05-28 字节三面远程,Java+Redis+网络+数据库+算法,轻松反杀面试官?
- 2025-05-28 Java Redis配置与优化
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)