[在Docker中使用Redis] [Redis Cli] [命令的返回值類型] [Redis中的多資料庫] [基礎命令] Redis是REmote DIctionary Server(遠程字典伺服器)的縮寫,它以字典結構存儲數據,並允許其他應用通過TCP協議讀寫字典中的內容。 Redis資料庫中的 ...
* [在Docker中使用Redis]
* [Redis-Cli]
* [命令的返回值類型]
* [Redis中的多資料庫]
* [基礎命令]
Redis是REmote DIctionary Server(遠程字典伺服器)的縮寫,它以字典結構存儲數據,並允許其他應用通過TCP協議讀寫字典中的內容。
Redis資料庫中的所有數據都存儲在記憶體中。由於記憶體的讀寫速度遠快於硬碟,因此Redis在性能上對比其他基於硬碟存儲的資料庫有非常明顯的優勢,在一臺普通的筆記本電腦上,Redis可以在一秒內讀寫超過十萬個鍵值。同時Redis也支持持久化數據到硬碟。
在Docker中使用Redis
在Docker中學習和使用Redis非常方便,免去了直接在機器上安裝:
$ docker run -itd --name redis-test -p 6379:6379 redis:latest
redis的預設監聽的埠為6379,然後就可以進入redis容器了:
$ docker exec -it redis-test /bin/bash
Redis-Cli
redis-cli是Redis的命令行客戶端,可以通過cli向Redis發送一系列命令。
在前面docker exec進入redis容器後,就可以使用redis-cli了,可以將命令作為redis-cli的參數,比如用於測試客戶端與Redis連接是否正常的PING命令,可以直接這樣輸入:
$ redis-cli PING
也可以不附帶參數運行redis-cli,這樣會進入交互模式,然後直接輸入命令:
$ redis-cli
redis 127.0.0.1:6379 > PING
兩種方式下,只要連接正常,都會受到PONG回覆。
Redis中的命令是不區分大小寫的,但這裡為了直觀,用大寫來表示。
命令的返回值類型
redis執行命令後的返回值有下麵幾類:
-
狀態回覆(status reply)
狀態回覆是最簡單的一種回覆,比如向Redis發送SET命令設置某個鍵的值時,Redis會回覆狀態OK表示設置成功。之前執行PING命令收到的PONG也屬於狀態回覆。 -
錯誤回覆(error reply)
命令執行失敗會返回錯誤回覆,這類回覆以(error)開頭。 -
整數回覆(integer reply)
對於類似增加鍵值、獲取鍵數量等命令會返回整數結果,整數回覆與(integer)開頭。 -
字元串回覆(bulk reply)
字元串回覆是最常見的一種回覆類型,當請求一個字元串類型鍵的鍵值或一個其他類型鍵中的某個元素時就會得到一個字元串回覆。字元串回覆以雙引號包裹。但如果鍵不存在時會返回空,用(nil)表示。 -
多行字元串回覆(multi-bulk reply)
這種回覆也比較常見,比如當請求一個非字元串類型鍵的元素列表時就會收到多行字元串回覆,多行字元串回覆中的每行字元串都以一個序號開頭,如獲取所有的鍵:
redis 127.0.0.1:6379 > KEYS *
1) "k1"
2) "k2"
Redis中的多資料庫
一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。這與在一個關係資料庫實例中可以創建多個資料庫類似,所以可以將其中的每個字典都理解成一個獨立的資料庫。
Redis預設支持16個資料庫,用數字命名,分別為0-15。資料庫的數量可以通過配置來修改。客戶端與Redis建立連接後會自動選擇0號資料庫,可以自行切換,切換到1號資料庫的命令為:
SELECT 1
Redis中的資料庫與我們常規理解的關係型資料庫有很大的區別:
- Redis不支持自定義資料庫的名字;
- Redis也不支持為每個資料庫設置不同的訪問密碼,所以一個客戶端要麼可以訪問全部資料庫,要麼無法訪問所有資料庫;
- 多個資料庫之間並不是完全隔離的,比如使用FLUSHALL命令可以清空一個Redis實例中所有資料庫中的數據。
鑒於上述區別,將Redis理解為命名空間可能更為合適。不同的redis資料庫並不適宜存儲不同應用程式的數據,對於多應用的使用,推薦的方式是分別使用不同的Redis實例,由於Redis非常輕量級,一個空Redis實例占用的記憶體只有1MB左右,所以不用擔心多個Redis實例會額外占用很多記憶體。
基礎命令
KEYS 獲取符合規則的鍵名列表
KEYS pattern
pattern支持通配符:
- ?,匹配一個字元
- *,匹配任意個字元
- [],匹配方括弧間的任一字元,可以使用"-"表示範圍,比如a[b-d]可以匹配ab ac ad
- \x,\為轉義符
EXISTS 判斷一個鍵是否存在
EXISTS key
如果存在返回(integer) 1,不存在返回(integer) 0。
DEL 刪除一個或多個鍵
DEL key1
DEL key1 key2 ...
返回整數類型表示被刪除的個數。如果鍵不存在,返回0。
DEL命令不支持通配符,但可以組合KEYS命令來實行:
- 可以結合Linux的管道和xargs命令: redis-cli KEYS "user:*" | xargs redis-cli DEL
- 直接用KEYS的輸出作為DEL的參數:redis-cli DEL 'redis-cli KEYS "user:*"'