Redis16个数据库都是什么?

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

在实际项目中Redis常被应用于作缓存,分布式锁、消息队列等。可是在搭建配置好Redis服务器后不少朋友应该会发现和有这样的疑问,为何Redis默认创建了16个数据库,以下图所示。html

Redis16个数据库都是什么?Redis16个数据库都是什么?

1、16个数据库的由来mysql

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

Redis16个数据库都是什么?Redis16个数据库都是什么?

以MySQL实例为例redis

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

Redis16个数据库都是什么?Redis16个数据库都是什么?

客户端与Redis创建链接后会默认选择0号数据库,不过能够随时使用SELECT命令更换数据库。数据库

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

在实际项目中则能够经过以Redis配置文件的形式指定数据库,以下图所示缓存

Redis16个数据库都是什么?Redis16个数据库都是什么?

2、正确理解Redis的“数据库”概念服务器

Redis16个数据库都是什么?Redis16个数据库都是什么?

因为Redis不支持自定义数据库的名字,因此每一个数据库都以编号命名。开发者则须要本身记录存储的数据与数据库的对应关系。另外Redis也不支持为每一个数据库设置不一样的访问密码,因此一个客户端要么能够访问所有数据库,要么所有数据库都没有权限访问。可是,要正确地理解Redis的“数据库”概念这里不得不提到一个命令分布式

# 清空一个Redis实例中全部数据库中的数据 
redis 127.0.0.1:6379> FLUSHALL

该命令能够清空实例下的全部数据库数据,这与咱们所熟知的关系型数据库所不一样。关系型数据库多个库经常使用于存储不一样应用程序的数据 ,且没有方式能够同时清空实例下的全部库数据。因此对于Redis来讲这些db更像是一种命名空间,且不适宜存储不一样应用程序的数据。好比可使用0号数据库存储某个应用生产环境中的数据,使用1号数据库存储测试环境中的数据,但不适宜使用0号数据库存储A应用的数据而使用1号数据库B应用的数据,不一样的应用应该使用不一样的Redis实例存储数据。Redis很是轻量级,一个空Redis实例占用的内在只有1M左右,因此不用担忧多个Redis实例会额外占用不少内存。测试

3、集群状况下是否支持一个实例多个db?

Redis16个数据库都是什么?Redis16个数据库都是什么?

要注意以上所说的都是基于单体Redis的状况。而在集群的状况下不支持使用select命令来切换db,由于Redis集群模式下只有一个db0。再扩展一些集群与单机Reids的区别,感兴趣的朋友能够去查阅相关的资料深刻理解,这里就不作讨论了。

  • key批量操做支持有限:例如mget、mset必须在一个slot
  • Key事务和Lua支持有限:操做的key必须在一个节点
  • key是数据分区的最小粒度:不支持bigkey分区
  • 不支持多个数据库:集群模式下只有一个db0
  • 复制只支持一层:不支持树形复制结构

Redis16个数据库都是什么?Redis16个数据库都是什么?

4、总结

Redis实例默认创建了16个db,因为不支持自主进行数据库命名因此以dbX的方式命名。默认数据库数量能够修改配置文件的database值来设定。对于db正确的理解应为“命名空间”,多个应用程序不该使用同一个Redis不一样库,而应一个应用程序对应一个Redis实例,不一样的数据库可用于存储不一样环境的数据。最后要注意,Redis集群下只有db0,不支持多db。

本文地址:https://www.linuxprobe.com/redis-16-mysql.html

相关文章
相关标签/搜索