Redis的漸進式hash和緩存時間戳深入學習

前言

關于redis,可由應用維度、系統維度來進行了解。

如下所示:

redis在緩存應用發揮著重要作用,不知道你有沒思考過Redis為什么這么快?

1、純內存訪問

為什么內存訪問比磁盤訪問更快,可參考:

操作系統的內核態和用戶態場景-CSDN博客https://blog.csdn.net/weixin_50055999/article/details/148189950?spm=1011.2415.3001.5331

2、單線程避免上下文切換

關于I/O多路復用,可參考:關于多線程的Redis模型_redis線程模型-CSDN博客https://blog.csdn.net/weixin_50055999/article/details/147977886?spm=1011.2415.3001.5331

3、漸進式ReHash、緩存時間戳


1、漸進式ReHash

1.1、全局哈希表

????????為了實現快速根據鍵訪問到值,Redis使用了一個全局哈希表來存儲所有的鍵值對

一個哈希表其實就是一個數組,數組的每個元素稱為一個哈希桶。

如下圖所示:

1.2、核心流程

1、擴、縮容觸發條件

  • 擴容:當哈希表的負載因子(鍵數量/桶數量)超過閾值(默認 1.0,且無后臺保存任務;或 5.0,若有后臺保存任務)時觸發。
  • 縮容:當負載因子過低(如低于 0.1)時觸發,以節省內存。

如下圖所示:

2、核心機制:

Redis 維護兩個哈希表:ht[0](舊表) ht[1](新表)

1、當觸發 ReHash 時,Redis 創建一個更大的(或更小的)新哈希表 ht[1],并將數據從 ht[0] 逐步遷移到 ht[1]。
2、遷移過程通過 漸進式操作 分攤到每次讀寫操作中,而不是一次性完成
3、Redis 使用一個 rehashidx 指針記錄當前遷移的桶(bucket)位置,逐步將 ht[0] 的桶遷移到 ht[1]。
4、遷移期間,Redis 會同時查詢 ht[0] 和 ht[1],確保數據訪問無中斷。
5、遷移完成后,ht[1] 成為新的主哈希表,ht[0] 被清空并釋放

1.3、示例場景


假設 Redis 存儲了一個包含 100 萬鍵的哈希表:

1、一次性 ReHash:

????????需要一次性將 100 萬鍵重新計算哈希并遷移,可能導致數百毫秒甚至秒級的阻塞。


2、漸進式 ReHash:

????????每次操作遷移 1-10 個鍵,100 萬鍵分攤到多次操作中,可能只需幾秒到幾十秒完成,單次操作延遲僅增加微秒級。

1.4、注意事項


1、ReHash 性能影響:

????????雖然漸進式 ReHash 極大降低了阻塞風險,但在極端高并發場景下,頻繁觸發 ReHash 可能仍會帶來輕微性能波動。


2、監控 ReHash:

????????通過 INFO MEMORY 命令查看 rehashidx 值,判斷是否正在進行 ReHash(非 -1 表示進行中)。


3、優化策略:

????????合理設置初始哈希表大小或負載因子閾值(通過 hash-max-ziplist-entries 或 activerehashing 配置),減少不必要的 ReHash。


2、緩存時間戳

2.1、使用原因

redis 為什么要緩存系統時間戳?


????????平時使用系統時間戳時,都是直接調用系統函數(涉及到用戶態和內核態線程的上下文切換) 直接獲取時間戳。redis 不是這樣的。因為 每一次獲取系統時間戳都 一次系統調用。相對耗時。作為 高性能的 redis是承受不起的。

????????redis采用定時任務來獲取系統時間 每毫秒更新一次,需要獲取時間戳直接從緩存中拿。

2.2、Redis緩存過期機制


1、惰性刪除:


? ? ? ? 惰性刪除是指 Redis 只有在訪問一個鍵(比如 GET、SET 等操作)時,才會檢查該鍵是否已過期。如果鍵已過期,Redis 會立即刪除該鍵,并返回空(對客戶端來說就像鍵不存在)

優點:

????????節省 CPU 資源,只有在必要時才執行刪除操作。
????????適合訪問頻率較高的場景,過期鍵能被及時清理。


缺點:

????????如果某些鍵長期不被訪問,過期鍵可能占用內存,直到被定期刪除或其他機制清理。


2、定期刪除:?

