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

Redis如何從海量key中查詢出某一固定前綴的key

 更新時間:2025年07月16日 08:52:20   作者:一縷純氧  
當Redis存儲一億key時,使用keys指令可能因返回全部key導(dǎo)致服務(wù)器卡頓,而scan指令通過游標分批獲取,避免阻塞,適合生產(chǎn)環(huán)境,需注意重復(fù)結(jié)果可用hashSet去重,count參數(shù)可調(diào)整返回數(shù)量但非強制

常問問題

假如redis里有一億個key,其中有10萬個key是以某個固定的已知的前綴開頭的,如何將他們?nèi)空页鰜恚?/p>

留意細節(jié)

摸清數(shù)據(jù)規(guī)模(數(shù)據(jù)量是多大?根據(jù)實際場景去作答),問清楚邊界。

給出答案

1.用keys指令找出指定模式的key列表

  • 缺點:一次性需要返回所有的key,如果可以的數(shù)量過大,會使服務(wù)器卡頓,對于內(nèi)存的消耗和redis服務(wù)器都是隱患。

2.用scan指令

  • 無阻塞地提取出指定前綴的key列表,scan每次執(zhí)行都只會返回少量元素,所以可以用于生產(chǎn)環(huán)境,不會出現(xiàn)像keys命令帶來的可能會阻塞服務(wù)器問題。

SCAN cursor [MATCH pattern] [COUNT count]

1.scan指令是一個基于游標的迭代器

命令每次被調(diào)用都需要上一次調(diào)用返回的游標作為該次調(diào)用的游標參數(shù)(cursor),以此來延續(xù)之前的迭代過程。

2.當scan指令的游標參數(shù)cursor設(shè)置為0時

  • 服務(wù)器將開始一次新的迭代,而當服務(wù)器向用戶返回值為0的游標時,就表示迭代已經(jīng)結(jié)束。
  • 0作為游標開始新一次的迭代,一直調(diào)用游標指令直到游標返回0,我們稱這個過程為一次完整的遍歷。

3.scan增量式迭代

  • 并不保證每次執(zhí)行都會返回某個給定數(shù)量的元素,甚至可能會返回0個元素,但只要命令返回的游標不是0,應(yīng)用程序就不應(yīng)該將程序視為結(jié)束。
  • 命令返回的元素數(shù)量總是符合一定規(guī)則的,對于一個大數(shù)據(jù)集來說,增量式迭代命令每次最多可能會返回數(shù)十個元素,而對于一個足夠小的數(shù)據(jù)級來說,可能會一次迭代返回所有的key。
  • 類似于keys指令,scan可以通過給定match參數(shù)的方式,傳入要查找鍵位的模糊匹配方式,讓命令只返回和給定的模式相匹配的元素。

4.對于增量式迭代命令

  • 是沒有辦法保證每次迭代所返回的元素數(shù)量的,可以使用count選項,對命令的行為進行一定程度上的調(diào)整。
  • count選項的作用,就是讓用戶告知迭代命令,在每次迭代中應(yīng)該從數(shù)據(jù)集里返回多少元素。
  • 使用count選項對于增量式迭代命令相當于是一種提示,大多數(shù)情況下這種提示都是比較有效的控制了返回的數(shù)量的,但count選項并不能嚴格地控制返回的數(shù)量,只能是一個大致的約束,并非每次迭代都會返回count數(shù)量的元素,用戶可以在每次迭代根據(jù)自己的需要隨意改變count值,只要將上次迭代返回的游標用在下次迭代即可。
127.0.0.1:6379> scan 0 match k1* count 10
1) "11009983"
2) 1) "k15183267"
   2) "k18983203"
   3) "k14348902"
127.0.0.1:6379> scan 11009983 match k1* count 10
1)"23902345"
2) 1) "k17203743"
   2) "k18324732"
   3) "k11028343"
   4) "k11143424"
   5) "k12304823"
127.0.0.1:6379> scan 23902345 match k1* count 10
1) "24080390"
2) 1) "k12438294"
   2) "k18392744"
   3) "k14320420"
   4) "k11043243"

使用SCAN指令獲取到的結(jié)果可能會重復(fù),后端可以用hashSet收集結(jié)果,以達到去重的效果。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis介紹與使用一文搞懂

    Redis介紹與使用一文搞懂

    文章主要介紹了Redis的基本概念、應(yīng)用場景、數(shù)據(jù)模型、內(nèi)存存儲機制、高性能特點、安裝與配置、常用命令、持久化與備份、高級特性等內(nèi)容,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • 使用Redis控制表單重復(fù)提交和控制接口訪問頻率方式

    使用Redis控制表單重復(fù)提交和控制接口訪問頻率方式

    這篇文章主要介紹了使用Redis控制表單重復(fù)提交和控制接口訪問頻率方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Redis中Zset類型常用命令的實現(xiàn)

    Redis中Zset類型常用命令的實現(xiàn)

    Zset是Redis的一種有序集合數(shù)據(jù)類型,Zset通過壓縮列表和跳躍表兩種底層編碼方式支持小數(shù)據(jù)集和大數(shù)據(jù)集,支持多種操作,包括添加、查詢、刪除元素以及集合運算等,具有不同的時間復(fù)雜度,感興趣的可以了解一下
    2024-10-10
  • React Antd Cascader組件地區(qū)選擇方式

    React Antd Cascader組件地區(qū)選擇方式

    文章介紹了在表單中實現(xiàn)地區(qū)選擇功能,使用Cascader組件動態(tài)加載數(shù)據(jù),需通過loadData和遞歸處理實現(xiàn)增刪改查,存儲和回顯需完整id數(shù)組以支持多級地區(qū)展示,強調(diào)后端設(shè)計對數(shù)據(jù)關(guān)聯(lián)(id/pid)的重要性
    2025-08-08
  • Redis五大基本數(shù)據(jù)類型及對應(yīng)使用場景總結(jié)

    Redis五大基本數(shù)據(jù)類型及對應(yīng)使用場景總結(jié)

    Redis有五種基本數(shù)據(jù)類型,分別是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted?Set),這些基本數(shù)據(jù)類型使得Redis具備了豐富的數(shù)據(jù)結(jié)構(gòu)和功能,適用于各種不同的應(yīng)用場景,本文就給大家詳細的介紹一下這五大類型
    2023-08-08
  • Redis存儲的列表分頁和檢索的實現(xiàn)方法

    Redis存儲的列表分頁和檢索的實現(xiàn)方法

    在 Redis 中,列表(List)是一種有序的數(shù)據(jù)結(jié)構(gòu),通常用于存儲一系列元素,由于列表是有序的,可以通過索引來訪問元素,因此可以很方便地實現(xiàn)分頁和檢索功能,以下是 Redis 列表的分頁和檢索的實現(xiàn)方法,需要的朋友可以參考下
    2025-02-02
  • Redis實現(xiàn)未讀消息計數(shù)的示例代碼

    Redis實現(xiàn)未讀消息計數(shù)的示例代碼

    本文介紹了合伙人系統(tǒng)中產(chǎn)品分配流程及其未讀計數(shù)的實現(xiàn)方案,通過Redis工具類,實現(xiàn)了未讀計數(shù)的新增、查詢和重置功能,感興趣的可以了解一下
    2025-12-12
  • redis主從復(fù)制原理的深入講解

    redis主從復(fù)制原理的深入講解

    這篇文章主要給大家介紹了關(guān)于redis主從復(fù)制原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Redis中哨兵機制和集群的區(qū)別及說明

    Redis中哨兵機制和集群的區(qū)別及說明

    Redis哨兵通過主從復(fù)制實現(xiàn)高可用,適用于中小規(guī)模數(shù)據(jù);集群采用分布式分片,支持動態(tài)擴展,適合大規(guī)模數(shù)據(jù),哨兵管理簡單但擴展性弱,集群性能更強但架構(gòu)復(fù)雜,根據(jù)數(shù)據(jù)量和擴展需求選擇
    2025-08-08
  • SpringBoot 開啟Redis緩存及使用方法

    SpringBoot 開啟Redis緩存及使用方法

    用redis做緩存,是因為redis有著很優(yōu)秀的讀寫能力,在集群下可以保證數(shù)據(jù)的高可用,那么今天通過本文給大家講解下SpringBoot使用Redis的緩存的方法,感興趣的朋友一起看看吧
    2021-08-08

最新評論

维西| 邻水| 盐城市| 镇巴县| 花莲市| 平山县| 大理市| 靖江市| 礼泉县| 团风县| 周至县| 道真| 禹城市| 雷山县| 郑州市| 克什克腾旗| 万州区| 郑州市| 临澧县| 平利县| 霍州市| 凭祥市| 印江| 囊谦县| 华阴市| 涪陵区| 新泰市| 浪卡子县| 靖边县| 万盛区| 法库县| 中西区| 宜都市| 庐江县| 长岛县| 石楼县| 新平| 屯昌县| 潮安县| 通州市| 尼木县|