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 進行求與、或、異或等操作。
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中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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

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

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器