Redis中的Hash和List類型常用命令及應(yīng)用分析
Redis內(nèi)存數(shù)據(jù)庫(kù)中,除了基礎(chǔ)的String類型外,Hash和List也是開發(fā)中頻繁使用的兩種數(shù)據(jù)結(jié)構(gòu),下面詳細(xì)講解Hash和List類型的特點(diǎn)、常用命令及典型應(yīng)用場(chǎng)景,以便處理復(fù)雜業(yè)務(wù)需求。
一、Hash類型詳解
Hash類型(哈希)是一個(gè)鍵值對(duì)集合,類似于Java中的HashMap或Python中的字典。它適合存儲(chǔ)對(duì)象類數(shù)據(jù),能夠?qū)崿F(xiàn)對(duì)對(duì)象屬性的精準(zhǔn)操作,避免了String類型中序列化整個(gè)對(duì)象的開銷。
1. Hash類型的特點(diǎn)
- 鍵值結(jié)構(gòu):每個(gè)Hash類型的鍵(key)下包含多個(gè)字段(field)和對(duì)應(yīng)的值(value)
- 二進(jìn)制安全:field和value都支持二進(jìn)制數(shù)據(jù)
- 內(nèi)存高效:存儲(chǔ)對(duì)象數(shù)據(jù)比String類型更節(jié)省空間
- 操作靈活:可單獨(dú)對(duì)某個(gè)字段進(jìn)行CRUD,無(wú)需操作整個(gè)對(duì)象
2. 常用命令及示例
假設(shè)我們要存儲(chǔ)用戶信息,以user:100作為Hash的鍵,包含id、name、age、email等字段。
(1)設(shè)置字段值
HSET key field value:為哈希表中的字段設(shè)置值,返回受影響的字段數(shù)量
127.0.0.1:6379> HSET user:100 id 100 name "張三" age 25 (integer) 3
HMSET key field1 value1 field2 value2 …:同時(shí)設(shè)置多個(gè)字段值(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 …:獲取多個(gè)字段的值
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 …:刪除哈希表中的一個(gè)或多個(gè)字段,返回刪除的字段數(shù)量
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:獲取哈希表中字段的數(shù)量
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:為數(shù)字類型字段增加指定增量
127.0.0.1:6379> HINCRBY user:100 age 1 (integer) 26
3. 應(yīng)用場(chǎng)景
- 存儲(chǔ)對(duì)象數(shù)據(jù):如用戶信息、商品詳情、訂單數(shù)據(jù)等
- 統(tǒng)計(jì)數(shù)據(jù):如用戶的關(guān)注數(shù)、粉絲數(shù)、文章閱讀量等
- 配置信息:存儲(chǔ)應(yīng)用的各種配置項(xiàng),支持單獨(dú)更新某個(gè)配置
二、List類型詳解
List類型(列表)是一個(gè)有序的字符串集合,類似于Java中的LinkedList,允許元素重復(fù),底層采用雙向鏈表結(jié)構(gòu)實(shí)現(xiàn),適合做隊(duì)列或棧操作。
1. List類型的特點(diǎn)
- 有序性:元素按照插入順序排序
- 雙向操作:可從頭部和尾部插入/刪除元素
- 靈活的范圍操作:支持獲取指定索引范圍的元素
- 內(nèi)存高效:鏈表結(jié)構(gòu)對(duì)元素的增刪操作效率高
2. 常用命令及示例
以存儲(chǔ)文章評(píng)論列表為例,使用article:100:comments作為L(zhǎng)ist的鍵。
(1)添加元素
LPUSH key value1 value2 …:從列表頭部插入一個(gè)或多個(gè)元素,返回插入后列表的長(zhǎng)度
127.0.0.1:6379> LPUSH article:100:comments "這篇文章很有用" "學(xué)習(xí)了" (integer) 2
RPUSH key value1 value2 …:從列表尾部插入一個(gè)或多個(gè)元素
127.0.0.1:6379> RPUSH article:100:comments "感謝分享" (integer) 3
(2)獲取元素
LPOP key:移除并返回列表的第一個(gè)元素
127.0.0.1:6379> LPOP article:100:comments "學(xué)習(xí)了"
RPOP key:移除并返回列表的最后一個(gè)元素
127.0.0.1:6379> RPOP article:100:comments "感謝分享"
LRANGE key start stop:獲取列表中指定范圍的元素(0表示第一個(gè)元素,-1表示最后一個(gè)元素)
127.0.0.1:6379> LPUSH article:100:comments "評(píng)論1" "評(píng)論2" "評(píng)論3" (integer) 4 127.0.0.1:6379> LRANGE article:100:comments 0 -1 1) "評(píng)論3" 2) "評(píng)論2" 3) "評(píng)論1" 4) "這篇文章很有用"
LINDEX key index:獲取列表中指定索引的元素
127.0.0.1:6379> LINDEX article:100:comments 1 "評(píng)論2"
(3)列表長(zhǎng)度與修剪
LLEN key:獲取列表的長(zhǎng)度
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) "評(píng)論3" 2) "評(píng)論2"
(4)其他常用命令
LREM key count value:刪除列表中與value相等的元素,count指定刪除數(shù)量(正數(shù)從頭部開始,負(fù)數(shù)從尾部開始,0刪除所有)
127.0.0.1:6379> LREM article:100:comments 1 "評(píng)論2" (integer) 1
LSET key index value:設(shè)置列表中指定索引的元素值
127.0.0.1:6379> LSET article:100:comments 0 "最新評(píng)論" OK
RPOPLPUSH source destination:移除source列表的最后一個(gè)元素,并將其添加到destination列表的頭部
127.0.0.1:6379> RPOPLPUSH article:100:comments article:101:comments "這篇文章很有用"
3. 應(yīng)用場(chǎng)景
- 消息隊(duì)列:利用LPUSH+RPOP實(shí)現(xiàn)簡(jiǎn)單的FIFO(先進(jìn)先出)隊(duì)列
- 棧結(jié)構(gòu):使用LPUSH+LPOP或RPUSH+RPOP實(shí)現(xiàn)LIFO(后進(jìn)先出)棧
- 最新列表:如最新文章、最新評(píng)論,使用LPUSH添加,LRANGE獲取前N條
- 排行榜:結(jié)合LTRIM可實(shí)現(xiàn)固定長(zhǎng)度的排行榜
- 任務(wù)隊(duì)列:通過(guò)RPOPLPUSH實(shí)現(xiàn)安全的任務(wù)處理(避免任務(wù)丟失)
總結(jié)
- Hash類型適合存儲(chǔ)對(duì)象類數(shù)據(jù),支持對(duì)單個(gè)字段的精準(zhǔn)操作,是存儲(chǔ)用戶信息、商品詳情等數(shù)據(jù)的理想選擇
- List類型基于有序鏈表實(shí)現(xiàn),適合構(gòu)建隊(duì)列、棧、最新列表等場(chǎng)景,支持靈活的首尾操作和范圍查詢
到此這篇關(guān)于Redis中的Hash和List類型常用命令及應(yīng)用分析的文章就介紹到這了,更多相關(guān)redis hash和list類型常用命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文詳解如何停止/重啟/啟動(dòng)Redis服務(wù)
Redis是當(dāng)前比較熱門的NOSQL系統(tǒng)之一,它是一個(gè)key-value存儲(chǔ)系統(tǒng),這篇文章主要給大家介紹了關(guān)于如何停止/重啟/啟動(dòng)Redis服務(wù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
Redis大key多key拆分實(shí)現(xiàn)方法解析
這篇文章主要介紹了Redis大key多key拆分實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Redis自動(dòng)化安裝及集群實(shí)現(xiàn)搭建過(guò)程
這篇文章主要介紹了Redis自動(dòng)化安裝以及集群實(shí)現(xiàn)搭建過(guò)程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
詳解Redis終端操作和Redis-plus-plus接口使用教程
這篇文章主要介紹了詳解Redis終端操作和Redis-plus-plus接口使用教程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-03-03
Ubuntu22.04 LTS 上安裝Redis的過(guò)程
Redis是一種開源的內(nèi)存數(shù)據(jù)存儲(chǔ),可以用作數(shù)據(jù)庫(kù)、緩存和消息代理等,本文將會(huì)介紹兩種不同的安裝方式,包括從源代碼編譯安裝以及通過(guò)apt包管理器安裝,需要的朋友參考下吧2023-11-11
Redis內(nèi)存管理之BigKey問(wèn)題及解決過(guò)程
文章全面解析了Java中Redis?BigKey問(wèn)題,涵蓋定義、危害(內(nèi)存不均、持久化阻塞等)、檢測(cè)方法(內(nèi)置工具與自定義掃描)、處理策略(分治拆分、漸進(jìn)刪除)及開發(fā)規(guī)范,結(jié)合案例與AI監(jiān)控優(yōu)化方案,提出系統(tǒng)化應(yīng)對(duì)措施,保障Redis高性能運(yùn)行2025-07-07

