" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1、前言

有時(shí)候我們需要知道線上的redis的使用情況,尤其需要知道一些前綴的key值,讓我們?cè)趺慈ゲ榭茨??今天給大家分享一個(gè)小知識(shí)點(diǎn)!

2、事故產(chǎn)生

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

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

分析原因

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

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

解決方案

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

我們看一下scan的特點(diǎn)

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

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é)果可能會(huì)有重復(fù),需要客戶端去重復(fù),這點(diǎn)非常重要;

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

一、scan命令格式

SCAN cursor [MATCH pattern] [COUNT count]

二、命令解釋

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

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

SCAN命令返回的是一個(gè)游標(biāo),從0開(kāi)始遍歷,到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開(kāi)始遍歷,返回了游標(biāo)6,又返回了數(shù)據(jù),繼續(xù)scan遍歷,就要從6開(kāi)始

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é)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)?lái)一篇淺談redis在項(xiàng)目中的應(yīng)用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Redis實(shí)現(xiàn)多人多聊天室功能

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

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

    redis list類(lèi)型命令的實(shí)現(xiàn)

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

    Redis GEO地理信息定位功能

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

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

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

最新評(píng)論