Redis为什么默认16个数据库
导读:在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好Redis服务器后很多朋友应该会发现和有这样的疑问,为什么Redis默认建立了16个数据库,如下图所示。
一、16个数据库的由来
Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。
以MySQL实例为例
Redis默认支持16个数据库,可以通过调整Redis的配置文件redis/redis.conf中的databases来修改这一个值,设置完毕后重启Redis便完成配置。
客户端与Redis建立连接后会默认选择0号数据库,不过可以随时使用SELECT命令更换数据库。
在实际项目中则可以通过以Redis配置文件的形式指定数据库,如下图所示
二、正确理解Redis的“数据库”概念
由于Redis不支持自定义数据库的名字,所以每个数据库都以编号命名。开发者则需要自己记录存储的数据与数据库的对应关系。另外Redis也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么全部数据库都没有权限访问。但是,要正确地理解Redis的“数据库”概念这里不得不提到一个命令:
该命令可以清空实例下的所有数据库数据,这与我们所熟知的关系型数据库所不同。关系型数据库多个库常用于存储不同应用程序的数据 ,且没有方式可以同时清空实例下的所有库数据。所以对于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实现数据库配置(redis配置)
- Redis:高效的内存数据库(redis内存数据库)
- Redis:拥有 16 个数据库的强大数据库 (redis有几个数据库)
- Redis:实现快速存取的内存数据库(redis内存数据库)
- 如何通过Redis避免商品超卖问题(redis超卖)
- 腾讯云助力企业数据库升级Redis 分库开启新纪元(腾讯云redis分库)
- 使用Redis数据库工具取得成功(看redis数据库的工具)
- 索引热,确定Redis的胜利(热的确redis)
- 实现数据库缓存同步的Redis方案(数据库缓存同步redis)
- 从数据库深度持久化到Redis中(数据库持久化到redis)
- 构建高可用性数据库持久层Redis实践(数据库持久层redis)
- 数据库访问提速Redis开启新局面(数据库打开redis)
- Redis快速查询极速获取数据库信息(数据库redis查询数据)
- 深入研究Redis数据库存储格式(数据库redis存储格式)
- 系统做出最佳订单系统 远离Redis(不用redis设计订单)
- 揭开Redis数据库的秘密分析之路(分析redis数据)
- 缓存优势更大,Redis持久化解决方案(再谈缓存和redis)
- 如何查看Redis中的缓存数据(怎么查看缓存redis)
- 开启Redis一步一步指南(如何开启redis数据库)
- 如何快速使用Redis安装部署(如何安装使用redis)
- 用Redis精准采集数据,给你带来更好的体验(从redis采集数据)
- 实现Redis与数据库之间的实时同步(从redis到数据库同步)
- Redis实现流量负载均衡(基于redis流量分配)
- 深入浅出Redis集群缓存配置(redis集群缓存配置)
- 前端开发者是否应学习Redis(前端需要学redis吗)
- 使用Redis队列操作删除数据的技术(redis 队列删除)
- 优化Redis精准控制数据量(redis配置数据量)
- 从Redis中解锁更多的资源集群分享(redis资源分配)
- 基于Redis集群和JWT技术实现安全高效的用户认证(redis集群jwt)
- 利用Redis轻松实现自增长值(redis自增长值)
- Redis缓存出现失灵,如何解决(redis缓存失灵怎么办)