Redis 五大數據類型的常用命令——列表、集合、哈希、有序集合

在這里插入圖片描述

??各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛

💡Redis知識點速覽

  • 🍖 五大數據類型——列表(List)
    • 🥩 List的底層數據結構
    • 🥩 列表常用命令
  • 🍖 五大數據類型——集合(Set)
    • 🥩 Set的底層數據結構
    • 🥩 集合常用命令
  • 🍖 五大數據類型——哈希(Hash)
    • 🥩 Hash的底層數據結構
    • 🥩 哈希常用命令
  • 🍖 五大數據類型——有序集合(Zset)
    • 🥩 Zset的底層數據結構
    • 🥩 有序集合常用命令

🍖 五大數據類型——列表(List)

??首先應該明確的一點就是,Redis中的五大數據結構是對value的概念,而不是指key的數據類型。Redis中的列表是一個簡單的字符串列表,按照插入的順序進行存儲并非是一個無序列表。List的底層實際上是一個雙向鏈表,所以你可以快速的向鏈表頭部或者尾添加元素,但是如果操作鏈表中間的元素的話性能就會很差

🥩 List的底層數據結構

??List的數據結構為快速鏈表quickList,那么有的小伙伴可能會有疑問了,你之前不是說過List的底層是一個雙向鏈表嗎,怎么又成快速鏈表了?實際上快速鏈表和雙向鏈表的概念并不沖突。

什么是快速鏈表?
??快速鏈表是Redis3.2之后引入的一種數據類型, 該結構是將許多的壓縮鏈表采用雙向鏈表的形式連接起來的一種結構, 這種鏈表中的每一個節點是一個壓縮鏈表. 這樣的設計能在時間效率和空間效率上實現較好的折中在這里插入圖片描述??在列表數據比較少的時候只使用一塊連續的內存存儲,這個結構就是壓縮鏈表(ziplist),當數據比較多的時候就,就使用很多個壓縮鏈表進行存儲,每個壓縮鏈表又作為一個節點采用雙向鏈表的形式連接起來,這就形成了一個快速鏈表

🥩 列表常用命令

左插或者右插的方式創建K-V:
??lpush rpush K V V V … lpush相當于雙向鏈表的頭插法,rpush相當于雙向鏈表的尾插法,關于這兩種方法的詳細介紹參考下面這篇博客:https://blog.csdn.net/jankin6/article/details/80954203

獲取key對應List索引范圍內的value:
?? 從左向右lrange key from to

從左邊或者右邊刪除一個值并返回:
??lpop rpop key 在這里插入圖片描述從第一個List的右邊刪除一個值插到第二個List的左邊:
??rpoplpush K K 在這里插入圖片描述獲取key對應List的索引位置元素:
??lindex key index
獲取key對應List的長度:
??llen key
在key對應List的某個元素之前插入元素:
??linsert key before ele newele
在key對應List的某個元素之后插入元素:
??linsert key after ele newele 在這里插入圖片描述在key對應List的某個元素之后插入元素:
??linsert key after ele newele 在這里插入圖片描述

🍖 五大數據類型——集合(Set)

??Set集合的功能實際上與List列表很是類似,與List不同的就是集合內部的元素是無序不重復的,他可以對添加的元素實現自動去重功能,如果你想存儲一個列表數據但是又不想出現重復數據,還不在乎數據的存儲順序的話,可以是使用set集合實現。set集合的底層實際上就是一個value值為null的hash表,所以它查找數據的速度很快

🥩 Set的底層數據結構

??Set的底層數據結構就是一個字典,只不過字典的實現方式是哈希表(hashtable),hashtable就是普通的哈希表(key為set的值,value為null)

🥩 集合常用命令

創建一個K-V:sadd K V V V…
查看key對應的value集合:smembers key在這里插入圖片描述判斷集合中是否有該元素:sismember key value
key對應的value集合長度:scard key
刪除集合中的元素:srem K V V V…在這里插入圖片描述隨機刪除集合中元素并返回:spop key
隨機取出集合中指定個元素:srandmember key num在這里插入圖片描述將集合的元素移動到另一個集合:smove K K V
兩個集合的交集:sinter K K
兩個集合的并集:sunion K K
兩個集合的差集:sdiff K K在這里插入圖片描述

🍖 五大數據類型——哈希(Hash)

