搜尋
首頁php框架Laravel了解Redis這個核心資料類型

了解Redis這個核心資料類型

Jul 03, 2020 pm 05:20 PM
laravelredis

了解Redis這個核心資料類型

string 字串

#tring 類型是二進位安全的,即string 中可以包含任何資料。

Redis 中的普通 string 採用 raw encoding 即原始編碼方式,該編碼方式會動態擴容,並透過事先預先分配冗餘空間,來減少記憶體頻繁分配的開銷。

在字串長度小於 1MB 時,以所需長度的 2 倍來分配,超過 1MB,則按照每次額外增加 1MB 的容量來預先分配。

Redis 中的數字也存為string 類型,但編碼方式跟普通string 不同,數字採用整數編碼,字串內容直接設為整數值的二進位位元組序列

在儲存普通字串,序列化對象,以及計數器等場景時,都可以使用Redis 的字串類型,字串資料類型對應使用的指令包括set、get、mset、incr、decr 等。

list 列表

list 列表,是一個快速雙向鍊錶,儲存了一系列的string 類型的字字串值

對於常規的pop、push 元素,效能很高,時間複雜度為O(1),因為是清單直接追加或彈出。但對於透過隨機插入、隨機刪除,以及隨機範圍獲取,需要輪詢清單確定位置,效能就比較低下了。

操作list 清單時,可以用lpush、lpop、rpush、rpop、lrange 來進行常規的佇列進出及範圍獲取操作,在某些特殊場景下,也可以用lset、linsert 進行隨機插入操作,用lrem 進行指定元素刪除操作;最後,在訊息列表的消費時,還可以用Blpop、Brpop 進行阻塞式獲取,從而在列表暫時沒有元素時,可以安靜的等待新元素的插入,而不需要額外持續的查詢。

set 集合

set 是 string 類型的無序集合,set 中的元素是唯一的,即 set 中不會出現重複的元素。 Redis 中的集合一般是透過 dict 雜湊表實現的,所以插入、刪除,以及查詢元素,可以根據元素 hash 值直接定位,時間複雜度為 O(1)。

操作

  • sismember 指令判斷該key 對應的set 資料結構中,是否存在某個元素,如果存在回傳1,否則回傳0;

  • sdiff 指令來對多個set 集合執行差集;

  • sinter 指令對多個集合執行交集;

  • sunion 指令對多個集合執行並集;

  • spop 指令彈出一個隨機元素;

  • #srandmember 指令傳回一個或多個隨機元素。

在社交系統中,可以用來儲存關注的好友清單,用來判斷是否關注,還可以用來做好友推薦使用。另外,還可以利用 set 的唯一性,來對服務的來源業務、來源 IP 進行精確統計。

sorted set 有序集合

有順序集合中,每個元素都會關聯一個 double 類型的 score 分數值。有序集合透過這個 score 值進行由小到大的排序。有序集合中,元素不允許重複,但 score 分數值允許重複。

操作

  • zscan 指令:依序取得有序集合中的元素;

  • zscore 指令:取得元素的score 值;

  • zrange指令:透過指定score 傳回指定score 範圍內的元素;

  • 在某個元素的score 值發生變更時,也可以透過zincrby 指令對該元素的score 值加減。

  • 透過zinterstore、zunionstore 指令對多個有序集合進行取交集和並集,然後將新的有序集合存到一個新的key 中,如果有重複元素,重複元素的score 進行相加,然後作為新集合中該元素的score 值。

可以用有序集合來統計排行榜,即時刷新榜單,還可以用來記錄學生成績,從而輕鬆獲取某個成績範圍內的學生名單,還可以用來對系統統計增加權重值,從而在dashboard 即時展示。

hash 雜湊

bitmap

位圖是一串連續的二進位數字,底層實際上是基於string 進行封裝儲存的

