Redis List 資料結構的優越感

2021-10-03 00:25:27 字數 1156 閱讀 4208

業務需求:從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儲存的話需要將所有的資料檔案新增到記憶體,比較耗費記憶體空間 如果所有的查詢都是等值查...