Redis之Hash和List類型常用命令

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的鍵,包含idnameageemail等字段。

(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類型基于有序鏈表實現,適合構建隊列、棧、最新列表等場景,支持靈活的首尾操作和范圍查詢

若這篇內容幫到你,動動手指支持下!關注不迷路,干貨持續輸出!
ヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノヾ(′? ˋ)ノ

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917595.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【測試】?動化測試概念篇

本節?標:?動化測試Web?動化測試selenium1. ?動化1.1 ?動化概念?動化在?活中處處可?,?動的代替?的?為完成操作。?動灑?機,主要通上?就可以?動化灑?并且可以?動的旋轉。?動洗?液,免去了?動擠壓可以?動感應出洗…

Java中給List<T> 對象集合去重

Java中給List 對象集合去重List<Student> getStudentList studentMapper.getStudentList();List<Student> distinctInsurance distinctByField(getStudentList, Student::getCertNo);public static <T> List<T> distinctByField(List<T> list…

最小二乘法MSE

最小二乘法MSEx1x2x3x4x5x6x7x8x0y014805-29-31339-41064-14-2-1481-114-1-65-123-32-21305-23105114-81126-15-15-8-157-4-1221-39511-10-243-9-671-87-1404-35101371422-3-7-2-80-6-5-91-3091前景知識: 矩陣相關公式y(339?11430126?395?87422?309)y\begin{pmatrix} 339&a…

Pixel 4D 3.4.4.0 | 支持豐富的壁紙資源,高清畫質,高度的個性化設置能力,智能推薦功能

Pixel 4D是一款功能強大且用戶體驗良好的動態壁紙應用。它提供了豐富的壁紙資源和高清畫質&#xff0c;讓用戶可以輕松找到自己喜歡的壁紙。此外&#xff0c;該應用還具備高度的個性化設置能力&#xff0c;允許用戶根據自己的喜好調整壁紙效果。智能推薦功能則能幫助用戶發現更…

<PhotoShop><JavaScript><腳本>基于JavaScript,利用腳本實現PS軟件批量替換圖片,并轉換為智能對象?

前言 PhotoShop軟件支持JavaScript腳本,來擴展軟件的功能,官方本身也提供了一些常用腳本,如圖像處理等,同時也支持自定義的JavaScript腳本。 環境配置 系統:windows 平臺:visual studio code 語言:JavaScript 軟件:PhotoShop 2022 版本:23.2.1 概述 本文利用Java…

【Linux】System V - 基于建造者模式的信號量

目錄 信號量和P、V原語 信號量集結構體 信號量操作接口 semget semctl semop 封裝Sem 關于建造者模式 信號量和P、V原語 信號量和 P、V 原語由 Dijkstra &#xff08;迪杰斯特拉&#xff09;提出 信號量值含義 S>0: S 表?可?資源的個數 S0: 表??可?資源&a…

機器學習(11):嶺回歸Ridge

嶺回歸是失損函數通過添加所有權重的平方和的乘積(L2)來懲罰模型的復雜度。均方差除以2是因為方便求導&#xff0c;w_j指所有的權重系數, λ指懲罰型系數&#xff0c;又叫正則項力度特點:嶺回歸不會將權重壓縮到零&#xff0c;這意味著所有特征都會保留在模型中&#xff0c;但它…

調整Idea緩存目錄,釋放C盤空間

本文使用 Idea2024 Idea 會將一些配置默認緩存在C盤&#xff0c;使用久了會占用大量空間&#xff08;本人的Idea占用了將近5個G&#xff0c;以至于不得不進行遷移&#xff09; 緩存目錄主要涉及以下四個目錄&#xff0c;四個目錄可以分為兩組&#xff0c;每組目錄必須一起調整 …

手搓柵格工具-山體陰影

一、概述 山體陰影工具通過為柵格中的每個像元確定照明度&#xff0c;來獲取表面的假定照明度。 通過設置假定光源的位置并計算每個像元相對于相鄰像元的照明度值來實現此目的。 它可以顯著增強用于分析或圖形顯示的表面的可視化效果&#xff0c;尤其是在使用透明度時。 默認情…

Censtos docker安裝方法

#設置防火墻 systemctl stop firewalld.service setenforce 0 #安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm2 #yum-utils&#xff1a;提供了 yum-config-manager 工具。 #device mapper&#xff1a; 是Linux內核中支持邏輯卷管理的通用設備映射機制…

單片機51 day46

單片機 一&#xff1a;基礎概念 一&#xff1a;單片機最小系統 單片機&#xff1a;電源時鐘&#xff08;晶振&#xff09;復位 //實現的最小組件 電源&#xff1a;5V直流 時鐘(晶振)&#xff1a;決定系統運行的速率 一般12M&#xff08;不超過50M&#xff09;&#xff0c…

【無標題】解鎖未來無線網絡的無限可能——Mesh自組網設備

在科技迅猛發展的今天&#xff0c;無線網絡已經成為了現代生活不可或缺的一部分。無論是在家庭中娛樂觀看視頻、在線游戲&#xff0c;還是在企業中進行辦公、遠程協作&#xff0c;網絡的穩定性和覆蓋范圍都直接影響著我們的使用體驗。傳統的Wi-Fi網絡在面臨多設備同時連接或大面…

Libevent(5)之使用教程(4)工具

Libevent(5)之使用教程(4)工具函數 Author: Once Day Date: 2025年8月3日 一位熱衷于Linux學習和開發的菜鳥&#xff0c;試圖譜寫一場冒險之旅&#xff0c;也許終點只是一場白日夢… 漫漫長路&#xff0c;有人對你微笑過嘛… 本文檔翻譯于&#xff1a;Fast portable non-blo…

Linux指令(3):

1. cal指令&#xff1a;我們的cal指令有日歷的意思看上面&#xff0c;我們輸入一個cal指令&#xff0c;可以查看當前月的日歷&#xff0c;我們給cal指令后面加上 - 3&#xff0c;他就會顯示這個月為中間的三個月的日歷&#xff0c;但是-4 不行&#xff0c;-5 也不行。只能 - 3。…

MLS平滑濾波

1.前言 最近在學習&#xff0c;因此查閱相關資料&#xff0c;該怎么表述感覺有些困難 2.代碼 2.1代碼1 使用全局坐標系 參考&#xff1a;python點云移動最小二乘法(Moving Least Squares)平滑_移動最小二乘法python-CSDN博客 def Moving_Least_Squares_Smoothing_v1_expla…

華為2288H V5服務器閃紅燈 無法開機案例

廣東某客戶1臺華為2288H V5服務器&#xff0c;由于單位外圍電力維修導致服務器有過一次異常斷電。結果來電之后發現服務器無法開機&#xff0c;開機面板上有個紅色心跳指示燈&#xff0c; 工程師到客戶現場后通過192.168.2.100登陸到2288H V5服務器的BMC管理口&#xff0c;打算…

SRIO入門之官方例程仿真驗證

仿真SRIO事務時序仿真之前先完成下面兩步操作&#xff1a;1.Vivado軟件版本2020.1&#xff0c;創建好工程及SRIO的IP核2.右鍵綜合化的IP核&#xff0c;然后選擇打開IP示例工程直接運行仿真分別將request和response兩個模塊添加到仿真窗口進行查看運行1000us左右就可以看到信號動…

CMake進階: 使用FetchContent方法基于gTest的C++單元測試

目錄 1.前言 2.FetchContent詳解 2.1.FetchContent簡介 2.2.FetchContent_Declare 2.2.1.簡介 2.2.2.關鍵特性 2.2.3.常見示例 2.3.FetchContent_MakeAvailable 2.3.1.簡介 2.3.2.核心功能與工作流程 2.3.3.示例用法 2.3.4.關鍵特性 2.3.5.常見問題與解決方案 3.…

亞馬遜廣告投放:如何減少無效曝光提高ROI

“為什么廣告花費高但轉化率低&#xff1f;”“如何判斷關鍵詞是否值得繼續投放&#xff1f;”“曝光量暴漲但訂單沒增加怎么辦&#xff1f;”“ACOS居高不下該如何優化&#xff1f;”“手動廣告和自動廣告的預算怎么分配&#xff1f;”如果你也在為這些問題頭疼&#xff0c;說…

Ethereum:擁抱開源,OpenZeppelin 未來的兩大基石 Relayers 與 Monitor

不知道大家是否注意到&#xff0c;OpenZeppelin 正在經歷一次重大的戰略轉型。他們決定在 2026 年 7 月 1 日正式關閉其廣受好評的 SaaS 平臺——Defender&#xff0c;并將重心全面轉向開源工具的建設。 這一舉動在社區引發了廣泛的討論&#xff0c;也標志著 OpenZeppelin 希望…