93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?|文末赠书 - Go语言中文社区

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


点击上方民工哥技术之路选择“星标

每天为你分享不一样的干货

 读者福利!多达 2048G 各种资源免费赠送

导读

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

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

一、16个数据库的由来

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

以MySQL实例为例

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

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

# 切库
redis> SELECT 1 # 默认0号db,切换为1号db
OK
redis [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。

感谢您的阅读,如果喜欢本文欢迎点在看与转发支持一下。

原文:https://www.toutiao.com/i6752317753866060299/

福利时间

在实际项目中Redis常被应用于做缓存,分布式锁、消息队列等。所以,对于redis的学习是必须的,而且这项技能也是必备的技能之一。所以,今天「民工哥技术之路」联合「机械工业出版社华章公司」为大家带来图书福利,助力大家更好的理解与学习redis技术。

《Redis使用手册》

作者:黄健宏

内容简介:本书系统化介绍Redis命令及其应用场景,内容深入,图文并茂,巨细靡遗,是掌握Redis的案头必备参考书。本书主要分为三大部分,20章。

适读人群 :1.Redis开发运维人员 2.各类数据库开发与管理者 3.大数据分布式系统开发运维者

推荐语:《Redis设计与实现》作者、《Redis实战》译者、《Redis命令参考》译者黄健宏全新力作,学习 Redis 的信心之选。

送书规则:

1、活动仅限读者参与,截止时间2019年12月21日20:00

2、文后留言分享你在学习Redis的经验或你在解决Redis技术难题的心得总结,精选留言点赞前4名各送出一本,

3、短时间内赞数爆增或疑似刷赞行为视为无效,永久拉黑。

4、获得赠书资格后,请于一个工作日内联系小编发送详细收货地址,逾期视为自动放弃,名额转移他人。

关注「 民工哥技术之路」 微信公众号对话框回复关键字:1024 可以获取一份最新整理的 2TB 技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程、Java实战项目、架构师综合教程、架构师实战项目、大数据、Docker容器、ELK Stack、机器学习、BAT面试精讲视频等。

2019年全球重大网络攻击及数据泄露事件回顾

我想过39岁找工作会辛苦,没想到会这么残酷

「民工哥技术之路」文章阅读指南(附民工哥自学方法)

这些牛逼的GitHub 使用技巧你知道几个?

阿里架构师的几条经验,精彩配图

点击【阅读原文】发现更多精彩内容~~

在看的你,请点这里↓

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mingongge/article/details/103626160
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 18:26:07
  • 阅读 ( 1309 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