5分鐘快速瞭解 Redis

小皮草發表於2019-01-03

本文內容主要通過閱讀《Redis 入門指南》總結,感覺不錯,適合新手閱讀。

認識

Redis 是一個開源的、高效能的、基於鍵值對的快取與儲存系統,通過提供多種鍵值資料型別來適應不同場景下的快取與儲存需求。

Redis,全稱 Remote Dictionary Server,以字典結構儲存資料,並允許其他應用通過 TCP 協議讀寫字典中的內容。

Redis 字典中的鍵值支援的資料型別如下:

  • 字串
  • 雜湊
  • 列表
  • 集合
  • 有序集合

優勢

  • 儲存結構

    Redis 字典結構的儲存方式和對多種鍵值資料型別的支援使開發者可以將程式中的資料直接對映到 Redis 中,資料在 Redis 中的儲存形式和在程式中的儲存方式非常相近。

  • 資料操作

    對不同的資料型別提供了非常方便的操作方式。(如進行交集、並集等集合運算操作)

  • 儲存方式

    Redis 資料庫中的所有資料都儲存在記憶體中,讀寫速度更快。

    Redis 提供了對持久化的支援,可以將記憶體中的資料非同步寫入到硬碟中,同時不影響繼續提供服務。

開始

安裝(Mac OS)

$ brew install redis
複製程式碼

啟動

# 預設埠 6379
$ redis-server

# 自定義埠
$ redis-server --port 6380
複製程式碼

注:另可通過初始化指令碼啟動 Redis,可以隨系統自動執行,適合在生產環境使用這種方式。

####開啟命令列客戶端

$ redis-cli
複製程式碼

停止

由於 Redis 可能正在將記憶體的資料同步到硬碟,強行停止可能導致資料丟失。正確停止方式

$ redis-cli SHUTDOWN
複製程式碼

使用命令列客戶端

使用 redis-cli 有兩種方式:

  • 將命令作為 redis-cli引數執行
  • 不帶引數執行 redis-cli ,進入互動模式

引數模式

  • 自定義地址和埠進行連線

    $ redis-cli -h 127.0.0.1 -p 6379
    複製程式碼
  • 測試客戶端與 Redis 的連線是否正常,正常回復 PONG

    $ redis-cli PING
    PONG
    複製程式碼
  • 停止 Redis

    $ redis-cli SHUTDOWN
    複製程式碼

互動模式

直接無參輸入 redis-cli 即可進入互動模式。

$ redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> ECHO hi
"hi"
複製程式碼

執行命令的返回值

命令的返回值有 5 種型別:

  1. 狀態回覆(status reply)

    最簡單的一種回覆。比如回覆 OK,回覆 PONG ...

  2. 錯誤回覆(error reply)

    當出現命令不存在或命令格式有錯誤等情況時,會返回錯誤回覆。以 (error) 開頭。

    (error) ...
    複製程式碼
  3. 整數回覆(integer reply)

    Redis 沒有整數型別,但是提供了一些用於整數操作的命令,會返回整數。以 (integer) 開頭。

    (integer) 1
    複製程式碼
  4. 字串回覆(bulk reply)

    最常見。當請求一個字串型別鍵的鍵值或一個其他型別鍵中的某個元素時就會得到一個字串回覆。

    127.0.0.1:6379> GET foo
    "1"
    複製程式碼

    當請求的鍵值不存在會得到一個空結果,顯示 (nil)

    127.0.0.1:6379> GET bar
    (nil)
    複製程式碼
  5. 多行字串回覆(multi-bulk reply)

    當請求一個非字串型別鍵的元素列表時就會收到多行字串回覆。多行字串回覆中的每行字串都以一個序號開頭,如:

    127.0.0.1:6379> KEYS *
    1)"bar"
    2)"foo"
    複製程式碼

配置 Redis

通過命令列傳參可以簡單設定一些配置,還可以通過配置檔案來設定配置。

啟用配置檔案的方法:(將配置檔案路徑作為引數)

$ redis-server /path/to/redis.conf
複製程式碼

多資料庫(多字典)

一個 Redis 例項提供多個用來儲存資料的字典,客戶端可以指定將資料儲存在哪個字典中。

相當於其他資料庫建立過個資料庫的概念。可以將其中的每個字典理解成一個獨立的資料庫。

是否可以命名?

不可以。

  • 命令規則:以一個從 0 開始的遞增數字命名。

  • 預設數量:16 個。

  • 切換資料庫:使用 SELECT 命令

    127.0.0.1:6379> SELECT 1
    OK
    127.0.0.1:6379[1]>
    複製程式碼

注意。多個資料庫之間並不是完全隔離,比如 FLUSHALL 命令可以清空一個 Redis 例項中所有資料庫的資料。

總結。這些資料庫更像是一種名稱空間,不適宜儲存不同應用程式的資料。比如可以使用 0 號資料庫儲存某個應用生產環境中的資料,使用 1 號資料庫儲存測試環境中的資料,但不適宜使用 0 號資料庫儲存 A 應用的資料而使用 1 號資料庫儲存 B 應用的資料,不同的應用應該使用不同的Redis例項儲存資料。(由於Redis非常輕量級,一個空Redis例項佔用的記憶體只有1MB左右,所以不用擔心多個Redis例項會額外佔用很多記憶體。)

參考

李子驊, 《Redis 入門指南》

相關文章