【Redis】熱點key問題,的原因和處理,一致性哈希,刪除大key的方法

熱點 Key 指單個 Key 被高并發訪問(如爆款商品),導致 Redis 壓力驟增。解決方案應針對 “單個 Key 高并發”:

  • 分片緩存:將熱點 Key 分散到不同 Redis 節點(如按一致性哈希算法分片)。
  • 本地緩存:在應用層緩存熱點數據(如 Caffeine),減少 Redis 壓力。
  • 增加緩存副本:為熱點數據增加緩存副本,將熱點數據復制到多個緩存節點上,分散訪問壓力。(例如,使用 Redis 的主從復制,將熱點數據儲在多個從節點上,分散讀請求。)

熱點 Key 的產生原因(除 Redis 宕機外)

  • 熱點 Key 的核心原因是突發流量或熱門事件,例如:
  • 突發活動:秒殺、直播帶貨導致某個商品 Key 被高頻訪問。
  • 熱點事件:微博熱搜話題對應的緩存 Key。
  • 數據傾斜:數據庫中某類數據天然訪問量高(如高頻查詢的用戶 ID)。

一致性hash了解過嗎?

一致性哈希是一種用于分布式系統中的負載均衡算法,它的核心目標是:在節點數量發生變化時,盡量減少數據遷移,同時保持數據的均勻分布。

  • 主要目的是將數據均勻分布到多個節點上,并在節點增減時盡可能減少數據的重新分配
核心原理
  • 哈希環(Hash Ring)

    • 一致性哈希把整個哈希值空間組織成一個環狀結構(0 ~ 232 - 1)。
  • 節點映射

    • 每個節點通過哈希函數(如 FNV、MD5 等)被映射到環上的一個點。
  • 數據映射

    • 數據項(key)同樣通過哈希函數映射到環上。
    • 每個數據項存儲在順時針方向遇到的第一個節點上。

節點變動對數據影響最小
  • 增加節點

    • 新節點插入環后,只接管其順時針方向上第一個節點的部分數據,其余數據不受影響。
  • 刪除節點

    • 節點下線后,其數據由順時針方向的下一個節點接管

這保證了在節點動態增減的情況下,只需遷移小部分數據,極大提升了系統的可擴展性與穩定性。


應用場景
  • 分布式緩存(如 Redis Cluster)
  • 負載均衡(如 Nginx+Consistent Hash)
  • 分布式存儲(如 Cassandra、Amazon Dynamo)

刪除大key的方式

  1. 分批刪除:將大key分批刪除,使用SCAN迭代獲取大key中的元素逐個刪除
HSCAN bigkey 0 COUNT 100
HDEL bigkey f1 f2 f3 ...
  1. 異步刪除:利用redis4.0引入的UNLINK代替DEL,在后臺進行刪除,減少阻塞
UNLINK bigkey
  1. 設置過期時間:為大key設置過期時間,等過期后臺自己刪除
EXPIRE bigkey 60
  1. 使用lua腳本:使用lua腳本代替發大量操作減少網絡IO
-- 分批刪除 set 中的成員(每次刪100個)
local members = redis.call('SRANDMEMBER', KEYS[1], 100)
for i=1,#members doredis.call('SREM', KEYS[1], members[i])
end
return #members

https://github.com/0voice

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81777.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過遠程桌面連接Windows實例提示“出現身份驗證錯誤,無法連接到本地安全機構”錯誤怎么辦?

本文介紹通過遠程桌面連接Windows實例提示“出現身份驗證錯誤無法連接到本地安全機構”錯誤的解決方案。 問題現象 通過本地電腦內的遠程桌面連接Windows實例提示“出現身份驗證錯誤,無法連接到本地安全機構”錯誤。 問題原因 導致該問題的可能原因如下&#x…

[python] argparse怎么指定bool類型?

前述 最近在寫腳本的時候想要實現一個if 操作,通過用戶輸入。確定要不要啟用某個語句。 非常自然的就是使用python的argparse包,但是發現了一個陷阱,記錄下。 陷阱 argparse.ArgumentParser() 可以指定輸入類型,我可以設定為bo…

Rust 學習筆記:迭代器

Rust 學習筆記:迭代器 Rust 學習筆記:迭代器Iterator trait 和 next 方法使用迭代器的方法生成其他迭代器的方法使用閉包捕獲它們的環境 Rust 學習筆記:迭代器 在 Rust 中,迭代器負責遍歷每個項的邏輯。迭代器是懶惰的&#xff0…

【深度剖析】義齒定制行業數字化轉型模式創新研究(上篇2:痛點和難點分析)

數字化轉型正在重塑義齒行業的生態格局,但也面臨技術融合與模式變革的深層挑戰。當前,義齒定制行業正處于從傳統手工制造向全流程數字化制造轉型的關鍵階段。3D掃描、CAD/CAM(計算機輔助設計與制造)、3D打印等技術的廣泛應用,顯著提升了義齒制作的精度和效率。傳統石膏模型…

window安裝nginx

步驟1:下載Nginx for Windows? 訪問Nginx官網下載頁面:https://nginx.org/en/download.html 在??Stable version??(穩定版)下找到Windows版本,點擊下載.zip文件(如 nginx-1.28.0.zip) 步…

氣象算法工程師學習路徑

