【redis】hash基本命令和內部編碼

文章目錄

  • 表示形式
  • 命令
    • HSET 和 HGET
  • HEXISTS
  • HDEL
  • HKEYS
  • HVALS
  • HGETALL
  • HMGET
  • HLEN
  • HSETNX
  • HINCRBY
  • HINCRBYFLOAT
  • 命令小結
  • 內部編碼

表示形式

Redis 自身已經是鍵值對結構了
Redis 自身的鍵值對就是通過哈希的方式來組織的

key 這一層組織完成之后,到了 value 這一層,value 這一層也可以是哈希image.png

  • 哈希類型中的映射關系通常稱為 field-value,用于區分 Redis 整體的鍵值對(key-value),注意這里的 value 是指 field 對應的值,不是 key 對應的值,注意 value 在不同上下文的作用

命令

HSET 和 HGET

設置/獲取 hash 中指定的字段(field)的值(value


語法:

HSET key field value [field value...]HGET key field
  • HSET 的返回值是設置成功的鍵值對(field-value)的個數
  • 時間復雜度: O ( 1 ) O(1) O(1) image.png|263

HEXISTS

判斷 hash 中是否有指定的字段


語法:

HEXISTS key field
  • 返回值:1 表示存在,0 表示不存在
  • 時間復雜度: O ( 1 ) O(1) O(1)
    image.png|374

HDEL

刪除 hash 中指定的字段

  • del 刪除的是 key
  • hdel 刪除的是 field

語法:

HDEL key field [field...]
  • 返回值是本次刪除的字段個數
  • 時間復雜度:刪除一個元素為 O ( 1 ) O(1) O(1),刪除 N N N 個位 O ( N ) O(N) O(N)(幾十幾百個就視為 1)image.png|276
  • HDEL 是刪除 key 對應的 valuefield-value) 中的鍵值對 field
  • DEL 是直接刪除 key 對應的 value(里面所有的鍵值對全刪)

HKEYS

獲取 hash 中的所有字段


語法:

HKEYS key
  • 這個操作,會先根據 key 找到對應的 hash O ( 1 ) O(1) O(1)),然后再遍歷 hash O ( N ) O(N) O(N) N N Nhash 的元素個數)

談到 O ( N ) O(N) O(N),有的時候, N N N 表示:

  1. Redis 整體 key 的個數
  2. 當前命令中 key 的個數 (因為我們一般不會弄太多 key,所以一般可以直接看做 O ( 1 ) O(1) O(1))
  3. 當前 key 對應的 value 里面的元素個數

HVALS

獲取 hash 中的所有的值


語法:

HVALS key
  • 時間復雜度: O ( N ) O(N) O(N) N N N 是哈希的元素個數,如果哈希非常大,這個操作就可能導致 Redis 服務器被阻塞住)
    image.png|334

HGETALL

獲取 hash 中的所有字段以及對應的值

  • 相當于結合了 HKEYSHVALS

語法:

HGETALL key
  • 時間復雜度: O ( N ) O(N) O(N) N N N 是哈希的元素個數,如果哈希非常大,這個操作就可能導致 Redis 服務器被阻塞住)image.png|332

這個操作,還是風險比較大。多數情況下,不需要查詢所有的 field,可能只查其中的幾個 key

HMGET

一次獲取 hash 中多個字段的值


語法:

