Redis 入門 - 1(基本 key 操作)

Chinkiver發表於2018-02-16

對 Redis 的基礎應用進行總結,並逐步使用 Laravel + Bootstrap + Redis 構建一個【個人任務管理系統】

前提

  1. Redis 入門 - 0(安裝、遠端訪問) | Laravel China 社群 - 高品質的 Laravel 開發者社群
  2. Redis 入門 - 0(圖形化管理工具) | Laravel China 社群 - 高品質的 Laravel 開發者社群

大綱

  1. 基本 key-value 操作
  2. 字串 String 型別 和 自增長 Integer 型別
  3. 雜湊 hash 型別
  4. 列表 list 型別
  5. 集合 set 型別
  6. 有序集合 sort set 型別

階段

時間計劃上為 4 個階段:

  • Step 1:完成 1、2 兩個知識點的掌握,並構建一個最基本的 【個人任務管理系統】
  • Step 2:繼續學習 3、4 兩個知識點,完善【個人任務管理系統】
  • Step 3:繼續學習 5、6 兩個知識點,完成【個人任務管理系統】
  • Step 4:明確目標,完整構建【個人任務管理系統】

約定 Redis 命令使用大寫來表示(但 Redis 自身並不區分大小寫)

Redis 的基礎

基礎命令

獲取 Key

// ?、*、[]、\x
KEYS [正規表示式]

// 獲取所有鍵(不建議在生產上執行此命令)
KEYS *

// 獲取所有以 post_xxxx 開頭的 key
KEYS post_*

判斷 Key 是否存在

// 存在返回整數型別 1,不存在則返回 0
EXISTS key_name

刪除 Key

// 返回刪除鍵的個數(整數型別)
DEL key_name

注意,DEL 不支援萬用字元,因此如果需要批量刪除需結合 Linux 管道命令實現。例如:

redis-cli DEL `redis-cli KEYS "post_*"`

Redis 中最基本的資料型別,最大儲存容量為 512 MB

基礎命令

賦值與取值

// 儲存 key_name = "value"
SET key_name value

// 獲取 key_name 的 "value"
// 注意:key_name 不存在時,返回空
GET key_name

// 同時賦值多個 key 或 獲取 多個 key 的 value
MSET key_name value [key_name2 value2 ...]
MGET key_name [key_name2 ...]

末尾追加值

// 返回追加後字串的總長度(Integer)
APPEND key_name value

如果 key_name 不存在,則建立一個 key_name-value,相當於執行 SET key_name value

獲取字串長度

// 返回字串的長度(Integer)
STRLEN key_name

可實現關係型資料庫裡的“自增”

基本命令

遞增與指定遞增值

// 讓 key_name 遞增,並返回遞增後的值(注意是 Integer)
INCR key_name   

// INCR 是 INCRBY key_name 1 的特例
INCRBY key_name [每次遞增值]

如果 key_name 不存在時,會建立 key_name 並賦值為 0,再執行 INCR 命令。因此,第一次遞增後的結果是 1。

遞減與指定遞減值

// 遞減
DECR key_name

DECRBY key_name [每次遞減值]

如果 key_name 不存在時,會建立 key_name 並賦值為 0,再執行 DECR 命令。因此,第一次遞增後的結果是 -1。

【引申】Redis 是原子操作,絕不會出現多個客戶端同時執行 INCR 命令後,產生相同的遞增或遞減結果。

遞增指定浮點數

// 每次遞增一個雙精度浮點數
INCRBYFLOAT key_name [每次遞增浮點數]

位操作,我覺得可對理解 Redis 的底層操作有幫助,實際應用上最好別用。

但有一個地方要明確,Redis 同其他語言的設計一樣,當儲存過大偏移量的資料時,要簡化!例如:ID 以 6237000000000001 開始的編碼,直接儲存會造成記憶體的巨大浪費,應該寫個轉換函式,減去 6237000000000000 後,存 1。

file

設計一個【個人任務管理系統】專案,能夠將自己的日常事項進行管理:

  1. 一個介面,上半部分 Input,下半部分 List
  2. 使用 Laravel + Bootstrap + Redis 來實現
  3. Redis 中有一個統籌的自增 ID:task:count,由它生成全域性的 task id
  4. 實現 task 的儲存即可,因此儲存結構為:task:$id:title 和 task:$id:content($id 就是獲取到的 task:count)
  5. 功能上,僅實現 task 的新增即可

示例

GitHub - chinkiver/simple-task: A simple task system

相關文章