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

Redis模糊查詢的幾種實(shí)現(xiàn)方法

 更新時(shí)間:2024年02月18日 10:10:35   作者:IT利刃出鞘  
本文主要介紹了Redis模糊查詢的幾種實(shí)現(xiàn)方法,包括兩種方法KEYS , SCAN,具有一定的參考價(jià)值,感興趣的可以了解一下

簡(jiǎn)介

說(shuō)明

本文介紹Redis模糊查詢的方法。

官網(wǎng)網(wǎng)址

https://redis.io/commands/keys/

https://redis.io/commands/scan/

Redis模糊查詢鍵的方法

Redis提供了兩種模糊查詢鍵的方法:KEYS , SCAN。推薦用SCAN,下邊會(huì)介紹。

模糊查詢的通配符

KEYS和SCAN都支持glob通配符中的三個(gè):*,?,[]:

  • *:通配任意多個(gè)字符
  • ?:通配單個(gè)字符
  • []:通配括號(hào)內(nèi)的某一個(gè)字符

示例

  • h?llo
    • 匹配 hello, hallo and hxllo
  • h*llo
    • 匹配 hllo、heeeello
  • h[ae]llo
    • 匹配 hello、hallo
    • 不匹配 hillo
  • h[^e]llo
    • 匹配 hallo、hbllo…
    • 不匹配 hello
  • h[a-b]llo 匹配 hallo and hbllo

KEYS

說(shuō)明

KEYS指令會(huì)一次性查出所有滿足條件的key(沒(méi)有 offset、limit 參數(shù))。keys 算法是遍歷算法,復(fù)雜度是 O(n)。

數(shù)據(jù)量大時(shí)會(huì)有問(wèn)題:redis 是單線程的,操作都是原子的,如果實(shí)例中有千萬(wàn)級(jí)以上的 key,這個(gè)指令就會(huì)導(dǎo)致 Redis 服務(wù)卡頓,所有讀寫 Redis 的其它的指令都會(huì)被延后甚至?xí)瑫r(shí)報(bào)錯(cuò),可能會(huì)引起緩存雪崩甚至數(shù)據(jù)庫(kù)宕機(jī)。

指令格式

KEYS pattern

pattern即key的正則表達(dá)式。

示例

先寫入一些數(shù)據(jù):

192.168.xxx.21:6379[2]> set hello 1
OK
192.168.xxx.21:6379[2]> set word 1
OK
192.168.xxx.21:6379[2]> set hellp 1
OK
192.168.xxx.21:6379[2]> set ahellog 1
OK
192.168.xxx.21:6379[2]> set hellog 1
OK

 查詢:

192.168.xxx.21:6379[2]> keys *
1) "hello"
2) "hellog"
3) "hellp"
4) "word"
5) "ahellog"
192.168.xxx.21:6379[2]> keys *hell*
1) "hello"
2) "hellog"
3) "hellp"
4) "ahellog"
192.168.xxx.21:6379[2]> keys hell*
1) "hello"
2) "hellog"
3) "hellp"
//知道前面的一些字母,忘記了最后一個(gè)字母
192.168.xxx.21:6379[2]> keys hell?
1) "hello"
2) "hellp"
//知道前面的一些字母,忘記了最后兩個(gè)個(gè)字母
192.168.xxx.21:6379[2]> keys hell??
1) "hellog"
//知道前面四個(gè)字母,最后一個(gè)字母有可能是p t y 其中的一個(gè)
192.168.xxx.21:6379[2]> keys hell[pty]
1) "hellp"
192.168.xxx.21:6379[2]>

SCAN

說(shuō)明

Redis 2.8版本引入,目標(biāo)是解決keys命令的一些問(wèn)題,特點(diǎn):

  • 復(fù)雜度O(n),通過(guò)游標(biāo)分步進(jìn)行的,不會(huì)阻塞線程;
  • 提供 limit 參數(shù),可以設(shè)置每次返回結(jié)果的數(shù)據(jù)量,limit只是對(duì)增量式迭代命令的hint,返回的結(jié)果可多可少;
  • 支持模式匹配功能;
  • 服務(wù)器不需要為游標(biāo)保存狀態(tài),游標(biāo)的唯一狀態(tài)就是 scan 返回給客戶端的游標(biāo)整數(shù);
  • 返回的結(jié)果可能會(huì)有重復(fù),需要客戶端去重復(fù);
  • 無(wú)法提供完整的快照遍歷,即遍歷過(guò)程中若有數(shù)據(jù)修改,改動(dòng)后的數(shù)據(jù)可能遍歷不到;每次返回的數(shù)據(jù)條數(shù)不一定,極度依賴內(nèi)部實(shí)現(xiàn);
  • 單次返回的結(jié)果是空的并不意味著遍歷結(jié)束,而要看返回的游標(biāo)值是否為零