HMGET key field [field...]
  • 時間復雜度:刪除一個元素為 O ( 1 ) O(1) O(1),刪除 N N N 個位 O ( N ) O(N) O(N)(幾十幾百個就視為 1)
  • 返回值:字段對應的值或者 nil image.png
  • 上述 HKEYSHVALSHGETALL 都是存在一定風險的。hash 元素個數太多,執行的時間就會比較長,從而阻塞 Redis
    • 一條命令,就能完成所有的遍歷操作
  • HSCAN 遍歷 Redishash,“漸進式遍歷
    • 敲一次命令,遍歷一小部分
    • 再敲一次命令,再遍歷一小部分
    • 連續執行多次,就可以完成整個遍歷過程(化整為零

ConcurrentHashMap 線程安全的哈希表

HLEN

獲取 hash 中的所有字段的個數


語法:

HLEN key
  • 時間復雜度: O ( 1 ) O(1) O(1)
  • 返回值:字段個數image.png

HSETNX

在字段不存在的情況下,設置 hash 中的字段和值


語法:

HSETNX key field value
  • 時間復雜度: O ( 1 ) O(1) O(1)
  • 返回值:1 表示成功,0 表示失敗image.png|277

HINCRBY

hash 中字段對應的數字添加指定的值


語法:

HINCRBY key field increment
  • 時間復雜度: O ( 1 ) O(1) O(1)
  • 返回值:該字段變化后的值image.png

HINCRBYFLOAT

HINCRBY 的浮點數版本


語法:

HINCRBYFLOAT key field increment
  • 時間復雜度: O ( 1 ) O(1) O(1)
  • 返回值:該字段變化后的值image.png

命令小結

image.png

內部編碼

哈希的內部編碼有兩種:

  1. ziplist:壓縮列表
  2. hashtable:哈希表

壓縮:

  • rar
  • zip
  • gzip
  • 7z

  • 這是一些具體的壓縮算法。

壓縮的本質,是針對數據進行重新編碼。不同的數據,有不同的特點,結合這些特點,進行精妙的設計,重新編碼之后,就能夠縮小體積

比如,現在有字符串:abcccddddeeeee

  • 重新編碼表示:1a2b3c4d5e
  • 重新編碼后的結果就比原來的短了(粗糙)

ziplist 內部的數據結構也是精心設計的(目的是節省內存空間)

  • 表示一個普通的 hash 表,可能會浪費一定的空間(hash 首先是一個數組,數組上有些位置有元素,有些沒有元素)
  • 付出的代價是進行讀寫元素,速度是比較慢的。如果元素個數少,慢的不明顯,但如果元素多了,慢就會雪上加霜

如果:

  1. 哈希中的元素個數比較少,使用 ziplist 表示;元素較多,就用 hashtable 來表示
  2. 每個 value 的值,長度都比較短,使用 ziplist 表示;如果某個 value 的長度太長了,也會轉換成 hashtable

image.png

  • 可以在 redis。conf 文件中,調整 hash-max-ziplist-entries 配置和 hash-max-ziplist-value 配置

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

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

相關文章

行為模式---策略模式

概念 策略模式是一種行為設計摸是,它的核心思想是將一些列的算法封裝成獨立的對象,并使它們可以相互替換,通過上下文進行調用。 策略模式通過算法抽象為獨立的策略類,客戶端可以根據自身需求選擇不同的策略類來完成任務、這種方…

Selenium 自動化測試學習總結

大概了解一下即可,現在主要用的自動化工具是 playWright,它可以錄制操作。 selenium是老款自動化測試工具,仍有很多可取之處。 安裝: pip install selenium即可。然后下載瀏覽器的驅動包,注意不是瀏覽器!…

四層協議攻防手冊:從SYN Flood到UDP反射的深度防御

一、四層協議攻擊類型與特征 攻擊類型協議層特征SYN FloodTCP大量半開連接,SYN_RECV狀態堆積UDP反射放大UDP小請求包觸發大響應(如NTP、DNS響應)TCP分片攻擊TCP發送異常分片耗盡重組資源連接耗盡攻擊TCP建立大量空閑連接占用端口資源 二、TC…

【社區投稿】深入再談智能指針、AsRef引用與Borrow借用

深入再談智能指針、AsRef引用與Borrow借用 這是一個具有深度的技術主題。每次重溫其理論知識&#xff0c;都會有新的領悟。大約 2 年前&#xff0c;我曾就這一技術方向撰寫過另一篇短文《從類型轉換視角&#xff0c;淺談Deref<Target T>, AsRef<T>, Borrow<T&g…

外層元素旋轉,其包括在內的子元素一并旋轉(不改變旋轉中心),單元測試

思路&#xff1a;外層旋轉后坐標&#xff0c;元素旋轉后坐標&#xff0c;計算偏移坐標 <template><div class"outbox"><label>角度: <input v-model.number"rotate" type"number" /></label><br><div c…

如何在虛擬機上安裝hadoop

與前面java的方式相同安裝好hadoop后進入hadoop的環境變量my_env.sh 輸入#?HADOOP_export HADOOP_HOME /opt/module/hadoop-3.1.3 export PATH$PATH:$HADOOP_HOME/bin export PATH$PATH:$HADOOP_HOME/sbin 再輸入hadoop測試是否安裝成功

WPF-DataGrid的增刪查改

背景&#xff1a;該功能為幾乎所有系統開發都需要使用的功能&#xff0c;現提供簡單的案例。 1、MyCommand using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input;namespace Wp…

Oracle數據庫存儲結構--物理存儲結構

數據庫存儲結構&#xff1a;分為物理存儲結構和邏輯存儲結構。 物理存儲結構&#xff1a;操作系統層面如何組織和管理數據 邏輯存儲結構&#xff1a;Oracle數據庫內部數據組織和管理數據&#xff0c;數據庫管理系統層面如何組織和管理數據 存儲結構 在Oracle數據庫的存儲結構…

歌詞相關實現

歌詞相關 歌詞數據模型&#xff1a; // Lyric.swift class Lyric: BaseModel {/// 是否是精確到字的歌詞var isAccurate:Bool false/// 所有的歌詞var datum:Array<LyricLine>! }// LyricLine.swift class LyricLine: BaseModel {/// 整行歌詞var data:String!/// 開始…

紡織服裝制造行業現狀 內檢實驗室系統在紡織服裝制造行業的應用

在紡織服裝制造行業&#xff0c;內檢實驗室LIMS系統&#xff08;實驗室信息管理系統&#xff09;已成為提升檢測效率、優化質量控制和滿足行業合規性要求的關鍵工具。隨著行業競爭的加劇和消費者對產品質量要求的提高&#xff0c;紡織服裝制造企業需要更加高效、準確的檢測流程…

K8s 1.27.1 實戰系列(十一)ConfigMap

ConfigMap 是 Kubernetes 中管理非敏感配置的核心資源,通過解耦應用與配置實現靈活性和可維護性。 一、ConfigMap 的核心功能及優勢 ?1、配置解耦 將配置文件(如數據庫地址、日志級別)與容器鏡像分離,支持動態更新而無需重建鏡像。 ?2、多形式注入 ?環境變量:將鍵值…

3分鐘復現 Manus 超強開源項目 OpenManus

文章目錄 前言什么是 OpenManus構建方式環境準備克隆代碼倉庫安裝依賴配置 LLM API運行 OpenManus 效果演示總結個人簡介 前言 近期人工智能領域迎來了一位備受矚目的新星——Manus。Manus 能夠獨立執行復雜的現實任務&#xff0c;無需人工干預。由于限制原因大部分人無法體驗…

從零開始學機器學習——構建一個推薦web應用

首先給大家介紹一個很好用的學習地址:https://cloudstudio.net/columns 今天,我們終于將分類器這一章節學習完活了,和回歸一樣,最后一章節用來構建web應用程序,我們會回顧之前所學的知識點,并新增一個web應用用來讓模型和用戶交互。所以今天的主題是美食推薦。 美食推薦…

【最后203篇系列】014 AI機器人-1

說明 終于開張了&#xff0c;我覺得AI機器人是一件真正正確&#xff0c;具有商業價值的事。 把AI機器人當成一筆生意&#xff0c;我如何做好這筆生意&#xff1f;一端是業務價值&#xff0c;另一端是技術支撐。如何構造高質量的內容和服務&#xff0c;如何確保技術的廣度和深度…

【大模型統一集成項目】如何封裝多個大模型 API 調用

&#x1f31f; 在這系列文章中&#xff0c;我們將一起探索如何搭建一個支持大模型集成項目 NexLM 的開發過程&#xff0c;從 架構設計 到 代碼實戰&#xff0c;逐步搭建一個支持 多種大模型&#xff08;GPT-4、DeepSeek 等&#xff09; 的 一站式大模型集成與管理平臺&#xff…

AI4CODE】3 Trae 錘一個貪吃蛇的小游戲

【AI4CODE】目錄 【AI4CODE】1 Trae CN 錐安裝配置與遷移 【AI4CODE】2 Trae 錘一個 To-Do-List 這次還是采用 HTML/CSS/JAVASCRIPT 技術棧 Trae 錘一個貪吃蛇的小游戲。 1 環境準備 創建一個 Snake 的子文件夾&#xff0c;清除以前的會話記錄。 2 開始構建 2.1 輸入會…

【簡答題002】Java變量簡答題

博主會經常補充完善這里面問題的答案。希望可以得到大家的一鍵三連支持&#xff0c;你的鼓勵是我堅持下去的最大動力&#xff01;謝謝&#xff01; 001 什么是Java變量&#xff1f; Java變量是用來存儲數據并在程序中引用的命名空間。 002 Java變量有哪些類型&#xff1f; J…

從零開發Chrome廣告攔截插件:開發、打包到發布全攻略

從零開發Chrome廣告攔截插件&#xff1a;開發、打包到發布全攻略 想打造一個屬于自己的Chrome插件&#xff0c;既能攔截煩人的廣告&#xff0c;又能優雅地發布到Chrome Web Store&#xff1f;別擔心&#xff0c;這篇教程將帶你從零開始&#xff0c;動手開發一個功能強大且美觀…

基于騰訊云高性能HAI-CPU的跨境電商客服助手全鏈路解析

跨境電商的背景以及痛點 根據Statista數據&#xff0c;2025年全球跨境電商市場規模預計達6.57萬億美元&#xff0c;年增長率保持在12.5% 。隨著平臺規則趨嚴&#xff08;如亞馬遜封店潮&#xff09;&#xff0c;更多賣家選擇自建獨立站&#xff0c;2024年獨立站占比已達35%。A…

maven的項目構建

常用構建命令 命令說明mvn clean清理編譯結果&#xff08;刪掉target目錄&#xff09;mvn compile編譯核心代碼&#xff0c;生成target目錄mvn test-compile編譯測試代碼&#xff0c;生成target目錄mvn test執行測試方法mvn package打包&#xff0c;生成jar或war文件mvn insta…