" />

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

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

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

1、前言

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

2、事故產生

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

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

分析原因

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

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

解決方案

那我們如何去遍歷大數(shù)據量呢?這個也是面試經常問的。我們可以采用redis的另一個命令scan。

我們看一下scan的特點

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

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

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

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

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

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

一、scan命令格式

SCAN cursor [MATCH pattern] [COUNT count]

二、命令解釋

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

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

SCAN命令返回的是一個游標,從0開始遍歷,到0結束遍歷

三、舉例

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開始遍歷,返回了游標6,又返回了數(shù)據,繼續(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、總結

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

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

相關文章

  • 使用Redis有序集合實現(xiàn)IP歸屬地查詢詳解

    使用Redis有序集合實現(xiàn)IP歸屬地查詢詳解

    這篇文章主要介紹了使用Redis有序集合實現(xiàn)IP歸屬地查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解Redis中的BigKey如何發(fā)現(xiàn)和處理

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

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

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

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

    Redis分析慢查詢操作的實例教程

    這篇文章主要給大家介紹了關于Redis如何分析慢查詢操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • Redis 基礎教程之事務的使用方法

    Redis 基礎教程之事務的使用方法

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

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

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

    淺談Redis的異步機制

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

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

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

    Web-ssrfme:redis 未授權訪問攻擊的問題解決

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

    Redis集群新增、刪除節(jié)點以及動態(tài)增加內存的方法

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

最新評論

通渭县| 赫章县| 镇赉县| 青川县| 松溪县| 乌恰县| 五指山市| 抚宁县| 丰城市| 岳阳县| 黄梅县| 于田县| 图木舒克市| 竹溪县| 南漳县| 达拉特旗| 怀集县| 广安市| 博野县| 阳春市| 乌兰察布市| 台山市| 潞西市| 扬州市| 顺昌县| 临汾市| 永登县| 临沭县| 洛南县| 喀喇| 博白县| 普兰县| 招远市| 松潘县| 土默特右旗| 北票市| 安陆市| 遂昌县| 增城市| 云浮市| 疏勒县|