熟悉关系型数据库的同学都知道关系数据库有数据库、表的概念,正如我们的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'-1databases 16databases 是的,就是它!
意思就是说,设置redis的数据库数量,默认使用0号库,可以 使用 SELECT <dbid> 切换数据库,默认有 16 个数据库,即 0~15 号库。
Redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。
每个数据库都有属于自己的空间,不必担心之间的key冲突。
flushdb命令清除数据,只会清除当前的数据库下的数据,不会影响到其他数据库。
Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
# redis-cli 127.0.0.1:6379> AUTH 123456OK127.0.0.1:6379> SET name zhangsan # 默认使用0号库OK127.0.0.1:6379> GET name"zhangsan"127.0.0.1:6379> SELECT 1 # 切换至1号库OK127.0.0.1:6379[1]> GET name # 注意前面的[1]就表示当前是1号库,每个数据库互相独立,0号库设置的name,在1号库是不存在的。(nil)127.0.0.1:6379[1]> SET name lisiOK127.0.0.1:6379[1]> GET name"lisi"127.0.0.1:6379[1]> FLUSHDBOK127.0.0.1:6379[1]> keys *(empty list or set)127.0.0.1:6379[1]> SELECT 0OK127.0.0.1:6379> keys *1) "name"FLUSHDB是清除当前数据库的所有数据库。
FLUSHALL命令会清除这个实例的数据,小心使用哦!
redis的数据库是以数字命名的,和我们理解的关系数据库有所区别:
Redis 不支持自定义数据库名称,开发者必须自己记录哪些数据库存储了哪些数据。
Redis也不支持每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么不能访问任何数据库。
这种数据库更像一个命名空间,一个空的Redis实例占用的内存只有1M左右,不用担心多个数据库实例占用很多内存。