搜尋
首頁資料庫RedisRedis bigkeys指令會阻塞問題如何解決

一、順豐高級開發工程師在線執行了 Redis 危險命令導致某公司損失 400 萬

Redis bigkeys指令會阻塞問題如何解決

一個命令損失數百萬,這,需要賠償嗎?

程式碼不規範,同事兩行淚,擼碼需謹慎!

處於好奇考慮,我來測試一下,這到底是什麼問題?

二、測試一下1000萬資料的效能

1、寫腳本檔案

寫入1000萬資料。

for((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1.txt;done;

透過/tmp/test1.txt查看一下是否寫入成功。

Redis bigkeys指令會阻塞問題如何解決

2、寫入Redis1000萬資料

cat /tmp/test1.txt | redis-cli -a 111111 --pipe

Redis bigkeys指令會阻塞問題如何解決

3、透過keys * 查看1000萬資料

Redis bigkeys指令會阻塞問題如何解決

4、透過設定檔禁止keys *的使用

在redis.conf檔中設定security:

  rename- command keys ""
  rename- command flushdb ""
  rename- command flushall ""

三、使用scan取代keys *

Redis Scan 指令用於迭代資料庫中的資料庫鍵。

SCAN 指令是一個基於遊標的迭代器,每次被呼叫之後, 都會向使用者傳回一個新的遊標, 使用者在下次迭代時需要使用這個新遊標作為SCAN 指令的遊標參數, 以此來延續之前的迭代過程。

SCAN 傳回一個包含兩個元素的數組, 第一個元素是用來進行下一個迭代的新遊標, 而第二個元素則是一個數組, 這個數組包含了所有被迭代的元素。如果新遊標傳回 0 表示迭代已結束。

scan語法:

SCAN cursor [MATCH pattern] [COUNT count]

Redis bigkeys指令會阻塞問題如何解決

四、拒絕bigkey

1、阿里雲Redis開發規格

阿里雲Redis開發規範中明確規定「拒絕bigkey(防止網路卡流量、慢查詢)」

String類型控制在10KB以內,hash、list、set、zset元素個數不要超過5000。

2、bigkey出現時如何刪除?

  1. String類型的用del刪除。

  2. 其它型別使用hscan、sscan、zscan方式漸進式刪除,同時要避免bigkey過期時間自動刪除問題,因為它會造成主執行緒阻塞。

Hash 刪除: hscan hdel

public void delBigHash(String host, int port, String password, String bigHashKey) {
    Jedis jedis = new Jedis(host, port);
    if (password != null && !"".equals(password)) {
        jedis.auth(password);
    }
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams);
        List<Entry<String, String>> entryList = scanResult.getResult();
        if (entryList != null && !entryList.isEmpty()) {
            for (Entry<String, String> entry : entryList) {
                jedis.hdel(bigHashKey, entry.getKey());
            }
        }
        cursor = scanResult.getStringCursor();
    } while (!"0".equals(cursor));
    
    //删除 bigkey
    jedis.del(bigHashKey);
}

3、bigkey會造成哪些問題?

  1. 記憶體不均,叢集遷移困難;

  2. #逾時刪除,阻塞執行緒;

  3. 網路流量阻塞;

4、如何發現bigkey?

(1)透過redis-cli --bigkeys找到。

Redis bigkeys指令會阻塞問題如何解決

(2)計算每個鍵值的位元組數,透過memory usage key找出

Redis bigkeys指令會阻塞問題如何解決

#

以上是Redis bigkeys指令會阻塞問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
redis事務如何處理redis事務如何處理Apr 10, 2025 pm 05:24 PM

Redis 事務確保原子性、一致性、隔離性和持久性(ACID)屬性,其運作方式如下:啟動事務:使用 MULTI 命令。記錄命令:執行任意數量的 Redis 命令。提交或回滾事務:使用 EXEC 命令提交事務,或 DISCARD 命令回滾事務。提交:若無錯誤,EXEC 命令提交事務,所有命令原子地應用到數據庫。回滾:若有錯誤,DISCARD 命令回滾事務,所有命令被丟棄,數據庫狀態保持不變。

redis如何重啟命令redis如何重啟命令Apr 10, 2025 pm 05:21 PM

Redis 可通過平滑重啟和硬重啟兩種方式重啟。平滑重啟不中斷服務,允許客戶端繼續操作;硬重啟立即終止進程,導致客戶端斷開連接並丟失數據。建議在大多數情況下使用平滑重啟,僅在需要修復嚴重錯誤或清理數據時才使用硬重啟。

如何重啟redis集群如何重啟redis集群Apr 10, 2025 pm 05:18 PM

Redis 集群重啟步驟如下:關閉並清除數據和日誌。啟動種子節點。創建新集群。添加剩餘節點。檢查集群狀態。

redis不同實例如何通信redis不同實例如何通信Apr 10, 2025 pm 05:15 PM

Redis 實例間通信有多種機制:Pub/Sub:發布/訂閱模式,允許高效、低延遲的消息傳遞。 Cluster 模式:分佈式部署方式,提供高可用性和容錯性。 Cross-instance Command:允許直接向另一實例發送命令,適用於臨時操作或管理目的。

redis如何實現多線程redis如何實現多線程Apr 10, 2025 pm 05:12 PM

Redis 通過巧妙地結合 Reactor 模式、線程池和內部多線程機制實現了多線程,從而有效利用多核 CPU,提高吞吐量、優化資源利用,保持低延遲並增強擴展性,滿足不同負載需求。

如何看當前redis版本如何看當前redis版本Apr 10, 2025 pm 05:09 PM

本指南提供了兩種方法來判斷當前 Redis 版本:使用 INFO 命令獲取版本號。使用 --version 選項直接顯示版本號。版本號由主版本號、次版本號和修訂號組成,分別表示重大版本更新、功能增強和次要錯誤修復。

redis如何清理所有數據redis如何清理所有數據Apr 10, 2025 pm 05:06 PM

清理所有 Redis 數據的方法:Redis 2.8 及更高版本: FLUSHALL 命令刪除所有鍵值對。 Redis 2.6 及更低版本: 使用 DEL 命令逐個刪除鍵或使用 Redis 客戶端的刪除方法。替代方法: 重啟 Redis 服務(慎用),或使用 Redis 客戶端(如 flushall() 或 flushdb())。

redis如何保存list類型redis如何保存list類型Apr 10, 2025 pm 05:03 PM

Redis 使用一個內部數組存儲 list 類型,數組中每個元素是一個字符串值,代表一個成員。 Redis 還維護一個計數器來跟踪數組中元素數量。當使用 LPUSH 或 RPUSH 命令時,Redis 會更新計數器並在數組中插入或追加新元素。 LRANGE 命令返回給定範圍內的成員,LSET 更新指定索引處的成員,LREM 移除與給定值匹配的成員。 Redis 的 list 類型的保存方式支持高效的插入、刪除和查找操作。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。