這篇文章給大家分享的是有關(guān)redis核心數(shù)據(jù)類型有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),永嘉企業(yè)網(wǎng)站建設(shè),永嘉品牌網(wǎng)站建設(shè),網(wǎng)站定制,永嘉網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,永嘉網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
tring
類型是二進(jìn)制安全的,即 string
中可以包含任何數(shù)據(jù)。
Redis 中的普通 string 采用 raw encoding 即原始編碼方式,該編碼方式會(huì)動(dòng)態(tài)擴(kuò)容,并通過(guò)提前預(yù)分配冗余空間,來(lái)減少內(nèi)存頻繁分配的開(kāi)銷。
在字符串長(zhǎng)度小于 1MB 時(shí),按所需長(zhǎng)度的 2 倍來(lái)分配,超過(guò) 1MB,則按照每次額外增加 1MB 的容量來(lái)預(yù)分配。
Redis
中的數(shù)字也存為 string 類型,但編碼方式跟普通 string 不同,數(shù)字采用整型編碼,字符串內(nèi)容直接設(shè)為整數(shù)值的二進(jìn)制字節(jié)序列。
在存儲(chǔ)普通字符串,序列化對(duì)象,以及計(jì)數(shù)器等場(chǎng)景時(shí),都可以使用 Redis 的字符串類型,字符串?dāng)?shù)據(jù)類型對(duì)應(yīng)使用的指令包括 set、get、mset、incr、decr 等。
list
列表,是一個(gè)快速雙向鏈表,存儲(chǔ)了一系列的 string 類型的字串值
對(duì)于常規(guī)的 pop、push 元素,性能很高,時(shí)間復(fù)雜度為 O(1),因?yàn)槭橇斜碇苯幼芳踊驈棾觥5珜?duì)于通過(guò)隨機(jī)插入、隨機(jī)刪除,以及隨機(jī)范圍獲取,需要輪詢列表確定位置,性能就比較低下了。
操作 list 列表時(shí),可以用 lpush、lpop、rpush、rpop、lrange 來(lái)進(jìn)行常規(guī)的隊(duì)列進(jìn)出及范圍獲取操作,在某些特殊場(chǎng)景下,也可以用 lset、linsert 進(jìn)行隨機(jī)插入操作,用 lrem 進(jìn)行指定元素刪除操作;最后,在消息列表的消費(fèi)時(shí),還可以用 Blpop、Brpop 進(jìn)行阻塞式獲取,從而在列表暫時(shí)沒(méi)有元素時(shí),可以安靜的等待新元素的插入,而不需要額外持續(xù)的查詢。
set 是 string 類型的無(wú)序集合,set 中的元素是唯一的,即 set 中不會(huì)出現(xiàn)重復(fù)的元素。Redis 中的集合一般是通過(guò) dict 哈希表實(shí)現(xiàn)的,所以插入、刪除,以及查詢?cè)?,可以根?jù)元素 hash 值直接定位,時(shí)間復(fù)雜度為 O(1)。
操作
sismember
指令判斷該 key 對(duì)應(yīng)的 set 數(shù)據(jù)結(jié)構(gòu)中,是否存在某個(gè)元素,如果存在返回 1,否則返回 0;
sdiff
指令來(lái)對(duì)多個(gè) set 集合執(zhí)行差集;
sinter
指令對(duì)多個(gè)集合執(zhí)行交集;
sunion
指令對(duì)多個(gè)集合執(zhí)行并集;
spop
指令彈出一個(gè)隨機(jī)元素;
srandmember
指令返回一個(gè)或多個(gè)隨機(jī)元素。
在社交系統(tǒng)中,可以用于存儲(chǔ)關(guān)注的好友列表,用來(lái)判斷是否關(guān)注,還可以用來(lái)做好友推薦使用。另外,還可以利用 set 的唯一性,來(lái)對(duì)服務(wù)的來(lái)源業(yè)務(wù)、來(lái)源 IP 進(jìn)行精確統(tǒng)計(jì)。
有序集合中,每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè) double 類型的 score 分?jǐn)?shù)值。有序集合通過(guò)這個(gè) score 值進(jìn)行由小到大的排序。有序集合中,元素不允許重復(fù),但 score 分?jǐn)?shù)值卻允許重復(fù)。
操作
zscan
指令:按順序獲取有序集合中的元素;
zscore
指令:獲取元素的 score 值;
zrange
指令:通過(guò)指定 score 返回指定 score 范圍內(nèi)的元素;
在某個(gè)元素的 score 值發(fā)生變更時(shí),還可以通過(guò) zincrby 指令對(duì)該元素的 score 值進(jìn)行加減。
通過(guò) zinterstore、zunionstore
指令對(duì)多個(gè)有序集合進(jìn)行取交集和并集,然后將新的有序集合存到一個(gè)新的 key 中,如果有重復(fù)元素,重復(fù)元素的 score 進(jìn)行相加,然后作為新集合中該元素的 score 值。
可以用有序集合來(lái)統(tǒng)計(jì)排行榜,實(shí)時(shí)刷新榜單,還可以用來(lái)記錄學(xué)生成績(jī),從而輕松獲取某個(gè)成績(jī)范圍內(nèi)的學(xué)生名單,還可以用來(lái)對(duì)系統(tǒng)統(tǒng)計(jì)增加權(quán)重值,從而在 dashboard 實(shí)時(shí)展示。
略
位圖是一串連續(xù)的二進(jìn)制數(shù)字,底層實(shí)際是基于 string
進(jìn)行封裝存儲(chǔ)的
按 bit 位進(jìn)行指令操作的。bitmap 中每一 bit 位所在的位置就是 offset 偏移,可以用 setbit、bitfield 對(duì) bitmap 中每個(gè) bit 進(jìn)行置 0 或置 1 操作,也可以用 bitcount 來(lái)統(tǒng)計(jì) bitmap 中的被置 1 的 bit 數(shù),還可以用 bitop 來(lái)對(duì)多個(gè) bitmap 進(jìn)行求與、或、異或等操作。
bitmap
位圖的特點(diǎn)是按位設(shè)置、求與、求或等操作很高效,而且存儲(chǔ)成本非常低,用來(lái)存對(duì)象標(biāo)簽屬性的話,一個(gè) bit 即可存一個(gè)標(biāo)簽。可以用 bitmap,存用戶最近 N 天的登錄情況,每天用 1 bit,登錄則置 1。
個(gè)性推薦在社交應(yīng)用中非常重要,可以對(duì)新聞、feed 設(shè)置一系列標(biāo)簽,如軍事、娛樂(lè)、視頻、圖片、文字等,用 bitmap 來(lái)存儲(chǔ)這些標(biāo)簽,在對(duì)應(yīng)標(biāo)簽 bit 位上置 1。對(duì)用戶,也可以采用類似方式,記錄用戶的多種屬性,并可以很方便的根據(jù)標(biāo)簽來(lái)進(jìn)行多維度統(tǒng)計(jì)。bitmap 位圖的重要指令包括:setbit、 getbit、bitcount、bitfield、 bitop、bitpos 等。
使用經(jīng)歷
統(tǒng)計(jì)用戶登錄情況 : 1 2 3 5 天內(nèi)登錄
bitmap : 1 1 1 0 1
在存儲(chǔ)某個(gè)位置點(diǎn)時(shí),首先利用 Geohash
算法,將該位置二維的經(jīng)緯度,映射編碼成一維的 52 位整數(shù)值,將位置名稱、經(jīng)緯度編碼 score 作為鍵值對(duì),存儲(chǔ)到分類 key 對(duì)應(yīng)的 sorted set 中。
需要計(jì)算某個(gè)位置點(diǎn) A 附近的人時(shí),首先以指定位置 A 為中心點(diǎn),以距離作為半徑,算出 GEO 哈希 8 個(gè)方位的范圍, 然后依次輪詢方位范圍內(nèi)的所有位置點(diǎn),只要這些位置點(diǎn)到中心位置 A 的距離在要求距離范圍內(nèi),就是目標(biāo)位置點(diǎn)。輪詢完所有范圍內(nèi)的位置點(diǎn)后,重新排序即得到位置點(diǎn) A 附近的所有目標(biāo)。
使用 geoadd,將位置名稱(如人、車輛、店名)與對(duì)應(yīng)的地理位置信息添加到指定的位置分類 key 中;
使用 geopos 方便地查詢某個(gè)名稱所在的位置信息;
使用 georadius 獲取指定位置附近,不超過(guò)指定距離的所有元素;
Redis GEO 地理位置,利用 Geohash 將大量的二維經(jīng)緯度轉(zhuǎn)一維的整數(shù)值,這樣可以方便的對(duì)地理位置進(jìn)行查詢、距離測(cè)量、范圍搜索。但由于地理位置點(diǎn)非常多,一個(gè)地理分類 key 下可能會(huì)有大量元素,在 GEO 設(shè)計(jì)時(shí),需要提前進(jìn)行規(guī)劃,避免單 key 過(guò)度膨脹。
Redis 的 GEO 地理位置數(shù)據(jù)結(jié)構(gòu),應(yīng)用場(chǎng)景很多,比如查詢某個(gè)地方的具體位置,查當(dāng)前位置到目的地的距離,查附近的人、餐廳、電影院等。GEO 地理位置數(shù)據(jù)結(jié)構(gòu)中,重要指令包括 geoadd、geopos、geodist、georadius、georadiusbymember 等。
使用 geodist 來(lái)獲取指定的兩個(gè)位置之間的距離。
hyperLogLog
是用來(lái)做基數(shù)統(tǒng)計(jì)的數(shù)據(jù)類型,當(dāng)輸入巨大數(shù)量的元素做統(tǒng)計(jì)時(shí),只需要很小的內(nèi)存即可完成。HyperLogLog 不保存元數(shù)據(jù),只記錄待統(tǒng)計(jì)元素的估算數(shù)量,這個(gè)估算數(shù)量是一個(gè)帶有 0.81% 標(biāo)準(zhǔn)差的近似值,在大多數(shù)業(yè)務(wù)場(chǎng)景,對(duì)海量數(shù)據(jù),不足 1% 的誤差是可以接受的。
Redis 的 HyperLogLog 在統(tǒng)計(jì)時(shí),如果計(jì)數(shù)數(shù)量不大,采用稀疏矩陣存儲(chǔ),隨著計(jì)數(shù)的增加,稀疏矩陣占用的空間也會(huì)逐漸增加,當(dāng)超過(guò)閥值后,則改為稠密矩陣,稠密矩陣占用的空間是固定的,約為12KB字節(jié)。
通過(guò) hyperLoglog 數(shù)據(jù)類型,你可以利用 pfadd 向基數(shù)統(tǒng)計(jì)中增加新的元素,可以用 pfcount 獲得 hyperLogLog 結(jié)構(gòu)中存儲(chǔ)的近似基數(shù)數(shù)量,還可以用 hypermerge 將多個(gè) hyperLogLog 合并為一個(gè) hyperLogLog 結(jié)構(gòu),從而可以方便的獲取合并后的基數(shù)數(shù)量。
hyperLogLog 的特點(diǎn)是統(tǒng)計(jì)過(guò)程不記錄獨(dú)立元素,占用內(nèi)存非常少,非常適合統(tǒng)計(jì)海量數(shù)據(jù)。在大中型系統(tǒng)中,統(tǒng)計(jì)每日、每月的 UV 即獨(dú)立訪客數(shù),或者統(tǒng)計(jì)海量用戶搜索的獨(dú)立詞條數(shù),都可以用 hyperLogLog 數(shù)據(jù)類型來(lái)進(jìn)行處理。
感謝各位的閱讀!關(guān)于“Redis核心數(shù)據(jù)類型有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
當(dāng)前名稱:Redis核心數(shù)據(jù)類型有哪些
文章網(wǎng)址:http://jinyejixie.com/article32/gpgopc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站維護(hù)、域名注冊(cè)、定制網(wǎng)站、全網(wǎng)營(yíng)銷推廣、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)