目錄 🌤? 氣象學與數值預報基礎課程🤖 氣象人工智能與數據分析課程📘 進階與實戰課程推薦🧭 學習建議與路徑規劃 如果希望成為一名氣象算法工程師,并尋找深入淺出、理論與實踐結合的學習資源,以下是為你精…

回調函數的理解

int yuxiangrousi 0; // 全局變量:魚香肉絲(醬油量)// 回調函數:媽媽處理醬油(將醬油加入魚香肉絲) void mother_callback(int new_jiangyou) {yuxiangrousi new_jiangyou; // 把醬油放進魚香肉絲 }// 孩…

多部手機連接同一wifi的ip一樣嗎?如何更改ip

通常情況下,多部手機連接同一個WiFi時,它們的IP地址是各不相同的(在局域網內)。但是,從互聯網(外網)的角度看,它們共享同一個公網IP地址。讓我詳細解釋一下,并說明如何更…

環境溫度通過H2A.Zub和H3K27me3動態調控擬南芥細胞命運決定

2025年4月22日,中國科學院遺傳與發育生物學研究所肖軍研究組在Developmental Cell在線發表了題為Dynamic control of H2A.Zub and H3K27me3 by ambient temperature during cell fate determination in Arabidopsis的研究論文,本研究綜合運用ChIP-seq、C…

2024 吉林 CCPC

文章目錄 2024 吉林 CCPCL. Recharge(思維、分配)G. Platform Game(模擬)E. Connect Components (排序、思維)D. Parallel Lines 2024 吉林 CCPC 題目鏈接: Dashboard - The 2024 CCPC National Invitational Contest (Changchun) , The 17…

day13 leetcode-hot100-24(鏈表3)

234. 回文鏈表 - 力扣(LeetCode) 1.轉化法 思路 將鏈表轉化為列表進行比較 復習到的知識 arraylist的長度函數:list.size() 具體代碼 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode ne…

Vim文本編輯器快捷鍵用法以及簡單介紹

目錄 vim文本編輯器 簡介: 語法: vim模式介紹: 模式切換: 用法: 編輯模式: 一般模式: 命令模式: vim文本編輯器 簡介: 在命令行界面下,最常用的文本…

從 0 到 1:Spring Boot 與 Spring AI 深度實戰(基于深度求索 DeepSeek)

在人工智能技術與企業級開發深度融合的今天,傳統軟件開發模式與 AI 工程化開發的差異日益顯著。作為 Spring 生態體系中專注于 AI 工程化的核心框架,Spring AI通過標準化集成方案大幅降低 AI 應用開發門檻。本文將以國產大模型代表 ** 深度求索&#xff…

[Windows] 摸魚小工具:隱藏軟件(重制版)

由吾愛大神寫的摸魚工具: 數據存放路徑為C:\Users\用戶名\AppData\Local\HideSoft,如果不想用時,刪除軟件及此路徑下的HideSoft文件夾。如添加了開機啟動,刪除啟動菜單文件夾的快捷方式即可,或者刪除前在軟件中取消設置…

C++ 判斷文件的編碼類型

大多數文本編輯器,都會在文本文件的頭部插入一部分特殊的字節,用于輔助文本編輯器來判斷該文件的字符集編碼類型。 如:記事本 目前支持的字符集類型,通常為三種: Unicode、UTF8、UnicodeBIG、CP_ACP(默認…

時間序列噪聲模型分析軟件推薦與使用經驗

最近在論文大修2024年投稿的一篇文章,大修了2輪,最后一次還是重新投稿,其中有一個問題一直被審稿人懟,他認為我計算時間序列的趨勢的時候,沒有考慮時間的相關性,即對噪聲模型的估計不合理,會影響…

【redis實戰篇】第六天

摘要: 本文介紹了基于Redis的秒殺系統優化方案,主要包含兩部分:1)通過Lua腳本校驗用戶秒殺資格,結合Java異步處理訂單提升性能;2)使用Redis Stream實現消息隊列處理訂單。方案采用Lua腳本保證庫…

【Java Web】速通HTML

參考筆記: JavaWeb 速通HTML_java html頁面-CSDN博客 目錄 一、前言 1.網頁組成 1 結構 2 表現 3 行為 2.HTML入門 1 基本介紹 2 基本結構 3. HTML標簽 1 基本說明 2 注意事項 4. HTML概念名詞解釋 二、HTML常用標簽匯總 + 案例演示 1. 字體標簽 font (1)定義 (2)案例 2…

Oracle/openGauss中,DATE/TIMESTAMP與數字日期/字符日期比較

ORACLE 運行環境 openGauss 運行環境 0、前置知識 ORACLE:DUMP()函數用于返回指定表達式的數據類型、字節長度及內部存儲表示的詳細信息 SELECT DUMP(123) FROM DUAL; -- Typ2 Len3: 194,2,24 SELECT DUMP(123) FROM DUAL;-- Typ96 Len3: 49,50,51 -- ASCII值&am…

[學習]C++ 模板探討(代碼示例)

C 模板探討 文章目錄 C 模板探討一、模板基礎概念二、函數模板三、類模板1. 類模板的定義與使用2. 成員函數模板3. 類模板的靜態成員與繼承 四、模板進階特性1. 非類型模板參數2. 可變參數模板(Variadic Templates)3. 模板元編程(TMP&#xf…