? ? ? ??Redis 會定期(后臺)掃描數據庫中的鍵,隨機抽樣檢查部分鍵的過期狀態,并刪除已過期的鍵。

優點:

????????能清理不常訪問的過期鍵,防止內存浪費。
????????掃描是分批進行的,不會一次性占用過多 CPU。


缺點:

????????隨機抽樣可能漏掉一些過期鍵,導致內存清理不徹底。
????????高負載下,定期刪除可能不夠及時。


擴展點

redis 6.0 之前為什么一直不使用多線程?

  1. 在使用redis 過程中 cpu 一直不是瓶頸。受制于 內存網絡
  2. 提高Redis, Pipeline(命令批量處理)? 每秒 100萬請求
  3. 單線程內部維護簡便 高效

參考文章:

1、redis高階2 高性能-CSDN博客https://blog.csdn.net/nicepainkiller/article/details/147308857?ops_request_misc=&request_id=&biz_id=102&utm_term=Redis%E7%9A%84%E6%B8%90%E8%BF%9B%E5%BC%8Fhash%E5%92%8C%E7%BC%93%E5%AD%98%E6%97%B6%E9%97%B4%E6%88%B3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-147308857.142^v102^pc_search_result_base1&spm=1018.2226.3001.4187

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

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

相關文章

視頻續播功能實現 - 斷點續看從前端到 Spring Boot 后端

🌷 古之立大事者,不惟有超世之才,亦必有堅忍不拔之志 🎐 個人CSND主頁——Micro麥可樂的博客 🐥《Docker實操教程》專欄以最新的Centos版本為基礎進行Docker實操教程,入門到實戰 🌺《RabbitMQ》…

【工具】Linux 中 find 命令使用教程

find 命令是 Linux 系統中最強大、最靈活的文件搜索工具,其能力遠超簡單的文件名匹配。掌握 find 能讓你在復雜的文件系統中精準定位目標,實現高效的文件管理。 一、命令結構與核心概念 find [起始路徑] [選項] [表達式]起始路徑:搜索的根目…

0629-

