<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis的keys命令到底有多慢?

          共 1842字,需瀏覽 4分鐘

           ·

          2021-09-27 11:39

          keys命令的用法:

          keys pattern

          查找符合正則匹配的key的列表。掃描對象是Redis服務(wù)中所有的key,想想都很慢對不對?

          同時執(zhí)行keys命令的同時,Redis進程將被阻塞,無法執(zhí)行其他命令,假如超過了哨兵的down-after-milliseconds配置,還會進行主從切換,切換過程中,如果主節(jié)點恢復(fù)正常,還可能出現(xiàn)腦裂等一系列問題。

          所以,生產(chǎn)環(huán)境中,建議直接禁用keys命令。

          Keys命令的替代方案

          • scan掃描,避免阻塞
          • 將需要統(tǒng)計的數(shù)據(jù)放入一個set中 (但是這樣可能出現(xiàn)Big Key問題,一般數(shù)據(jù)量大就不推薦)

          Keys命令在Redis Cluster中是怎樣執(zhí)行的?

          一般來說,keys命令對于集群節(jié)點來說,是不知道路由到哪個節(jié)點的,不像 get命令。在Java的Jedis客戶端的JedisClusterKeyCommands類中,我們看到:

          public Set<byte[]> keys(byte[] pattern) {
           // 在每個節(jié)點執(zhí)行keys命令
           Collection<Set<byte[]>> keysPerNode = connection.getClusterCommandExecutor()
             .executeCommandOnAllNodes((JedisClusterCommandCallback<Set<byte[]>>) client -> client.keys(pattern))
             .resultsAsList();
           // 合并成一個整體后返回
           Set<byte[]> keys = new HashSet<>();
           for (Set<byte[]> keySet : keysPerNode) {
            keys.addAll(keySet);
           }
           return keys;
          }

          我們看到,Jedis是通過在每個節(jié)點上執(zhí)行keys命令,并將結(jié)果合并返回的。

          本文既然將keys命令的慢,那么他到底有多慢呢?

          Keys命令到底有多慢?

          這里主要是給大家一個基本的概念,并不是深入剖析。

          圖片

          這是騰訊云上Redis集群服務(wù)中,慢查詢的日志。我們看到,Keys命令大概執(zhí)行了250ms ~ 300ms。

          圖片

          根據(jù)節(jié)點信息,我們看到,每個節(jié)點存儲了大約153w的key,占用內(nèi)存300M+,平均每個鍵值對占用內(nèi)存0.208KB,合213個字節(jié)。

          根據(jù)我的理解,既然keys命令返回的是key值,而集群中其實有一個結(jié)構(gòu)slots_to_keys 記錄著所有key 的, 這只與key的數(shù)量有關(guān),與Big key的關(guān)系不大。

          按照這種猜想,假如此時Redis節(jié)點占用內(nèi)存為3G,且Key數(shù)量成比例,那么Keys命令執(zhí)行時間因為3s左右,這段時間Redis節(jié)點是阻塞的。

          (感謝閱讀,希望對你所有幫助)

          來源:blog.csdn.net/weixin_37968613/article/details/119065777

          1. 一頓操作后,F(xiàn)GC頻率降低到原來的1/400

          2. 秀!如何搭建一個永久運行的個人服務(wù)器?

          3. @Qualifier的作用和應(yīng)用

          4. TIOBE 9月編程語言排行榜

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點“在看”,關(guān)注公眾號并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人澡人人舔 | 亚州无码高清视频 | 韩国精品一区二区三区 | 乱伦有码乱伦无码 | 天天综合网~91网站永久入口 |