93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

2020-01-15 18:30:23 5263 2

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

取消 提交回答
全部回答(2)
  • 烛昭
    2020-03-12 09:57:09

    阿里云云上对逻辑db的数量进行了扩展,最大可达到256个db

    0 0
  • 茶什i
    2020-01-16 11:16:30

    来自:今日头条,作者:聚IT
    链接:https://www.toutiao.com/i6752317753866060299/

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

    image.png

    椐调查发现:93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

    一、16个数据库的由来
    Redis是一个字典结构的存储服务器,一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与在一个关系数据库实例中可以创建多个数据库类似(如下图所示),所以可以将其中的每个字典都理解成一个独立的数据库。

    image.png

    以MySQL实例为例

    Redis默认支持16个数据库,可以通过调整Redis的配置文件redis/redis.conf中的databases来修改这一个值,设置完毕后重启Redis便完成配置。

    image.png

    客户端与Redis建立连接后会默认选择0号数据库,不过可以随时使用SELECT命令更换数据库。

    # 切库
    redis> SELECT 1 # 默认0号db,切换为1号db
    OK
    redis [1] > GET username # 从1号库中获取 username 
    (nil)
    

    在实际项目中则可以通过以Redis配置文件的形式指定数据库,如下图所示
    image.png

    二、正确理解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?
    image.png 要注意以上所说的都是基于单体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。

    0 1
添加回答
相关问答

2

回答

redis数据库数据备份并下载到本地

2019-02-26 16:53:22 964浏览量 回答数 2

1

回答

请问我想store.mode=redis这种模式试试,我redis是3主3从的集群,应该如何配置呢?

2022-11-07 16:54:47 24浏览量 回答数 1

1

回答

Redis集群版 – 双副本特点是什么?

2021-12-24 08:55:16 130浏览量 回答数 1

1

回答

Redis集群版 – 不支持哪些命令?

2021-12-24 08:55:38 176浏览量 回答数 1

1

回答

阿里云Redis与开源版Redis集群能力对比是怎样的?

2021-12-24 09:06:01 144浏览量 回答数 1

1

回答

开源Redis集群如何实现?

2021-12-24 09:04:00 109浏览量 回答数 1

1

回答

开源Redis集群实现细节是什么?

2021-12-24 09:04:37 111浏览量 回答数 1

1

回答

向redis集群里读写数据报错

2016-02-05 11:47:56 2319浏览量 回答数 1

1

回答

CentOS redis集群部署开启防火墙无法访问集群 ,什么原因?

2016-01-31 19:08:06 4067浏览量 回答数 1

1

回答

redis 集群 cluster node 失败,求帮助

2016-01-31 17:34:21 1867浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Redis的开发规范和常见问题
立即下载
Redis多线程性能优化
立即下载
Redis&MongoDB的同步、迁移以及混合云场景构建
立即下载


http://www.vxiaotou.com