按bit 位進行指令操作的。 bitmap 中每一bit 位元所在的位置就是offset 偏移,可以用setbit、bitfield 對bitmap 中每個bit 進行置0 或置1 操作,也可以用bitcount 來統計bitmap 中的被置1 的bit 數,還可以用bitop 來對多個bitmap 進行求與、或、異或等操作。

Redis 笔记

bitmap 位圖的特點是位元設定、求與、求或等操作很高效,而且儲存成本非常低,用來存物件標籤屬性的話,一個bit 即可存一個標籤。可用 bitmap,存用戶最近 N 天的登入狀況,每天用 1 bit,登入則置 1。

個性推薦在社群應用程式中非常重要,可以對新聞、feed 設定一系列標籤,如軍事、娛樂、影片、圖片、文字等,用bitmap 來儲存這些標籤,在對應標籤bit 位元上置1。對用戶,也可以採用類似方式,記錄用戶的多種屬性,並且可以很方便的根據標籤來進行多維度統計。 bitmap 位圖的重要指令包括:setbit、 getbit、bitcount、bitfield、 bitop、bitpos 等。

使用經驗

統計使用者登入: 1 2 3 5 天內登入
bitmap : 1 1 1 0 1

#GEO 地理位置

在儲存某個位置點時,首先利用Geohash 演算法,將該位置二維的經緯度,映射編碼成一維的52 位元整數值,將位置名稱、經緯度編碼score 作為鍵值對,儲存到分類key 對應的sorted set 中。

需要計算某個位置點A 附近的人時,首先以指定位置A 為中心點,以距離作為半徑,算出GEO 哈希8 個方位的範圍, 然後依次輪詢方位範圍內的所有位置點,只要這些位置點到中心位置A 的距離在要求距離範圍內,就是目標位置點。輪詢完所有範圍內的位置點後,重新排序即得到位置點 A 附近的所有目標。

使用geoadd,將位置名稱(如人、車輛、店名)與​​對應的地理位置資訊加入指定的位置分類key;

使用geopos 方便地查詢某個名稱所在的位置資訊;

使用georadius 取得指定位置附近,不超過所有指定距離的元素;

Redis GEO 地理位置,利用Geohash 將大量的二維經緯度轉一維的整數值,這樣可以方便的對地理位置進行查詢、距離測量、範圍搜尋。但由於地理位置點非常多,一個地理分類 key 下可能會有大量元素,在 GEO 設計時,需要提前進行規劃,避免單 key 過度膨脹。

Redis 的 GEO 地理位置資料結構,應用場景很多,例如查詢某個地方的具體位置,查當前位置到目的地的距離,查附近的人、餐廳、電影院等。 GEO 地理位置資料結構中,重要指令包括 geoadd、geopos、geodist、georadius、georadiusbymember 等。

使用 geodist 來取得指定的兩個位置之間的距離。

hyperLogLog 基數統計

hyperLogLog 是用來做基數統計的資料類型,當輸入巨大數量的元素做統計時,只需要很小的內存即可完成。 HyperLogLog 不保存元數據,只記錄待統計元素的估算數量,這個估算數量是一個帶有 0.81% 標準差的近似值,在大多數業務場景,對海量數據,少於 1% 的誤差是可以接受的。

Redis 的HyperLogLog 在統計時,如果計數數量不大,採用稀疏矩陣存儲,隨著計數的增加,稀疏矩陣佔用的空間也會逐漸增加,當超過閥值後,則改為稠密矩陣,稠密矩陣佔用的空間是固定的,約12KB位元組。

透過hyperLoglog 資料類型,你可以利用pfadd 向基數統計中增加新的元素,可以用pfcount 得到hyperLogLog 結構中儲存的近似基數數量,也可以用hypermerge 將多個hyperLogLog 合併為一個hyperLogLog 結構,從而可以方便的獲取合併後的基數數量。

hyperLogLog 的特點是統計過程不記錄獨立元素,佔用記憶體非常少,非常適合統計海量資料。在大中型系統中,統計每日、每月的 UV 即獨立訪客數,或統計海量使用者搜尋的獨立詞條數,都可以用 hyperLogLog 資料類型來處理。      

