Redis_數據類型

来源:https://www.cnblogs.com/nzhk/archive/2019/10/18/11695348.html
-Advertisement-
Play Games

Redis支持的鍵值數據類型如下: 字元串類型 散列類型 列表類型 集合類型 有序集合類型 一、字元串類型 字元串類型是Redis中最基本的數據類型,它能存儲任何形式的字元串,包括二進位數據。一個字元串類型鍵允許存儲的數據最大容量是512MB. 1、字元串常用命令 1.1 賦值與取值 SET key ...


Redis支持的鍵值數據類型如下:

  • 字元串類型
  • 散列類型
  • 列表類型
  • 集合類型
  • 有序集合類型

 

 一、字元串類型

       字元串類型是Redis中最基本的數據類型,它能存儲任何形式的字元串,包括二進位數據。一個字元串類型鍵允許存儲的數據最大容量是512MB.

 

1、字元串常用命令

 

1.1 賦值與取值

SET key value

GET key

示例如下:


提示:Redis對於鍵的命名沒有強制要求,但比較好的實踐使用"對象類型:對象ID:對象屬性"來命名,對於多個單詞則推薦使用“.”分隔.

 

1.2 數字遞增

INCR key

當存儲的字元串是整數形式時,可通過INCR命令讓當前鍵值遞增,並返回遞增後的值,示例如下:


 

INCRBY key increment

INCRBY命令與INCR命令基本一樣,前者可以通過increment參數指定增加的數值,示例如下:


 

1.3 數字遞減

DECR key

DECRBY key decrement

DECR命令是讓當前鍵值遞減,DECREBY命令可指定減少的數值,與INCRBY命令用法相同,示例如下:


 

1.4 增加指定浮點數

INCRBYFLOAT key increment

INCRBYFLOAT命令用於遞增一個雙精度浮點數,示例如下:


 

1.5 向尾部追加值

APPEND key value

APPEND作用是向鍵值的末尾追加value值,如果鍵不存在則將改鍵的值設置為value,返回值是追加字元串後的總長度。示例:


 

1.6 獲取字元串長度

STRLEN key

STRLEN命令返回鍵值的長度,如果鍵不存在則返回0,示例:


 

1.7 同時獲取/設置多個鍵值

MGET key [key...]

MSET key value [key value...]

可以分別使用MGET和MSET命令獲取或者設置多個鍵的鍵值,示例:


 

二、散列類型

       散列類型的鍵值是一種字典結構,其存儲了欄位(field)和欄位值的映射,但欄位值只能是字元串,不支持其他數據類型。散列類型適合存儲對象:使用對象類別和ID構成鍵名,使用欄位表示對象的屬性,欄位值則存儲屬性值。例如要存儲ID為2的汽車對象,可以設置鍵為car:2,鍵值為name:"奧迪",其中鍵值中"name"為欄位,"奧迪"為欄位值。

 

1、散列常用命令

 

1.1 賦值與取值

HSET key field value

HGET key field 

這兩個命令分別用來給欄位賦值和獲得欄位的值,HSET命令不區分是對欄位的插入還是更新操作,當欄位不存在時為插入操作,當欄位存在時為更新操作,示例如下:

提示:在Redis中每個鍵都屬於一個明確的數據類型,如通過HSET命令建立的鍵是散列類型,通過SET命令建立的鍵是字元串類型等。使用一個數據類型的命令操作另一種數據類型的鍵會提示錯誤:(error) WRONGTYPE Operation against a key holding the wrong kind of value。但也不是所有命令都是如此,如SET命令可以覆蓋已經存在的鍵,不論鍵原來是什麼類型。

 

HMSET key field value [field value ...]

HMGET key field [field ...]

當需要同時設置或獲取多個欄位的值時,可以使用HMSET/HMGET命令,示例如下:


 

HGETALL key

HGETALL命令可以獲取鍵中的所有欄位和欄位值,示例如下:


 

1.2 判斷欄位是否存在

HEXISTS key field

HEXISTS命令用來判斷一個欄位是否存在,存在則返回1,否則返回0,示例如下:

 

1.3 當欄位不存在時賦值

HSETNX key field value

如果欄位已經存在,HSETNX命令將不執行任何操作,示例如下:

 

1.4 增加數字

