" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章希望大家以后多多支持腳本之家!

  • 詳解Redis中的BigKey如何發(fā)現(xiàn)和處理

    詳解Redis中的BigKey如何發(fā)現(xiàn)和處理

    這篇文章主要為大家詳細(xì)介紹了Redis中的BigKey如何發(fā)現(xiàn)和處理,文中給大家詳細(xì)講解了BigKey危害和如何解決這些問(wèn)題,文章通過(guò)代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 基于Redis+Lua腳本實(shí)現(xiàn)分布式限流組件封裝的方法

    基于Redis+Lua腳本實(shí)現(xiàn)分布式限流組件封裝的方法

    這篇文章主要介紹了基于Redis+Lua腳本實(shí)現(xiàn)分布式限流組件封裝,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Redis分析慢查詢操作的實(shí)例教程

    Redis分析慢查詢操作的實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于Redis如何分析慢查詢操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Redis 基礎(chǔ)教程之事務(wù)的使用方法

    Redis 基礎(chǔ)教程之事務(wù)的使用方法

    這篇文章主要介紹了Redis 基礎(chǔ)教程之事務(wù)的使用方法的相關(guān)資料,Redis 事務(wù)可以一次執(zhí)行多個(gè)命令和保證,單獨(dú)的隔離操作和原子操作需要的朋友可以參考下
    2017-08-08
  • Redis?整數(shù)集合的具體使用(intset)

    Redis?整數(shù)集合的具體使用(intset)

    對(duì)于集合,STL?的?set?相信大家都不陌生,本文主要介紹了整數(shù)集合,又稱為?intset,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 淺談Redis的異步機(jī)制

    淺談Redis的異步機(jī)制

    命令操作、系統(tǒng)配置、關(guān)鍵機(jī)制、硬件配置等會(huì)影響 Redis 的性能,還要提前準(zhǔn)備好應(yīng)對(duì)異常的方案,本文主要介紹了Redis的異步機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例

    Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例

    本文主要介紹了Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Web-ssrfme:redis 未授權(quán)訪問(wèn)攻擊的問(wèn)題解決

    Web-ssrfme:redis 未授權(quán)訪問(wèn)攻擊的問(wèn)題解決

    本文主要介紹了Web-ssrfme:redis 未授權(quán)訪問(wèn)攻擊的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Redis集群新增、刪除節(jié)點(diǎn)以及動(dòng)態(tài)增加內(nèi)存的方法

    Redis集群新增、刪除節(jié)點(diǎn)以及動(dòng)態(tài)增加內(nèi)存的方法

    本文主要介紹了Redis集群新增、刪除節(jié)點(diǎn)以及動(dòng)態(tài)增加內(nèi)存的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 最新評(píng)論

    思茅市| 桂平市| 白朗县| 九寨沟县| 宁强县| 诸暨市| 巫溪县| 温泉县| 土默特左旗| 金川县| 西安市| 柳河县| 宜丰县| 修水县| 东乌珠穆沁旗| 阿坝| 民乐县| 通榆县| 秀山| 乌海市| 连山| 石家庄市| 正定县| 噶尔县| 政和县| 连山| 荆州市| 和顺县| 北海市| 滦南县| 高唐县| 牟定县| 综艺| 通城县| 行唐县| 大方县| 武强县| 博爱县| 蓬溪县| 九龙城区| 都匀市|