SCAN不是從第一維數(shù)組的第 0 位一直遍歷到末尾,而是采用高位進(jìn)位加法來(lái)遍歷。之所以使用這樣特殊的方式進(jìn)行遍歷,是考慮到字典的擴(kuò)容和縮容時(shí)避免槽位的遍歷重復(fù)和遺漏。

高位進(jìn)位法從左邊加,進(jìn)位往右邊移動(dòng),同普通加法正好相反。但是最終它們都會(huì)遍歷所有的槽位并且沒(méi)有重復(fù)。

指令格式

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

  • cursor
    • 游標(biāo),當(dāng)次遍歷的起始位置
  • pattern
    • 與Keys命令中的patterns相同,支持通配符匹配
  • count
    • 返回?cái)?shù)據(jù)條數(shù)。默認(rèn)為10
    • 如果MATCH選項(xiàng)沒(méi)有指定,則返回條數(shù)可能大于等于這個(gè)數(shù)。因?yàn)镽edis對(duì)全局哈希表的每個(gè)哈希槽進(jìn)行遍歷,一旦發(fā)現(xiàn)拿到的元素個(gè)數(shù)大于了count,就停止遍歷。若一個(gè)桶里有多個(gè)元素,這時(shí)返回的元素就有可能多于count一點(diǎn)了。
  • type:
    • Redis 6.0 支持的參數(shù),指定返回Key的類型,類型可選值與 TYPE命令相同:string, list, set, zset, hash and stream。

第一次遍歷時(shí),cursor 值為 0,然后將返回結(jié)果中第一個(gè)整數(shù)值作為下一次遍歷的 cursor。一直遍歷到返回的 cursor 值為 0 時(shí)結(jié)束。

示例

192.168.xxx.21:6379[2]> keys *
1) "hello"
2) "hellog"
3) "hellp"
4) "word"
5) "ahellog"
192.168.xxx.21:6379[2]> scan 0 match *ll* count 2
1) "5"
2) 1) "hellp"
   2) "hello"
192.168.xxx.21:6379[2]> scan 5 match *ll* count 2
1) "0"
2) 1) "hellog"
   2) "ahellog"
192.168.xxx.21:6379[2]>

到此這篇關(guān)于Redis模糊查詢的幾種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Redis模糊查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Spring Boot 中的 Redis 分布式鎖

    Spring Boot 中的 Redis 分布式鎖

    這篇文章主要介紹了Spring Boot 中的 Redis 分布式鎖及,Redis分布式鎖的優(yōu)化需要的朋友可以參考下
    2023-10-10
  • 完美解決linux上啟動(dòng)redis后配置文件未生效的問(wèn)題

    完美解決linux上啟動(dòng)redis后配置文件未生效的問(wèn)題

    今天小編就為大家分享一篇完美解決linux上啟動(dòng)redis后配置文件未生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 詳解Redis在SpringBoot工程中的綜合應(yīng)用

    詳解Redis在SpringBoot工程中的綜合應(yīng)用

    這篇文章主要介紹了Redis在SpringBoot工程中的綜合應(yīng)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • window手動(dòng)操作清理redis緩存的技巧總結(jié)

    window手動(dòng)操作清理redis緩存的技巧總結(jié)

    在本篇文章中小編給大家分享了關(guān)于window環(huán)境手動(dòng)操作清理redis緩存的方法和技巧,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2019-07-07
  • 淺談Redis變慢的原因及排查方法

    淺談Redis變慢的原因及排查方法

    本文主要介紹了淺談Redis變慢的原因及排查方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解在Redis在Centos7上的安裝部署

    詳解在Redis在Centos7上的安裝部署

    Redis是一種高級(jí)key-value數(shù)據(jù)庫(kù)。這篇文章主要介紹了詳解在Redis在Centos7上的安裝部署,有興趣的可以了解一下。
    2016-12-12
  • Redis?RESP?協(xié)議實(shí)現(xiàn)實(shí)例詳解

    Redis?RESP?協(xié)議實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要為大家介紹了Redis?RESP?協(xié)議實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 淺談Redis緩存擊穿、緩存穿透、緩存雪崩的解決方案

    淺談Redis緩存擊穿、緩存穿透、緩存雪崩的解決方案

    這篇文章主要介紹了淺談Redis緩存擊穿、緩存穿透、緩存雪崩的解決方案,緩存是分布式系統(tǒng)中的重要組件,主要解決在高并發(fā)、大數(shù)據(jù)場(chǎng)景下,熱點(diǎn)數(shù)據(jù)訪問(wèn)的性能問(wèn)題,需要的朋友可以參考下
    2023-03-03
  • redis解決高并發(fā)看門狗策略的實(shí)現(xiàn)

    redis解決高并發(fā)看門狗策略的實(shí)現(xiàn)

    本文主要介紹了redis解決高并發(fā)看門狗策略的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • redis yml配置的用法小結(jié)

    redis yml配置的用法小結(jié)

    RedisYML配置是Redis的一種配置文件格式,,對(duì)Redis的配置進(jìn)行統(tǒng)一管理,本文就來(lái)介紹了redis yml配置的用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02

最新評(píng)論