HINCRBY key field increment

HINCRBY命令可使欄位增加指定的整數,示例如下:

 

 1.5 刪除欄位

HDEL key field [field ...]

HDEL命令可以刪除一個或多個欄位,返回值是被刪除的欄位個數,示例如下:

 

1.6 只獲取欄位名或欄位值

HKEYS key

HVALS key

 

1.7 獲取欄位數量

HLEN key

 

 

三、 列表類型 

  列表類型可以存儲一個有序的字元串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。列表類型內部是使用雙向鏈表實現的,所以向列表兩端添加元素的時間複雜度為O(1),獲取越接近兩端的元素速度越快。

 

1、列表常用命令

 

1.1 向列表兩端增加元素

LPUSH key value [value ... ]

RPUSH key value [value ... ]

LPUSH命令和RPUSH命令分別用來向列表左邊和右邊增加元素,返回值表示增加元素後的列表長度,示例如下:

 

 

1.2 從列表兩端彈出元素

LPOP key

RPOP key

LPOP命令可以從列表的左邊彈出一個元素,LPOP命令執行步驟:第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值,RPOP命令類似,示例如下:

 

1.3 獲取列表中元素的個數

LLEN key

當鍵不存在時LLEN會返回0,示例如下:

 

 1.4 獲取列表片段

LRANGE key start stop

LRANGE命令能夠獲取列表中的某一片段,返回索引從start到stop之間的所有元素(包括兩端的元素),Redis的列表起始索引為0。

 

 

 LRANGE命令也支持負索引,表示從右邊開始取數,如"-1"表示最右邊第一個元素,依次類推。

 

 註意兩種特殊情況:

(1)如果start的索引位置比stop的索引位置靠後,則會返回空列表

(2)如果stop大於實際的索引範圍,則會返回到列表最右邊的元素

 

 1.5 刪除列表中指定的值

LREM key count value

LREM命令會刪除列表中前count個值為value的元素,返回值是實際刪除的元素個數,根據count值的不同,LREM命令的執行方式會有差異:

(1)當count>0時LREM命令會從列表左邊開始刪除前count個值為value的元素;

(2)當count<0時LREM命令會從列表右邊開始刪除前|count|個值為value的元素;

(3)當count=0時LREM命令會刪除所有為value的元素。

 

 1.6 獲取/設置指定索引的元素值

LINDEX key index

LSET key index value

LINDEX命令用來返回指定索引的元素,索引從0開始

 

 如果index是負數則表示從右邊開始計算的索引,最右邊元素的索引為-1

 

 LSET命令是為指定索引設置值

 

 1.7 只保留列表指定片段

LTRIM key start end

LTRIM命令可以刪除指定索引範圍之外的所有元素,示例:

 

 1.8 向列表中插入元素

LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先會在列表中從左到右查找值為pivot的元素,然後根據第二個參數是BEFORE還是AFTER來決定value插入到該元素的前面還是後面,返回值是插入後列表的元素個數

 

 1.9 將元素從一個列表轉到另一個列表中

RPOPLPUSH source destination

RPOPLPUSH命令會先從source列表的右邊彈出一個元素,然後將其加入到destination列表的左邊,並返回這個元素的值,整個過程是原子的。

當把列表類型作為隊列使用時,RPOPLPUSH命令可以很直觀地在多個隊列中傳遞數據。當source和destination相同時,RPOPLPUSH命令會不斷地將隊尾地元素移到隊首。

 

 四、集合類型

  集合中的每個元素都是唯一的,且沒有順序。集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,且多個集合之間還可以進行並集、交集和差集運算。

 

1、集合常用命令

 

1.1 增加/刪除元素

SADD key member [member ... ]

SREM key member [member ... ]

SADD命令用來向集合中增加一個或多個元素,如果鍵不存在則會自動創建。因為集合中的元素是唯一的,如果要加入的元素已經存在於集合中就會忽略這個元素,返回值是成功加入的元素數量。

 

 SREM命令用來從集合中刪除一個或多個元素,並返回成功刪除的元素個數。

 

 

1.2 獲取集合中的所有元素

SMEMBERS key

SMEMBERS命令會返回集合中的所有元素,示例如下:

 

 

1.3 判斷元素是否存在集合中

