Redis 命令行客戶端
我們在上一篇文章中編譯出來的可直接執行程序 redis-cli ,redis-cli (Redis Command Line Interface) 是Redis自帶的基於命令行的Redis客戶端。
啓動 Redis 客戶端
1.直接輸入命令redis-cli ,前提啓動redis服務。
# redis-cli
2.使用命令 redis-cli -h 127.0.0.1 -p 6379
# redis-cli -h 127.0.0.1 -p 6379
返回如下,說明成功
127.0.0.1:6379>
PING
Redis提供了PING命令來測試客戶端於Redis的連接是否正常,連接正常會收到回覆 PONG 。
127.0.0.1:6379> ping
PONG
命令返回值
在大多數情況下,執行一條命令後我們往往關心命令的返回值。命令的返回值有五種類型,下面一一說明:
1.狀態回覆(status reply)
如上面的Ping命令返回PONG一樣
例:
127.0.0.1:6379> set name zhangsan
OK
2.錯誤回覆
當出現命令不存在或命令格式有錯誤等情況時,Redis會返回錯誤回覆(error reply)。錯誤回覆以(error)開頭,並在後面跟上錯誤信息。
例
127.0.0.1:6379> error
(error) ERR unknown command 'error'
3.整數返回
Redis 雖然沒有整數類型,但提供了一些用於整數操作的命令。除此之外,一些其他命令也會返回整數。整數回覆(integer reply) 以 (integer)開頭,並在後面跟上整數數據。
例:遞增鍵值的INCR命令會以整數形式返回遞增後的鍵值。
127.0.0.1:6379> incr zhangsan
(integer) 1
4.字符串回覆(bulk reply)
當請求一個字符串類型鍵的鍵值或一個其他類型鍵中的某個元素時會得到一個字符串回覆。字符串回覆以雙引號包裹
例
127.0.0.1:6379> get name
"zhangsan"
5.多行字符串回覆(multi-bulk reply)當請求一個非字符串類型鍵的元素列表時就會收到多行字符串回覆。多行字符串回覆中的每行字符串都以一個序號開頭。
例:
127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> HGETALL runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"
配置
redis-server 的啓動參數port 設置了redis 的端口號,除此之外Redis還支持其他配置選項。redis支持配置文件來設置這些選項。啓用配置文件的方法是在啓動時將配置文件的路徑作爲啓動參數傳遞給redis-server,如:
# redis-server /path/redis.conf
通過啓動參數傳遞同名的配置選項會覆蓋配置文件中相應的參數,如下
# redis-server /path/redis.conf --loglevel warning
其中path爲您的路徑。
Redis運行時通過CONFIG SET 命令在不重新啓動Redis 的情況下動態修改redis的配置。如下:
127.0.0.1:6379> CONFIG SET loglevel warning
OK
當然,不是所有的配置都可以使用CONFIG SET命令修改。同時在運行的時候可以使用CONFIG GET 命令獲得redis 當前的配置情況,如下:
127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "warning"
其中第一行字符串回覆表示的是選項名,第二行即是選項值。
多數據庫
Redis 是一個字典結構的存儲服務器,而實際上一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。這與我們熟知的在一個關係數據庫實例中可以創建多個數據庫類似,所有可以將其中的每個字典都理解成一個獨立的數據庫。
每個數據庫對外都是以一個從0開始的遞增數字命名,Redis 默認支持16個數據庫,可以通過配置參數databases來修改這一數字。客戶端與Redis建立連接後會自動選擇0號數據庫,不過可以隨時使用SELECT命令更換數據庫,如要選擇1號數據庫:
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379> GET name
(nil)
然而這些以數字命名的數據庫又與我們理解的數據庫有所區別。首先Redis 不支持自定義數據庫的名字,每個數據庫都以編號命名,開發者必須自己記錄那些數據庫存儲了那些數據。二,Redis也不支持爲每個數據庫設置不同的訪問密碼,所有一個客戶端要麼可以訪問全部數據庫,要麼連一個數據庫也沒有訪問權限。三、多個數據庫之間並不是完全隔離的,如FLUSHALL 命令可以清空一個Redis實例中所有數據庫中的數據。
綜上所述,這些數據庫更像是一個命名空間,而不適宜存儲不同應用程序的數據。不同的應用應該使用不同的Redis實例存儲數據。由於Redis非常輕量級,不用擔心多個Redis 實例會額外佔用很多內存。
在Redis的學習中,對於字典這一數據結構的理解很重要,當然也比較難,本人也查閱一些資料和文章,無不涉及Redis源碼的分析,本人看的也是一知半解,但對於想要深入瞭解Redis的同學來說,應該有些幫助,在這裏推薦一篇 Redis內部數據結構詳解之字典(dict) 給大家。
對於高段同學,我向大家推薦的 Redis源碼分析系列文章 該系列文章的作者一共寫了十多遍,很詳細,當然內容是有些難度的,雖然我現在看不太懂,但也在這裏對該作者以及所有在開源世界裏行走的同學們表示鼓勵和感謝,共勉之。