業務需求:從1000條使用者登入記錄中選擇最新登入的前5個使用者
ps:(預設使用mysql資料庫)
select * from user order by logintime desc limit 5
為了解決查詢效率,你可能會設定字段索引。
沒錯,這個需求你成功的解決了。
但是,當資料量的級別達到上萬,百萬,甚至於像**這種上億的資料量,一次查詢消耗的時間效率可想而知,並且資料字段索引也是很佔據資源的,這個需求設定了logintime欄位,下乙個可能要設定id欄位等等,資源佔據消耗也非常可觀的。
這個時候redis list 就會幫助我們解決這些煩人的問題。
list 其實可以看作是雙向鍊錶,既可以做棧stack,也可以作佇列queue。這種資料操作的優越性非常適合從大量資料中查詢top資料,並且這種結構也用於做訊息佇列。在redis-list 中將左側left看作是頂部,右側right看作是底部。
list 作為stack時
list 作為queue時
用list作為儲存容器,保持list大小為 5 不變,當有新使用者登入時,就加入進list容器裡;在list容器達到容量上限時,加入乙個新使用者,就從底部彈出去掉乙個新使用者;查詢最新登入使用者時,直接讀取list所有元素即可。
---------- 達到容器設定的上限值 ------
---------------------
---- 新增乙個 v8 元素,從棧頂進入
---- 要保持容器資料個數不變
---- 從棧底去掉棧底元素 v3
rpop list2
lpush list2 v8
關於 redis list 今天就講到這,
推陳出新,不斷記錄分享自己的學習筆記。
Redis list底層的資料結構
前面我們使用list實現過佇列 現在就來看一下list的底層結構 list有兩種實現方式 1.壓縮鍊錶 壓縮列表 ziplist 是redis為了節省記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構,乙個壓縮列表可以包含任意多個節點 entry 每個節點可以儲存乙個位元組陣列或者...
資料結構 資料結構的概述
一 概述 什麼是資料結構 資料 由有限的符號 比如,0 和 1 具有其自己的結構 操作 和相應的語義 組成的元素的集合。結構 元素之間的關係的集合。資料結構 資訊的一種組織方式,其目的是為了提高演算法的效率,它通常與一組演算法的集合相對應,通過這組演算法集合可以對資料結構中的資料進行某種操作。它用來...
MySQL調優之索引的資料結構B 樹
為什麼用 b 樹 innodb 和 myisam 的區別 參考資料 mysql調優之效能監控 mysql調優系列之執行過程 雜湊表 完全平衡二叉樹 b樹 b 樹都可以優化查詢,為何mysql使用b 樹?利用hash儲存的話需要將所有的資料檔案新增到記憶體,比較耗費記憶體空間 如果所有的查詢都是等值查...