0629 0629操作3. 權限 0629 操作 進入數據庫 mysql -uroot -proot123 .use idatabase; select * from customer; 2.select distinct name,idnum from customer; 3.UPDATE customer SET idnum left(MD5(idnum),16); 4. UPDATE customer SET phone CONCAT( LEFT(p…

JVM調優實戰 Day 6:JVM性能監控工具實戰

【JVM調優實戰 Day 6】JVM性能監控工具實戰 文章簡述 在Java應用的性能優化過程中,JVM性能監控工具是不可或缺的“眼睛”。它們能夠幫助開發者實時掌握系統運行狀態,識別性能瓶頸,并為后續調優提供數據支撐。本文作為“JVM調優實戰”系列的第…

【嘉立創EDA】PCB 如何按板框輪廓進行鋪銅

文章路標?? :one: 文章解決問題:two: 主題內容:three: 參考方法be end..1?? 文章解決問題 操作環境:嘉立創EDA專業版 V2.2.40 本文使用嘉立創EDA,描述如何在PCB設計時,直接使用板框輪廓進行鋪銅。本文將此過程記錄,以供有需要的讀者參考。 2?? 主題內容 在PCB設計…

dockerfile命令及構建

一,dockerfile常用命令 命令介紹FROM–指定基礎鏡像LABEL作者信息USER切換運行屬主身份WORKDUR切換工作目錄ENV用于docker容器設置環境變量RUN用來執行命令行的命令COPY把宿主機文件復制到鏡像中去ADD將文件路徑復制添加到容器內部路徑EXPOSE為容器打開指定要監聽的…

uniApp實戰四:網絡請求封裝

文章目錄 1.最終效果預覽2.請求封裝3.創建config配置文件4.創建api請求5.頁面調用 說明:當前筆記基于Vue3開發,HbuilderX版本4.66 1.最終效果預覽 2.請求封裝 在util/request.js下創建js文件,代碼如下 import config from /configconst tim…

MCP協議全解:大模型時代的能力開放與服務集成最佳實踐

一、MCP協議是什么? MCP(Model Context Protocol,模型上下文協議)是大模型和多智能體(Agent)生態中,用于標準化描述和傳遞上下文信息、能力開放、服務集成的協議。它的目標是讓不同模型、Agent…

oracle 返回最新記錄

在Oracle數據庫中,如果你想獲取一個表中基于某些條件的最新記錄,通常有兩種常見的方法:使用ROWID或者使用帶有ORDER BY和ROWNUM的子查詢。下面我將介紹這兩種方法的基本用法。 方法1:使用ROWID 如果你的表有一個時間戳字段或者遞…

華為云服務器:Can’t connect to MySql server on ‘localhost’(10060)

本地遠程連接服務器數據庫,提示10060 在 Ubuntu/Debian 系統中,檢查 3306 端口是否開啟需要從兩個方面驗證:MySQL 服務是否監聽該端口以及防火墻是否允許外部訪問該端口。以下是具體步驟: sudo ufw status查看到為開啟mysql端口 …

利用Percona XtraDB Cluster搭建MySql高可用集群

引言拉取鏡像創建單節點實例(一般在測試環境中使用)自定義網絡(集群間相互隔離)映射數據目錄創建docker-compose PXC容器用docker-compose啟動PXC集群集群驗證數據庫負載均衡的必要性Haproxy負載均衡器部署故障排查引言 告別單點故障,擁抱持續可用——構建基于 Percona X…

Leetcode 3592. Inverse Coin Change

Leetcode 3592. Inverse Coin Change 1. 解題思路2. 代碼實現 題目鏈接:3592. Inverse Coin Change 1. 解題思路 這一題的話思路上我們走的是一個貪婪算法的思路,即從小到大依次考察,顯然,每一次當前最小的非零面額有且必有當前…

打造屬于你的AI智能體,從數據開始 —— 使用 Bright Data MCP+Trae快速構建垂直智能體

一、AI智能體的機遇與挑戰 最近這兩年全民AI熱潮開始,各種智能體應用層出不窮。在AI智能體火熱的當下,越來越多開發者想要構建自己的智能體,特別是垂直領域,需求更是旺盛。比如招聘助手、電商導購、財經分析師等等。從技術角度來…

嵌入式自學四十八天

時鐘 cpu528MHz, PLL:鎖相環電路 倍頻功能:Fin*n Fout Prescale: 預分頻器 降頻 Fin/m Fout PFD:相位分子分頻器 Fin *n/m Fout 時鐘開了后,先到時鐘根產生器,對時鐘頻率更改&…

光譜相機應對復雜環境條件的關鍵技術與方案

一、極端溫度適應性? ?主動溫控系統? ?半導體冷卻(TEC)?:維持探測器在5-40℃工作區間,防止高溫噪聲(如SPECIM FX17)。 ?散熱結構?:鋁合金外殼散熱鰭片,工業級相機可在-10℃…

個人技術文檔庫構建實踐:基于Cursor和GitHub的知識管理系統(含cursor rules)

技術選型 核心工具鏈 Cursor編輯器:AI輔助寫作,智能補全和結構優化GitHub:版本控制、跨設備同步、團隊協作Markdown:輕量級格式,跨平臺兼容,與Git完美集成 與主流工具對比 選擇CursorGitHub適合&#xf…

煙花爆竹生產企業庫房存儲安全風險預警系統

煙花爆竹生產企業庫房存儲安全風險預警系統是保障庫房物資安全、規范作業流程、防范安全事故的重要技術手段,涵蓋多個關鍵預警功能。? 溫濕度預警? 在庫房內安裝溫濕度傳感器,這些傳感器如同敏銳的“環境感知員”,能夠實時監測庫房內環境變…

LINUX 625 DNS域名管理系統

建安錯題 根據《安全色》,紅、黃、藍、綠四種安全色各自傳遞著不同的安全含義和信息,其中表示要求人們必須遵守的規定的顏色是()。 根據《安全色》國家標準(GB 2893-2008),四種安全色的含義如下: ??紅色??&#…

FastMCP框架進行MCP開發:(三)從SSE升級到SteamableHTTP

一、前言 在MCP(Model Context Protocol)中,Streamable HTTP和SSE(Server-Sent Events)都是用于實現客戶端與服務器之間通信的傳輸機制。然而,它們在設計、功能以及性能表現上有著顯著的區別。 二、SSE在…

Android 15 變更及適配攻略

2025年的第一篇Android適配,比以往來的更晚一些。廢話不多說,我們開始!! 準備工作 首先將我們項目中的 targetSdk和compileSdk 升至 35。 推薦使用Android Studio Koala Feature Drop | 2024.1.2或更高版本。AGP版本最低升級到…