相關學習建議:Laravel     #   

以上是了解Redis這個核心資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
包容的幻想:解決偏遠工作中的孤立和孤獨感包容的幻想:解決偏遠工作中的孤立和孤獨感Apr 25, 2025 am 12:28 AM

Tocombatisolationandlonelinessinremotework,companiesshouldimplementregular,meaningfulinteractions,provideequalgrowthopportunities,andusetechnologyeffectively.1)Fostergenuineconnectionsthroughvirtualcoffeebreaksandpersonalsharing.2)Ensureremoteworkers

Laravel用於全堆棧開發:綜合指南Laravel用於全堆棧開發:綜合指南Apr 25, 2025 am 12:27 AM

laravelispularfullull-stackDevelopmentBecapeitOffersAsAseAseAseAseBlendOfbackendEdpoperandPowerandForterFlexibility.1)ITSbackEndCapaPabilities,sightifyDatabaseInteractions.2)thebladeTemplatingEngingEngineAllolowsLows

視頻會議攤牌:為遠程會議選擇正確的平台視頻會議攤牌:為遠程會議選擇正確的平台Apr 25, 2025 am 12:26 AM

選擇視頻會議平台的關鍵因素包括用戶界面、安全性和功能。 1)用戶界面應直觀,如Zoom。 2)安全性需重視,MicrosoftTeams提供端到端加密。 3)功能需匹配需求,GoogleMeet適合簡短會議,CiscoWebex提供高級協作工具。

哪些數據庫版本與最新的Laravel兼容?哪些數據庫版本與最新的Laravel兼容?Apr 25, 2025 am 12:25 AM

最新版本的Laravel10與MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。這些版本選擇是因為它們支持Laravel的ORM功能,如MySQL5.7的JSON數據類型,提升了查詢和存儲效率。

將Laravel用作全棧框架的好處將Laravel用作全棧框架的好處Apr 25, 2025 am 12:24 AM

Laravelisanexcellentchoiceforfull-stackdevelopmentduetoitsrobustfeaturesandeaseofuse.1)ItsimplifiescomplextaskswithitsmodernPHPsyntaxandtoolslikeBladeforfront-endandEloquentORMforback-end.2)Laravel'secosystem,includingLaravelMixandArtisan,enhancespro

Laravel的最新版本是什麼?Laravel的最新版本是什麼?Apr 24, 2025 pm 05:17 PM

Laravel10,releasedonFebruary7,2023,isthelatestversion.Itfeatures:1)Improvederrorhandlingwithanewreportmethodintheexceptionhandler,2)EnhancedsupportforPHP8.1featureslikeenums,and3)AnewLaravel\Promptspackageforinteractivecommand-lineprompts.

最新的Laravel版本如何簡化開發?最新的Laravel版本如何簡化開發?Apr 24, 2025 pm 05:01 PM

thelatestlaravelververversionenhancesdevelopmentwith:1)簡化的inimpliticmodelbinding,2)增強EnhancedeloquentcapabibilitionswithNewqueryMethods和3)改善了supportorfortormodernphpfortornphpforternphpfeatureserslikenamedargenamedArgonedArgonsemandArgoctess,makecodingMoreftermeforefterMealiteFficeAndEnjoyaigaigaigaigaigaiganigaborabilyaboipaigyAndenjoyaigobyabory。

在哪裡可以找到最新的Laravel版本的發行說明?在哪裡可以找到最新的Laravel版本的發行說明?Apr 24, 2025 pm 04:53 PM

你可以在laravel.com/docs找到最新Laravel版本的發布說明。 1)發布說明提供了新功能、錯誤修復和改進的詳細信息。 2)它們包含示例和解釋,幫助理解新功能的應用。 3)注意新功能的潛在復雜性和向後兼容性問題。 4)定期審查發布說明可以保持更新並激發創新。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器