一台服务器上都快开启200个redis实例了,看着就崩溃了。这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开。
那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实例上呢?就相当于mysql数据库,不同的应用程序数据存储在不同的数据库下。
redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数:
databases 16
可以通过下面的命令来切换到不同的数据库下:
redis> select 2
OK
随后,所有的命令将使用数据库3,知道你明确的切换到另一个数据库下。每个数据库都有属于自己的空间,不必担心之间的key冲突。
➜ ~ redis-cli -p 6379
127.0.0.1:6379> set test 1234
OK
127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> get test
"1234"
127.0.0.1:6379> select 2 //切换到数据库2
OK
127.0.0.1:6379[2]> get test
(nil) //找不到这个值
127.0.0.1:6379[2]> select 0 //切换到数据库2
OK
127.0.0.1:6379> get test
"1234"
不同的数据库下,相同的key取到各自的值。
1 ➜ ~ redis-cli -p 6379 //登录数据库
2 127.0.0.1:6379> select 0 //切换到默认数据库(0)
3 OK
4 127.0.0.1:6379> set test 1234 //在数据库 0 设置test的值为"1234"
5 OK
6 127.0.0.1:6379> select 1 //切换到默认数据库(1)
7 OK
8 127.0.0.1:6379[1]> set test 0000 //在数据库 1 设置test的值为"1234"
9 OK
10 127.0.0.1:6379[1]> select 0 //切换到默认数据库(0)
11 OK
12 127.0.0.1:6379> get test //查看数据库 0 的test数据
13 "1234"
14 127.0.0.1:6379> select 1
15 OK
16 127.0.0.1:6379[1]> get test //查看数据库 1 的test数据
17 "0000"
flushdb命令清除数据,只会清除当前的数据库下的数据,不会影响到其他数据库。
1 ➜ ~ redis-cli -p 6379
2 127.0.0.1:6379> select 1 //切换到数据库 1
3 OK
4 127.0.0.1:6379[1]> keys * //显示当前数据库所有字段
5 1) "test"
6 127.0.0.1:6379[1]> flushdb //清空当前数据库的字段
7 OK
8 127.0.0.1:6379[1]> keys * //显示当前数据库所有字段
9 (empty list or set) //当前数据库无任何字段
10 127.0.0.1:6379[1]> select 0 //切换到数据库 0
11 OK
12 127.0.0.1:6379> keys * //显示当前数据库所有字段,当前数据库 0 没有被清除,说明flushdb命令清除数据,只会清除当前的数据库下的数据,不会影响到其他数据库。
13 1) "test"
flushall命令会清除这个实例的数据。在执行这个命令前要格外小心。
数据库的数量是可以配置的,默认情况下是16个。修改redis.conf(/etc/redis/redis.conf)下的databases指令:
然后重启redis并指向redis.conf,使redis生效:
sudo redis-server /etc/redis/redis.conf
redis没有提供任何方法来关联标识不同的数据库。因此,需要你来跟踪什么数据存储到哪个数据库下。
因此上面的快开启200个实例的场景,可以使用不同的数据库来存储,而不必开启如此那么多的实例。