" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例

 更新時間:2025年04月21日 09:10:12   作者:湯姆yu  
本文主要介紹了 Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、前言

有時候我們需要知道線上的redis的使用情況,尤其需要知道一些前綴的key值,讓我們怎么去查看呢?今天給大家分享一個小知識點!

2、事故產(chǎn)生

因為我們的用戶token緩存是采用了【user_token:userid】格式的key,保存用戶的token的值。我們運維為了幫助開發(fā)小伙伴們查一下線上現(xiàn)在有多少登錄用戶。

直接用了 keys user_token 方式進(jìn)行查詢,事故就此發(fā)生了。導(dǎo)致redis不可用,假死。

分析原因

我們線上的登錄用戶有幾百萬,數(shù)據(jù)量比較多;keys算法是遍歷算法,復(fù)雜度是O(n),也就是數(shù)據(jù)越多,時間復(fù)雜度越高。

數(shù)據(jù)量達(dá)到幾百萬,keys這個指令就會導(dǎo)致 Redis 服務(wù)卡頓,因為 Redis 是單線程程序,順序執(zhí)行所有指令,其它指令必須等到當(dāng)前的 keys 指令執(zhí)行完了才可以繼續(xù)。

解決方案

那我們?nèi)绾稳ケ闅v大數(shù)據(jù)量呢?這個也是面試經(jīng)常問的。我們可以采用redis的另一個命令scan。

我們看一下scan的特點

1、復(fù)雜度雖然也是 O(n),但是它是通過游標(biāo)分步進(jìn)行的,不會阻塞線程

2、提供 count 參數(shù),不是結(jié)果數(shù)量,是redis單次遍歷字典槽位數(shù)量(約等于)

3、同 keys 一樣,它也提供模式匹配功能;

4、服務(wù)器不需要為游標(biāo)保存狀態(tài),游標(biāo)的唯一狀態(tài)就是 scan 返回給客戶端的游標(biāo)整數(shù);

5、返回的結(jié)果可能會有重復(fù),需要客戶端去重復(fù),這點非常重要;

6、單次返回的結(jié)果是空的并不意味著遍歷結(jié)束,而要看返回的游標(biāo)值是否為零

一、scan命令格式

SCAN cursor [MATCH pattern] [COUNT count]

二、命令解釋

scan 游標(biāo) MATCH <返回和給定模式相匹配的元素> count 每次迭代所返回的元素數(shù)量

SCAN命令是增量的循環(huán),每次調(diào)用只會返回一小部分的元素。所以不會讓redis假死

SCAN命令返回的是一個游標(biāo),從0開始遍歷,到0結(jié)束遍歷

三、舉例

redis > scan 0 match user_token* count 5 
 1) "6"
 2) 1) "user_token:1000"
 2) "user_token:1001"
 3) "user_token:1010"
 4) "user_token:2300"
 5) "user_token:1389"

從0開始遍歷,返回了游標(biāo)6,又返回了數(shù)據(jù),繼續(xù)scan遍歷,就要從6開始

redis > scan 6 match user_token* count 5 
 1) "10"
 2) 1) "user_token:3100"
 2) "user_token:1201"
 3) "user_token:1410"
 4) "user_token:5300"
 5) "user_token:3389"

3、總結(jié)

這個是面試經(jīng)常會問到的,也是我們小伙伴在工作的過程經(jīng)常用的,一般小公司,不會有什么問題,但數(shù)據(jù)量多的時候,你的操作方式不對,你的績效就會被扣哦,哈哈。

到此這篇關(guān)于 Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例的文章就介紹到這了,更多相關(guān) Redis遍歷海量數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis與mongodb的區(qū)別總結(jié)

    redis與mongodb的區(qū)別總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于redis與mongodb的區(qū)別的相關(guān)知識點內(nèi)容,有需要的朋友們參考下。
    2019-06-06
  • Redis的使用模式之計數(shù)器模式實例

    Redis的使用模式之計數(shù)器模式實例

    這篇文章主要介紹了Redis的使用模式之計數(shù)器模式實例,本文講解了匯總計數(shù)器、按時間匯總的計數(shù)器、速度控制、使用 Hash 數(shù)據(jù)類型維護(hù)大量計數(shù)器等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 使用Redis實現(xiàn)實時排行榜功能

    使用Redis實現(xiàn)實時排行榜功能

    排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現(xiàn)排行榜是又好又快的選擇。接下來通過本文給大家介紹使用Redis實現(xiàn)實時排行榜功能,需要的朋友可以參考下
    2021-07-07
  • Redis 內(nèi)存碎片原因及清理

    Redis 內(nèi)存碎片原因及清理

    內(nèi)存碎片是指在內(nèi)存分配的時候,產(chǎn)生的不能重復(fù)利用的空間,本文主要介紹了Redis 內(nèi)存碎片原因及清理,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Redis實戰(zhàn)記錄之限制操作頻率

    Redis實戰(zhàn)記錄之限制操作頻率

    這篇文章主要給大家介紹了關(guān)于Redis實戰(zhàn)記錄之限制操作頻率的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 淺談redis在項目中的應(yīng)用

    淺談redis在項目中的應(yīng)用

    下面小編就為大家?guī)硪黄獪\談redis在項目中的應(yīng)用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Redis實現(xiàn)多人多聊天室功能

    Redis實現(xiàn)多人多聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Redis實現(xiàn)多人多聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • redis list類型命令的實現(xiàn)

    redis list類型命令的實現(xiàn)

    本文主要介紹了redis list類型命令的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Redis GEO地理信息定位功能

    Redis GEO地理信息定位功能

    Redis 提供了GEO地理信息定位功能,地理空間項(經(jīng)度、緯度、名稱),實現(xiàn)查找附近的人、上班打卡、自行車租賃、搖一搖等相關(guān)與地理位置信息的功能,這篇文章主要介紹了Redis GEO地理信息定位功能,需要的朋友可以參考下
    2023-12-12
  • 使用Redis實現(xiàn)秒殺功能的簡單方法

    使用Redis實現(xiàn)秒殺功能的簡單方法

    這篇文章主要給大家介紹了關(guān)于使用Redis實現(xiàn)秒殺功能的簡單方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論