SISMEMBER key member

 

 

1.4 集合間運算

SDIFF key [key ... ]

SDIFF命令用來對多個集合執行差集運算。集合A與集合B的差集表示為A-B,代表所有屬於A且不屬於B的元素構成的集合,示例如下:

 

 SDIFF命令還支持同時傳入多個鍵

 

SINTER key [key ... ]

SINTER命令用來對多個集合執行交集運算。

 

SUNION key [key ... ]

SUNION命令用來對多個集合執行並集運算。

 

1.5 獲取集合中元素個數

SCARD key

SCARD命令用來獲取集合中的元素個數。

 

1.6 進行集合運算並將結果存儲

SDIFFSTORE destination key [key .... ]

SINTERSTORE destination key [key ... ]

SUNIONSTORE destination key [key ... ]

SDIFFSTORE命令和SDIFF命令類似,區別在於SIDFFSTORE命令不會直接返回運算結果,而是將結果存儲在destination鍵中,常用於需要進行多步集合運算的場景中,如需要先計算差集再將結果和其他鍵計算交集等。

 

1.7 隨機獲取集合中的元素

SRANDMEMBER key [count]

SRANDMEMBER命令用來隨機從集合中獲取一個元素,如:

 

 還可以根據count參數來一次隨機獲取count個元素,根據count的正負不同,表現不同。

(1)當count為正數時,SRANDMEMBER會隨機從集合中獲取count個不重覆的元素。如果count的值大於集合中的元素個數,則返回集合中的所有元素

 

 (2)當count為負數時,SRANDMEMBER會隨機從集合中獲取|count|個元素,元素有可能相同。

 

 1.8 從集合中彈出一個元素

SPOP key

SPOP命令會從集合中隨機選擇一個元素彈出。

 

 

五、有序集合類型

 

1、介紹

  在集合的基礎上,有序集合類型為集合中的每個元素都關聯了一個分數,使得我們不僅可以完成插入、刪除元素和判斷元素是否存在等類型的操作,還能夠獲得分數最高的前N個元素、獲得指定分數範圍內的元素等與分數有關的操作。

 

2、有序集合與列表的區別

(1)列表類型是通過鏈表實現的,獲取靠近兩端的數據速度較快,而當元素增多後,訪問中間數據的速度會較慢,所以更適合實現如“新鮮事”、“日誌”這樣很少訪問中間元素的應用。

(2)有序集合類型是使用散列表和跳躍表實現的,所以即使讀取位於中間部分的數據速度也很快。

    提示:散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。

(3)列表中不能簡單地調整某個元素的位置,有序集合可通過更改元素的分數進行調整。

(4)有序集合比列表類型更耗費記憶體。

 

3、有序集合常用命令

 

 3.1 增加元素

ZADD key score member [score member ... ]

ZADD命令用來向有序集合中加入一個元素和該元素的分數,如果元素已經存在,則會用新的分數替換原來的分數。返回值是加入到集合中的元素個數。

 

 3.2 獲取元素的分數

ZSCORE key member

 

 3.3 獲取排名在某個範圍內的元素列表

ZRANGE key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE命令會按照元素分數從小到大返回索引從start到stop之間的所有元素(包含兩端的元素,同時支持負數索引)。

 

 如果需要在獲取元素的同時獲得元素的分數,可在ZRANGE命令後加上WITHSCORES參數。

 如果兩個元素的分數相同,Redis會按照欄位順序進行排序("0"<"9"<"A"<"Z"<"a"<"z")

 

3.4 獲取指定分數範圍的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZRANGEBYSCORE命令按照元素分數從小到大的順序返回分數在min和max之間的元素(包含min和max)。

 

 如果希望分數範圍不包含端點值,可以在分數前加上"("符號,示例如下:

 

 [LIMIT offset count]參數的作用:在獲取的元素列表的基礎上向後偏移offset個元素,並且只獲取前count個元素。

 

 3.5 增加某個元素的分數

ZINCRBY key increment member

ZINCRBY命令可以增加一個元素的分數,返回值是更改後的分數。如果指定元素不存在,Redis在執行命令前會先建立它並將它的分數賦值為0再執行操作。

 

 3.6 獲取集合中元素的數量