??Redis中的Hash實際上就是一個鍵值對的集合,Hash也是針對K-V中value的概念,就是value中存儲了一個String類型的fieldvalue的映射表,十分類似于Java中Map集合元素存儲的映射關系,下面以Hash中的一個K-V為例畫圖幫助理解在這里插入圖片描述

🥩 Hash的底層數據結構

??Hash類型對應的數據結構是兩種:ziplist(壓縮列表),hashtable(哈希表)。當field-value長度較短且個數較少時,使用ziplist,否則使用hashtable。

🥩 哈希常用命令

添加K-V數據: hset K field value field value…
添加K-V數據: hmset K field value field value…
查看K對應的V中field的值: hget K field
判斷K對應的V中field是否存在: hexistst K field在這里插入圖片描述獲取K對應的V中所有的field: hkeys K
獲取K對應的V中所有的field的值: hvals K
K對應的V中的field的值加幾: hincrby K field num
添加一個映射關系存在則失敗: hsetnx K field value在這里插入圖片描述

🍖 五大數據類型——有序集合(Zset)

??有序集合zset與普通集合set非常相似,是一個沒有重復元素的字符串集合。
不同之處是有序集合的每個成員都關聯了一個評分(score),結合會按照這個評分(score)從低最高排序集合中的成員。集合的成員是唯一的,但是評分可以重復。
??因為元素是有序的, 所以你也可以很快的根據評分(score)或者次序(position)來獲取一個范圍的元素。訪問有序集合的中間元素也是非常快的,因此你能夠使用有序集合作為一個沒有重復成員的智能列表。

🥩 Zset的底層數據結構

??SortedSet(zset)底層使用了兩個數據結構:使用hash關聯元素value和權重score,保障元素value的唯一性,可以通過元素value找到相應的score值。還用跳躍表給元素value排序,根據score的范圍獲取元素列表

什么是跳躍表(skiplist)?在這里插入圖片描述跳躍表就是每往上一層就跳一個元素組成鏈表,跳躍表都是從最高層開始查找,比如說查找51的過程大致如下:

  • 從第2層開始,1節點比51節點小,向后比較到41節點比51節點小,繼續向后比較,后面就是NULL了,所以從41節點向下到第1層
  • 在第1層,41節點比51節點小,繼續向后,61節點比51節點大,所以返回從41向下到第0層
  • 第0層中,41節點比51節點小,繼續向后到要查找的51節點

共經歷查找4次,流程如下在這里插入圖片描述

🥩 有序集合常用命令

添加K-V數據(帶上評分): zadd K score value score value…
查看K-V數據: zrange K from to
查看K-V數據(帶上評分): zrange K from to withscores在這里插入圖片描述按照評分查看范圍內的值
從小到大排: zrangebyscore K min max
從大到小排: zrevrangebyscore K max min在這里插入圖片描述增加value對應的score: zincrby K num value
按照value刪除: zrem K value
計算score在范圍內的個數: zcount K min max
查詢value按score的排名: zrank K value在這里插入圖片描述

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

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

相關文章

python工程師面試寶典_2019年,Python工程師必考的6個面試題,Python面試題No5

