Redis之Hash和List類型常用命令
- 一、Hash類型詳解
- 1. Hash類型的特點
- 2. 常用命令及示例
- (1)設置字段值
- (2)獲取字段值
- (3)刪除字段
- (4)其他常用命令
- 3. 應用場景
- 二、List類型詳解
- 1. List類型的特點
- 2. 常用命令及示例
- (1)添加元素
- (2)獲取元素
- (3)列表長度與修剪
- (4)其他常用命令
- 3. 應用場景
Redis內存數據庫中,除了基礎的String類型外,Hash和List也是開發中頻繁使用的兩種數據結構,下面詳細講解Hash和List類型的特點、常用命令及典型應用場景,以便處理復雜業務需求。
一、Hash類型詳解
Hash類型(哈希)是一個鍵值對集合,類似于Java中的HashMap
或Python中的字典。它適合存儲對象類數據,能夠實現對對象屬性的精準操作,避免了String類型中序列化整個對象的開銷。
1. Hash類型的特點
- 鍵值結構:每個Hash類型的鍵(key)下包含多個字段(field)和對應的值(value)
- 二進制安全:field和value都支持二進制數據
- 內存高效:存儲對象數據比String類型更節省空間
- 操作靈活:可單獨對某個字段進行CRUD,無需操作整個對象
2. 常用命令及示例
假設我們要存儲用戶信息,以user:100
作為Hash的鍵,包含id
、name
、age
、email
等字段。
(1)設置字段值
-
HSET key field value:為哈希表中的字段設置值,返回受影響的字段數量
127.0.0.1:6379> HSET user:100 id 100 name "張三" age 25 (integer) 3
-
HMSET key field1 value1 field2 value2 …:同時設置多個字段值(Redis 4.0.0后推薦使用HSET替代)
127.0.0.1:6379> HMSET user:100 email "zhangsan@example.com" gender "男" OK
(2)獲取字段值
-
HGET key field:獲取哈希表中指定字段的值
127.0.0.1:6379> HGET user:100 name "張三"
-
HMGET key field1 field2 …:獲取多個字段的值
127.0.0.1:6379> HMGET user:100 id age gender 1) "100" 2) "25" 3) "男"
-
HGETALL key:獲取哈希表中所有字段和值
127.0.0.1:6379> HGETALL user:100 1) "id" 2) "100" 3) "name" 4) "張三" 5) "age" 6) "25" ...
(3)刪除字段
- HDEL key field1 field2 …:刪除哈希表中的一個或多個字段,返回刪除的字段數量
127.0.0.1:6379> HDEL user:100 gender (integer) 1
(4)其他常用命令
-
HEXISTS key field:判斷字段是否存在,存在返回1,否則返回0
127.0.0.1:6379> HEXISTS user:100 email (integer) 1
-
HLEN key:獲取哈希表中字段的數量
127.0.0.1:6379> HLEN user:100 (integer) 4
-
HKEYS key:獲取哈希表中所有字段名
127.0.0.1:6379> HKEYS user:100 1) "id" 2) "name" 3) "age" 4) "email"
-
HVALS key:獲取哈希表中所有字段值
127.0.0.1:6379> HVALS user:100 1) "100" 2) "張三" 3) "25" 4) "zhangsan@example.com"
-
HINCRBY key field increment:為數字類型字段增加指定增量
127.0.0.1:6379> HINCRBY user:100 age 1 (integer) 26
3. 應用場景
- 存儲對象數據:如用戶信息、商品詳情、訂單數據等
- 統計數據:如用戶的關注數、粉絲數、文章閱讀量等
- 配置信息:存儲應用的各種配置項,支持單獨更新某個配置
二、List類型詳解
List類型(列表)是一個有序的字符串集合,類似于Java中的LinkedList
,允許元素重復,底層采用雙向鏈表結構實現,適合做隊列或棧操作。
1. List類型的特點
- 有序性:元素按照插入順序排序
- 雙向操作:可從頭部和尾部插入/刪除元素
- 靈活的范圍操作:支持獲取指定索引范圍的元素
- 內存高效:鏈表結構對元素的增刪操作效率高
2. 常用命令及示例
以存儲文章評論列表為例,使用article:100:comments
作為List的鍵。
(1)添加元素
-
LPUSH key value1 value2 …:從列表頭部插入一個或多個元素,返回插入后列表的長度
127.0.0.1:6379> LPUSH article:100:comments "這篇文章很有用" "學習了" (integer) 2
-
RPUSH key value1 value2 …:從列表尾部插入一個或多個元素
127.0.0.1:6379> RPUSH article:100:comments "感謝分享" (integer) 3
(2)獲取元素
-
LPOP key:移除并返回列表的第一個元素
127.0.0.1:6379> LPOP article:100:comments "學習了"
-
RPOP key:移除并返回列表的最后一個元素
127.0.0.1:6379> RPOP article:100:comments "感謝分享"
-
LRANGE key start stop:獲取列表中指定范圍的元素(0表示第一個元素,-1表示最后一個元素)
127.0.0.1:6379> LPUSH article:100:comments "評論1" "評論2" "評論3" (integer) 4 127.0.0.1:6379> LRANGE article:100:comments 0 -1 1) "評論3" 2) "評論2" 3) "評論1" 4) "這篇文章很有用"
-
LINDEX key index:獲取列表中指定索引的元素
127.0.0.1:6379> LINDEX article:100:comments 1 "評論2"
(3)列表長度與修剪
-
LLEN key:獲取列表的長度
127.0.0.1:6379> LLEN article:100:comments (integer) 4
-
LTRIM key start stop:保留列表中指定范圍的元素,刪除其他元素
127.0.0.1:6379> LTRIM article:100:comments 0 1 OK 127.0.0.1:6379> LRANGE article:100:comments 0 -1 1) "評論3" 2) "評論2"
(4)其他常用命令
-
LREM key count value:刪除列表中與value相等的元素,count指定刪除數量(正數從頭部開始,負數從尾部開始,0刪除所有)
127.0.0.1:6379> LREM article:100:comments 1 "評論2" (integer) 1
-
LSET key index value:設置列表中指定索引的元素值
127.0.0.1:6379> LSET article:100:comments 0 "最新評論" OK
-
RPOPLPUSH source destination:移除source列表的最后一個元素,并將其添加到destination列表的頭部
127.0.0.1:6379> RPOPLPUSH article:100:comments article:101:comments "這篇文章很有用"
3. 應用場景
- 消息隊列:利用LPUSH+RPOP實現簡單的FIFO(先進先出)隊列
- 棧結構:使用LPUSH+LPOP或RPUSH+RPOP實現LIFO(后進先出)棧
- 最新列表:如最新文章、最新評論,使用LPUSH添加,LRANGE獲取前N條
- 排行榜:結合LTRIM可實現固定長度的排行榜
- 任務隊列:通過RPOPLPUSH實現安全的任務處理(避免任務丟失)
總結
- Hash類型適合存儲對象類數據,支持對單個字段的精準操作,是存儲用戶信息、商品詳情等數據的理想選擇
- List類型基于有序鏈表實現,適合構建隊列、棧、最新列表等場景,支持靈活的首尾操作和范圍查詢
若這篇內容幫到你,動動手指支持下!關注不迷路,干貨持續輸出!
ヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノ