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

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

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

常問問題

假如redis里有一億個key,其中有10萬個key是以某個固定的已知的前綴開頭的,如何將他們全部找出來?

留意細節(jié)

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

給出答案

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

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

2.用scan指令

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

SCAN cursor [MATCH pattern] [COUNT count]

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

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

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

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

3.scan增量式迭代

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

4.對于增量式迭代命令

  • 是沒有辦法保證每次迭代所返回的元素數(shù)量的,可以使用count選項,對命令的行為進行一定程度上的調整
  • count選項的作用,就是讓用戶告知迭代命令,在每次迭代中應該從數(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指令獲取到的結果可能會重復,后端可以用hashSet收集結果,以達到去重的效果。

總結

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

相關文章

  • 安裝redis(windows和Ubuntu)詳解

    安裝redis(windows和Ubuntu)詳解

    這篇文章主要介紹了Redis在Ubuntu和Windows下的安裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • springboot整合使用云服務器上的Redis方法

    springboot整合使用云服務器上的Redis方法

    這篇文章主要介紹了springboot整合使用云服務器上的Redis,整合步驟通過導入依賴,配置yml文件,注入redisTemplate結合實例代碼給大家介紹的非常詳細,文中給大家分享了可能遇到的坑,感興趣的朋友跟隨小編一起看看吧
    2022-09-09
  • Redis實現(xiàn)用戶簽到的示例代碼

    Redis實現(xiàn)用戶簽到的示例代碼

    Redis的位圖可以高效實現(xiàn)用戶簽到功能,每個bit位對應一個簽到狀態(tài),節(jié)省存儲空間,利用SETBIT、GETBIT等命令操作簽到數(shù)據(jù),可統(tǒng)計連續(xù)簽到天數(shù)和本月簽到情況,感興趣的可以了解一下
    2024-09-09
  • 解析高可用Redis服務架構分析與搭建方案

    解析高可用Redis服務架構分析與搭建方案

    我們按照由簡至繁的步驟,搭建一個最小型的高可用的Redis服務。 本文通過四種方案給大家介紹包含每種方案的優(yōu)缺點及詳細解說,具體內容詳情跟隨小編一起看看吧
    2021-06-06
  • React中immutable的使用

    React中immutable的使用

    這篇文章主要介紹了React中immutable的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Redis列表類型的常用命令小結

    Redis列表類型的常用命令小結

    這篇文章給大家整理了在操作Redis列表類型中的常用命令,文章總結的很全面,對大家學習Redis具有一定的參考借鑒價值,下面來一起看看吧。
    2016-09-09
  • Redis分布式鎖解決秒殺超賣問題

    Redis分布式鎖解決秒殺超賣問題

    本文主要介紹了Redis分布式鎖解決秒殺超賣問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Redis中的String類型及使用Redis解決訂單秒殺超賣問題

    Redis中的String類型及使用Redis解決訂單秒殺超賣問題

    這篇文章主要介紹了Redis中的String類型及使用Redis解決訂單秒殺超賣問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • ELK配置轉存redis緩存采集nginx訪問日志的操作方法

    ELK配置轉存redis緩存采集nginx訪問日志的操作方法

    本文介紹了在服務器上部署MySQL及如何啟動MySQL服務,并詳細說明了如何查找安裝軟件的日志文件位置,通過使用rpm命令查詢MySQL服務的日志文件位置,以及通過編輯Logstash配置文件來添加MySQL日志信息,感興趣的朋友一起看看吧
    2024-11-11
  • Redis過期鍵與內存淘汰策略深入分析講解

    Redis過期鍵與內存淘汰策略深入分析講解

    因為redis數(shù)據(jù)是基于內存的,然而內存是非常寶貴的資源,然后我們就會對一些不常用或者只用一次的數(shù)據(jù)進行存活時間設置,這樣才能提高內存的使用效率,下面這篇文章主要給大家介紹了關于Redis中過期鍵與內存淘汰策略,需要的朋友可以參考下
    2022-11-11

最新評論