第1題:Python里面如何實現tuple和list的轉換? 函數tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple, 元素不變,排序也不變 list轉為tuple: temp_list [1,2,3,4,5] 將temp_list進行強制轉換:tuple(temp_li…

aop注解配置切點 spring_springboot aop 自定義注解方式實現一套完善的日志記錄

一:功能簡介本文主要記錄如何使用aop切面的方式來實現日志記錄功能。主要記錄的信息有: 操作人,方法名,參數,運行時間,操作類型(增刪改查),詳細描述,返回值。二:項目結構圖如果想學習…

抽象類、接口的區別和相似點

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 abs…

c標簽判斷true false jsp_Java學習知識點:小白如何掌握JSP技術?

今天千鋒廣州小編就給大家分享零基礎如何掌握JSP技術,下面一起來看看吧!一、Java初級開發之jsp概述1.關于jspJavaServer Pages簡稱jsp,從“server”這個詞可以看出,這其實也是一門java服務端技術,其實可以簡單的把jsp認為是servle…

python語言保留字的特點_python保留字及其說明

原博文 2019-07-14 22:05 ? 保留字 說 明 and 用于表達式運算,邏輯與操作 as 用于類型轉換 assert 斷言,用于判斷變量或條件表達式的值是否為真 break 中斷循環語句的執行 class 用于定義類 continue 繼續執行下一次循環 ...011647 相關推薦 2019-12-19…

使用Java操作Redis的兩種方式Jedis、RedisTemplate

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

python提取數據庫數據_Python如何讀取MySQL數據庫表數據

本文實例為大家分享了Python讀取MySQL數據庫表數據的具體代碼,供大家參考,具體內容如下 環境:Python 3.6 ,Window 64bit 目的:從MySQL數據庫讀取目標表數據,并處理 代碼: # -*- coding: utf-8 -*- import p…

【項目實戰】基于Redis實現短信驗證碼登錄 (附源碼、思路)

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

加工中心刻字宏程序_FANUC OI系列圖書——車床、銑床及加工中心編程

? 這是金屬加工(mw1950pub)發布的第10035篇文章導讀今天跟大家分享FANUC OI系列圖書,包括車床、銑床及加工中心編程,快來看看吧!《FANUC 0i數控車床/加工中心編程技巧與實例》選擇在企業里應用*廣泛、編程*具代表性的日本FANUCSeries0i-TC/T…

Redis 的緩存策略

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

python顯示數據長度_python – 獲取CSV的長度以顯示進度

我正在處理大量CSV文件,每個文件都包含大量行.我的目標是逐行獲取數據并使用 Python將其寫入數據庫.但是,由于存在大量數據,我希望能夠跟蹤已寫入的數據量.為此,我計算了排隊的文件數量,并在每次文件完成時繼續添加一個文件. 我想為CSV文件做類似的事情并顯示我在哪一行,以及總…

關閉后天 樹莓派_陪你一起玩樹莓派-系統安裝

從今天就開始我們的樹莓派之旅,心情是不是有點小激動?我們拿到一個樹莓派是一個裸機。我們要準備一張16G的高速TF閃存卡,一個5V/2A的USB電源和一根micro B的 usb線。裝機步驟:一、下載樹莓派系統1、瀏覽器打開樹莓派官方網站 http…

簡單的簽到代碼_PHP實現一個小小的簽到功能,到底用MySQL還是Redis?

來源 | http://suo.im/5EWN3k今天,看下簽到功能怎么選擇?現在的網站和app開發中,簽到是一個很常見的功能,如微博簽到送積分,簽到排行榜~微博簽到如移動app ,簽到送流量等活動,移動app簽到用戶簽…

【Redis 6】緩存穿透、緩存雪崩、緩存擊穿(附解決方案、代碼)

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

8軟件遇到的問題及解決方法_Excel工作表中的8個常見問題,你一定遇到過,附解決方法...

在Excel工作表中,最常用的還是一些技巧,如果能夠熟練掌握,對于工作效率的提高絕對不是一點點哦,結合工作實際,小編對工作中常見的問題進行了總結,一共有8類,你一定也遇到過……一、Excel工作表常…

unity著色器和屏幕特效開發秘笈_Oculus研發分享:開發移動VR內容時應避免的PC渲染技術...

查看引用/信息源請點擊:映維網開發移動VR內容時應避免的PC渲染技術(映維網 2019年11月25日)有不少開發者都是以與PC相同的方式來開發Quest游戲,但這可能會導致優化性能方面出現大量困難。Oculus軟件工程師特雷弗達什(T…

Java包裝類、java中的方法傳參機制:按值調用

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 方法…

尤克里里怎么樣_尤克里里和吉他區別?尤克里里與吉他相比有什么不可替代的優勢...

尤克里里和吉他有什么區別?想必大家都見過尤克里里吧,就是類似吉他形狀的一種小型弦撥樂器。我們可以簡單的認為:尤克里里是簡化版本的吉他,更加簡單,更加便宜。小編彈的就是尤克里里2.從外觀上:吉他很大&a…

餓漢懶漢單例設計模式的使用及區別、java中的import關鍵字

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 關于…

廣電運通不好進嗎_我可以說鄭州新風的安裝大部分都是垃圾嗎?

說鄭州的新風安裝都是垃圾,這話很無禮,很自大,很傲慢,但是我能說確實是這樣嘛?其實包括我以前安裝的也不合格——雖然我不是故意的。這幾年見過許多家同行安裝的新風,可以說目前見到的很多家都不合格&#…