熟悉关系型数据库的同学都知道关系数据库有数据库、表的概念,正如我们的mysql,需要先创建数据库,然后创建表,那么redis有没有数据库呢?

答案当然是有的。

多数据库配置

留意redis配置文件( /etc/redis/6379.conf )的同学可能看到里边有这么一个配置:

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

databases 是的,就是它!

意思就是说,设置redis的数据库数量,默认使用0号库,可以 使用 SELECT <dbid> 切换数据库,默认有 16 个数据库,即 0~15 号库。

Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。

每个数据库都有属于自己的空间,不必担心之间的key冲突。

flushdb命令清除数据,只会清除当前的数据库下的数据,不会影响到其他数据库。

切换数据库

Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。

# redis-cli                
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> SET name zhangsan   # 默认使用0号库
OK
127.0.0.1:6379> GET name
"zhangsan"
127.0.0.1:6379> SELECT 1            # 切换至1号库
OK
127.0.0.1:6379[1]> GET name         # 注意前面的[1]就表示当前是1号库,每个数据库互相独立,0号库设置的name,在1号库是不存在的。
(nil)
127.0.0.1:6379[1]> SET name lisi
OK
127.0.0.1:6379[1]> GET name
"lisi"

FLUSHDB,清除当前库的数据

127.0.0.1:6379[1]> FLUSHDB
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> keys *
1) "name"

FLUSHDB是清除当前数据库的所有数据库。

FLUSHALL命令会清除这个实例的数据,小心使用哦!

最后

redis的数据库是以数字命名的,和我们理解的关系数据库有所区别:

  • Redis 不支持自定义数据库名称,开发者必须自己记录哪些数据库存储了哪些数据。

  • Redis也不支持每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么不能访问任何数据库。

  • 这种数据库更像一个命名空间,一个空的Redis实例占用的内存只有1M左右,不用担心多个数据库实例占用很多内存。