一、順豐高級開發工程師在線執行了 Redis 危險命令導致某公司損失 400 萬
一個命令損失數百萬,這,需要賠償嗎?
程式碼不規範,同事兩行淚,擼碼需謹慎!
處於好奇考慮,我來測試一下,這到底是什麼問題?
二、測試一下1000萬資料的效能
1、寫腳本檔案
寫入1000萬資料。
for((i=1;i<=10000000;i++)); do echo "set k$i 哪吒编程$i" >> /tmp/test1.txt;done;
透過/tmp/test1.txt
查看一下是否寫入成功。
2、寫入Redis1000萬資料
cat /tmp/test1.txt | redis-cli -a 111111 --pipe
3、透過keys * 查看1000萬資料
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]
四、拒絕bigkey
1、阿里雲Redis開發規格
阿里雲Redis開發規範中明確規定「拒絕bigkey(防止網路卡流量、慢查詢)」
。
String類型控制在10KB以內,hash、list、set、zset元素個數不要超過5000。
2、bigkey出現時如何刪除?
String類型的用del刪除。
其它型別使用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會造成哪些問題?
記憶體不均,叢集遷移困難;
#逾時刪除,阻塞執行緒;
網路流量阻塞;
4、如何發現bigkey?
(1)透過redis-cli --bigkeys
找到。
(2)計算每個鍵值的位元組數,透過memory usage key找出
以上是Redis bigkeys指令會阻塞問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

SublimeText3漢化版
中文版,非常好用

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