一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 在redisCluster中模糊獲取key方式

在redisCluster中模糊獲取key方式

2021-08-16 18:00夜-NULL(zmc) Redis

這篇文章主要介紹了在redisCluster中模糊獲取key方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在一個集群中,顯然不能通過keys方法通過pattern直接獲取key的集合;

鑒于這種問題,產生了兩種思路,如下:

方案1:

已知相同的tag的kv會在一個節點上,所以只要key帶有相同的hashtag,則會在一個節點上,所以只要掃描該節點即可,這樣就將集群轉化為了單點。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@requestmapping(value = "/ceshi", method = requestmethod.get)
    @responsebody
    public void rediskeys() {
        /**
         * 模糊匹配
         * @param pattern key的正則表達式
         * @param count 每次掃描多少條記錄,值越大消耗的時間越短,但會影響redis性能。建議設為一千到一萬
         * @return 匹配的key集合
         */
        try{
            jediscluster.getclusternodes();
            scanparams scanparams = new scanparams();
            scanparams.match("{operatingsystem}*");
            scanparams.count(1000);
            scanresult<string> result = jediscluster.scan("0", scanparams);
            list<string> keylist = result.getresult();
            system.out.println("keylist======="+keylist);
        }finally{
        }
    }
?
1
2
//scanparams.match("*{zmc}*");//success
//scanparams.match("zmc_text:{zmc}*");//success

上述match方法中:括號中的參數也可以按照如上方式編寫;

其關鍵在于 key 上傳到redis中,命名方式里面,必須含有 {};

并且{}前面、后面有無參數必須指定;若key為 zmc_text: {zmc}:1

?
1
scanparams.match("{zmc}*");查不出結果

方案2:

獲取所有的節點,分別掃描每個節點,根據pattern獲取節點中的key,整合起來即可;

注意:cluster模式執行多key操作的時候,這些key必須在同一個slot上,不然會報jedisdataexception異常;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@requestmapping(value = "/ceshi3", method = requestmethod.get)
@responsebody
public void rediskeys() {
    string rediskeystartwith="ad:ads:id:";
    try {
        map<string, jedispool> clusternodes = jediscluster.getclusternodes();
        for (map.entry<string, jedispool> entry : clusternodes.entryset()) {
            jedis jedis = entry.getvalue().getresource();
            // 判斷非從節點(因為若主從復制,從節點會跟隨主節點的變化而變化)
            if (!jedis.info("replication").contains("role:slave")) {
                set<string> keys = jedis.keys(rediskeystartwith + "*");
                if (keys.size() > 0) {
                    map<integer, list<string>> map = new hashmap<>();
                    for (string key : keys) {
                        // cluster模式執行多key操作的時候,這些key必須在同一個slot上,不然會報:jedisdataexception:
                        // crossslot keys in request don't hash to the same slot
                        int slot = jedisclustercrc16.getslot(key);
                        // 按slot將key分組,相同slot的key一起提交
                        if (map.containskey(slot)) {
                            map.get(slot).add(key);
                        } else {
                            map.put(slot, lists.newarraylist(key));
                        }
                    }
                    for (map.entry<integer, list<string>> integerlistentry : map.entryset()) {
                        system.out.println("integerlistentry="+integerlistentry);
                        //jedis.del(integerlistentry.getvalue().toarray(new string[integerlistentry.getvalue().size()]));
                    }
                }
            }
        }
        logger.info("success rediskeys:{}", rediskeystartwith);
    } finally {
    }
}

redis集群獲取所有的key

redis單機查詢所有key命令

keys *

查詢結果示例:

在redisCluster中模糊獲取key方式

redis集群查所有key命令:

如果使用keys *,那么查詢的仍舊是本服務器的所有key,不是集群的(結合本圖結果以及參考上圖,都是插入后查詢,無心插入或者刪除key)

正確的命令是

./redis-cli -c --cluster call 192.168.168.161:7001 keys \*

注意:

1.不能去掉\;

2.換成你redis集群的一個節點的ip和端口

3.如果集群有密碼加上參數 -a password(你的redis集群密碼) 如本地測試環境查詢結果:

在redisCluster中模糊獲取key方式

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_33999844/article/details/81381607

延伸 · 閱讀

精彩推薦
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
主站蜘蛛池模板: 国产91素人搭讪系列天堂 | 波多野结衣一区 | 国产伦精品一区二区 | 亚洲乱码尤物193yw在线播放 | 青青青国产手机在线播放 | 青久草视频 | 99精品国产综合久久久久 | 日本最大的黄色网站 | 青春草在线观看视频 | 性欧美黑人巨大喷潮xxoo | 国产午夜精品一区二区 | 99热久久这里只有精品23 | 欧美久久天天综合香蕉伊 | 亚洲精品国产精品麻豆99 | 午夜深情在线观看免费 | 日本高清在线看免费观看 | 精品久久久久久亚洲精品 | 欧美一区二区不卡视频 | 污污免费 | 日韩精品视频在线播放 | 久久亚洲电影www电影网 | www.俺去| 日韩先锋 | 236zz宅宅最新伦理 | spy2wc48美女撒尿 | 精品无人区乱码1区2区3区在线 | 亚洲网站大全 | 国产亚洲欧美在线中文bt天堂网 | 国产精品美女久久久久 | 体检小说 | 精品一区二区三区在线播放 | 视频在线91| 亚洲精品AV无码永久无码 | 成年人在线观看视频免费 | 亚洲国产成人久久综合区 | 果冻传媒在线播放观看w | 亚洲国产中文字幕在线视频综合 | 婷婷久久综合 | 99视频久久| a一级一级| 欧美一区二区三区免费观看视频 |