ZCARD key

 

 3.7 獲取指定分數範圍內的元素個數

ZCOUNT key min max

 

 3.8 刪除一個或多個元素

ZREM key member [member ... ]

 

 3.9 按照排名範圍刪除元素

ZREMRANGEBYRANK key start stop

ZREMRANGEBYRANK命令按照元素分數從小到大的順序刪除處在指定排名範圍內的所有元素,並返回刪除的元素數量。

 

 3.10 按照分數範圍刪除元素

ZREMRANGEBYSCORE key min max

 

 3.11 獲取元素的排名

ZRANK key member

ZREVRANK key member

ZRANK命令會按照元素分數從小到大的順序獲得指定的元素排名(分數最小的元素排名為0),ZREVRANK命令與之相反(分數最大的元素排名為0)。

 

 3.12 計算有序集合的交集

ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX]

ZINTERSTORE命令用來計算多個有序集合的交集並將結果存在destination鍵中,返回值為destination鍵中的元素個數。destination鍵中的分數是由AGGREAGTE參數決定的。

(1)當AGGREGATE是SUM時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的和,預設為SUM。

 

(2)當AGGREGATE是MIN時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的最小值。

 

 (3)當AGGREGATE是MAX時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的最大值。

 

 ZINTERSTORE命令還能夠通過WEIGHTS參數設置每個集合的權重,每個集合在參與計算時元素的分數被乘上該集合的權重。

 ZUNINONSTORE命令用於計算集合的並集,與ZINTERSTORE命令類似。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Percona XtraBackup工具提供了一種在系統運行時執行MySQL數據熱備份的方法。 Percona XtraBackup在事務系統上執行聯機非阻塞,緊密壓縮,高度安全的完整備份,因此在計劃的維護時段內,應用程式仍保持完全可用。 環境準備: master:192.168.0.106:330 ...
  • Redis 的複製功能分為同步( sync )和命令傳播( command propagate )兩個步驟: 一、同步用於將從伺服器的資料庫狀態更新至主伺服器當前所處的資料庫狀態。 二、命令傳播則用於在主伺服器的資料庫狀態被修改,導致主從伺服器的資料庫狀態出現不一致時,讓主從伺服器的資料庫重新回... ...
  • NameNode && Secondary NameNode工作機制 1)工作流程 2) fsimage和edits NameNode是HDFS的大腦,它維護著整個文件系統的目錄樹,以及目錄樹里所有的文件和目錄,這些信息以倆種文件存儲在文件系統:一種是命名空間鏡像(也稱為文件系統鏡像,File Sy ...
  • 一、下載、安裝 1、下載 (1)下載地址 (2)此處我下載最新版(8.0.18) 2、安裝 (1)解壓、並配置環境變數 step1:右擊“我的電腦”,點擊屬性,選擇高級屬性設置,添加環境變數PATH,將bin目錄下的路徑添加到Path中。 step2:查看當前版本。若成功顯示版本號,則環境變數配置成 ...
  • 之前在腳本中使用sqlldr導入數據時,如果表的數據量較大的話,會使日誌文件變得極大,之後在網上查找了很久,才在一個偶然的機會找到這個參數 silent=all ...
  • 在windows server 2012R2安裝Oracle客戶端或者服務端時,會彈窗報錯INS-13001 環境不滿足最低要求此時可以進行以下操作進行解決 在解壓後的Oracle安裝文件目錄中,找到 stage\cvu\cvu_prereq.xml 文件,修改文件配置如下,複製windows7的配 ...
  • 利用Excel以及word文檔進行操作 將表的欄位以及數據全部放入Excel表中並保存。 在word表中將寫好的sql語句放入文檔,利用郵件--選擇收件人--使用現有列表--(選擇之前做好的Excel表)--插入合併域(添加在sql語句中的條件中) 完成併合並(編輯單個文檔選擇全部)--完成(不過為 ...
  • 前言: 日常工作或學習過程中,我們可能會經常用到某些SQL,建議大家多多整理記錄下這些常用的SQL,這樣後續用到會方便很多。筆者在工作及學習過程中也整理了下個人常用的SQL,現在分享給你!可能有些SQL你還不常用,但還是希望對你有所幫助,說不定某日有需求就可以用到。 註:下文分享的SQL適用於MyS ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...