一台服務器上都快開啟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個實例的場景,可以使用不同的數據庫來存儲,而不必開啟如此那么多的實例。