Redis 知識速覽

文章目錄

    • 1. Redis 簡介
    • 2. Redis 優缺點
    • 3. Redis 高性能
    • 4. Redis VM 機制
    • 5. Redis 數據類型
    • 6. 應用場景
    • 7. 持久化
    • 8. 過期策略
    • 9. 內存相關
    • 10. 線程模型
    • 11. 事務
    • 12. 集群

1. Redis 簡介

  • 定義:Redis 是一個用 C 語言編寫的高性能非關系型(NoSQL)鍵值對數據庫。
  • 數據類型:鍵的類型只能為字符串,值支持五種數據類型:字符串(String)、列表(List)、集合(Set)、散列表(Hash)、有序集合(Zset)。
  • 存儲方式:數據存在內存中,讀寫速度快。
  • 應用場景:緩存、分布式鎖、事務處理、持久化、LUA腳本執行、LRU驅動事件、多種集群方案。

2. Redis 優缺點

  • 優點
    • 讀寫快:基于內存操作和底層線程模型。
    • 數據持久化:支持 AOF 和 RDB 持久化機制。
    • 事務支持:Redis 操作是原子性的,支持合并后的原子性執行。
    • 豐富的數據結構:除了字符串外還支持 hash、set、zset、list 等。
    • 主從復制:主機會自動將數據同步到從機,可以實現讀寫分離。
    • 多種集群模式。
  • 缺點
    • 容量限制:數據庫容量受物理內存限制。
    • 主從復制局限:不具備自動容錯和恢復功能,主機宕機可能導致數據不一致問題。
  • 常見問題
    • 緩存擊穿 -> 熱點key過期,高并發請求打到數據庫 -> 設置合理的緩存失效時間
    • 緩存穿透 -> 訪問不存在的key,惡意攻擊數據庫 -> 針對接口限流、針對用戶限流、使用布隆過濾器(Bloom Filter)防止穿透
    • 緩存雪崩 -> 大量key集中失效,大量請求打到數據庫 -> 數據預熱、分布式部署緩存服務器

3. Redis 高性能

  • 基于內存操作,類似 HashMap 的查找效率。
  • 數據結構簡單,專為高效操作設計。
  • 單線程模型,避免上下文切換和競爭條件。
  • 使用多路 I/O 復用模型,非阻塞 IO。
  • 自構建 VM 機制,優化內存使用。

4. Redis VM 機制

  • 開啟 VM 功能可實現冷熱數據分離,提高訪問速度。
  • 自行管理交換文件,減少IO操作,提高效率。

5. Redis 數據類型

  • String:支持字符串、整數或浮點數的操作。
    • SDS 柔性數組對象(不限長度的char[]),記錄了已用字符串len,未用字符串free,不需要讀結尾 \0
  • List:雙向鏈表,支持兩端壓入彈出元素。
    • quickList、zipList(數組)/listPack(鏈表)
  • Set:無序集合,支持交集、并集等操作。
    • intset(value 為整數類型,元素少于 set-max-intset-entries 配置值時使用此結構) / dict
  • Zset:有序集合,支持排序操作。
    • skipList(跳表)
  • Hash:包含鍵值對的無序散列表。
    • listPack / dict -> Hashtable 擴容和漸進式 Rehash (在rehash過程中,同時使用原哈希表和新哈希表來進行鍵值對的查找和插入操作, 實現平滑的哈希表擴容,保證并發訪問,避免 rehash 過程出現大量的哈希沖突)

6. 應用場景

  • 計數器:利用 String 類型進行自增自減操作。
  • 緩存:熱點數據緩存,提高讀取速度。
  • 會話緩存:統一存儲多臺服務器會話信息。
  • 全頁緩存 (FPC):用于快速加載瀏覽過的頁面。
  • 查找表:如 DNS 記錄。
  • 消息隊列:使用 List 實現簡單的消息隊列。
  • 分布式鎖:使用 SETNX 命令實現。
  • 其他應用:如排行榜、共同好友等功能。

7. 持久化

  • RDB:定期快照保存,性能高但安全性較低。(BGSAVE)
  • AOF:記錄每次寫命令,數據安全但文件較大。

總結:通常同時使用兩種機制,優先加載 AOF 文件恢復數據。

8. 過期策略

  • 定時過期:立即清除過期數據,占用 CPU 資源。
  • 惰性過期:訪問時檢查是否過期,節省 CPU 資源。
  • 定期過期:定期掃描并清除 expires 字典中一定數量的過期數據,平衡 CPU 和內存資源。

9. 內存相關

  • 淘汰策略:篩選范圍分為全局的和設置過期時間的鍵空間選擇性移除;常用算法有:當內存不足時移除最近最少使用的 key (LRU 算法)或隨機移除 key (Random 算法),還有 LFU 算法和 TTL 算法。
  • 內存優化:使用集合類型(hash,set,zset,list)數據存儲,減少內存占用。

10. 線程模型

  • 單 Reactor 多線程模型:基于 Reactor 模式實現了核心組件 - 文件事件處理器:使用 I/O 多路復用監聽多個套接字, 并發送產生事件的套接字給文件事件分派器(單線程),分派器根據套接字執行的任務類型調用不同的事件處理器。
  • 事件循環(Event Loop):基于事件驅動的異步非阻塞的網絡通信模型,它通過監聽和處理事件來實現網絡通信和其他任務的處理, I/O 多路復用 是事件循環機制用于檢測文件描述符活動狀態的一種技術實現。

11. 事務

  • 概念:通過 MULTI、EXEC、WATCH 等命令實現,保證一次性、順序性、排他性地執行一系列命令。
  • 特性:支持原子性和隔離性,但不支持回滾。
  • Lua 腳本:保證腳本內命令的一次性執行,同樣不提供回滾。

12. 集群

  • 主從復制
    • 讀寫分離
      1. 全量復制 - RDB;
      1. 基于長連接的命令傳播;
      1. 增量復制 - repl_backlog_buffer環形緩沖區 + master_repl_offset / slave_repl_offset
  • Sentinel 哨兵模式
    • 實時監控 & 故障轉移 (定期PING -> 主觀下線 -> 客觀下線 -> 故障轉移,注意不是領導者下線而是主節點下線)
    • Sentinel 領導者選舉 - Raft 一致性算法(候選者狀態 -> 提名和投票 -> 選舉過程[等待贊成票] -> 防止分裂 -> 領導者維持)
  • Cluster 模式
    • 三種分片方案(客戶端分片、代理層分片以及 Redis Cluster - 解決橫向擴展問題)
    • Redis Cluster 方案:一致性哈希 分片,Gossip 協議 信息交換
    • 節點通信與故障檢測
    • 主從復制
    • 數據遷移
    • 客戶端路由

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

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

相關文章

nginx-lua緩存機制

一. 簡述: 緩存是一個大型系統中非常重要的一個組成部分。在硬件層面,大部分的計算機硬件都會用緩存來提高速度,比如CPU會有多級緩存、RAID卡也有讀寫緩存。在軟件層面,我們用的數據庫就是一個緩存設計非常好的例子,在…

Java 面試中的高頻算法題詳解

💖 歡迎來到我的博客! 非常高興能在這里與您相遇。在這里,您不僅能獲得有趣的技術分享,還能感受到輕松愉快的氛圍。無論您是編程新手,還是資深開發者,都能在這里找到屬于您的知識寶藏,學習和成長…

【Python項目】手寫數字識別系統

【Python項目】手寫數字識別系統 技術簡介:采用Python技術、Django框架、MYSQL數據庫等實現。 系統簡介:手寫數字識別系統主要的功能有手寫字識別、手寫字管理、修改密碼、個人信息和用戶管理。 背景: 在當今這個飛速發展的時代,…

Springboot + vue 小區物業管理系統

🥂(???)您的點贊👍?評論📝?收藏?是作者創作的最大動力🤞 💖📕🎉🔥 支持我:點贊👍收藏??留言📝歡迎留言討論 🔥🔥&…

空指針:HttpSession異常,SpringBoot集成WebSocket

異常可能性: 404 : 請檢查攔截器是否將請求攔截WebSocket握手期間HttpSession為空 HttpSession為空 方法一 : 網上參考大量的文檔,有說跟前端請求域名有關系的。 反正對我來說,沒啥用無法連接。 需使用 localhost&a…

什么是視頻孿生智慧能源?視頻孿生智慧能源的應用案例

?視頻孿生智慧能源是集三維地理信息系統、視頻虛實融合、數字孿生、人工智能等多技術于一體的綜合應用,旨在實現對能源系統的實時、動態、全方位監控和管理?。 具體來說,視頻孿生智慧能源通過以下方式實現其功能: ?技術融合?:…

【update 更新數據語法合集】.NET開源ORM框架 SqlSugar 系列

系列文章目錄 🎀🎀🎀 .NET開源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目錄 系列文章目錄前言 🍃一、實體對象更新1.1 單條與批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 無主鍵/指定列…

006-excel數據輸出insert語句

一、在空白列插入,選擇需要的列 "INSERT INTO tab_name1 (code, name) VALUES ("&A1&", "&B1&");"二、 拖動填充塊,或者雙擊填充塊(可以快速填充整列) 三、直接把生成的 insert 語…

前端組件開發:組件開發 / 定義配置 / 配置驅動開發 / 爬蟲配置 / 組件V2.0 / form表單 / table表單

一、最早的靈感 最早的靈感來自sprider / 網絡爬蟲 / 爬蟲配置,在爬蟲爬取網站文章時候,會輸入給爬蟲一個配置文件,里邊的內容是一個json對象。里邊包含了所有想要抓取的頁面的信息。爬蟲通過這個配置就可以抓取目標網站的數據。其實本文要引…

43.Textbox的數據綁定 C#例子 WPF例子

固定最簡步驟,包括 XAML: 題頭里引入命名空間 標題下面引入類 box和block綁定屬性 C#: 通知的類,及對應固定的任務 引入字段 引入屬性 屬性雙觸發,其中一個更新block的屬性 block>指向box的屬性 從Textbo…

excel按行檢索(index+match)

假設你的數據表如下: 假設 數據區域是 A1:D4。 你想查詢某人在某個日期的數據。 實現步驟 公式 在某個單元格中使用以下公式: excel 復制代碼 INDEX(A2:D4, MATCH(“張三”, A2:A4, 0), MATCH(“2025/01/02”, A1:D1, 0)) 2. 公式拆解 MATCH(“張三”,…

信創改造-龍蜥操作系統搭載MySql、Tomcat等服務

龍蜥操作系統 Anolis OS 8 是 OpenAnolis 社區推出的完全開源、中立、開放的發行版,它支持多計算架構,也面向云端場景優化,兼容 CentOS 軟件生態。Anolis OS 8 旨在為廣大開發者和運維人員提供穩定、高性能、安全、可靠、開源的操作系統服務。…

FPGA EDA軟件的位流驗證

位流驗證,對于芯片研發是一個非常重要的測試手段,對于純軟件開發人員,最難理解的就是位流驗證。在FPGA芯片研發中,位流驗證是在做什么,在哪些階段需要做位流驗證,如何做?都是問題。 我們先整體的…

px、em 和 rem 的區別:深入理解 CSS 中的單位

文章目錄 前言一、px - 像素 (Pixel)二、em - 相對父元素字體大小 (Ems)三、rem - 相對于根元素字體大小 (Root Ems)四、綜合比較結語 前言 在CSS中,px、em和rem是三種用于定義尺寸(如寬度、高度、邊距、填充等)的長度單位。它們各自有不同的…

【CI/CD構建】關于不小心將springMVC注解寫在service層

背景 之前寫一個接口的時候沒有察覺到將RequestBody這個注解帶到service層了。 今天提交代碼的時候,插件沒有檢測到這個低級錯誤,導致試飛構建連maven編譯都過不了,maven找不到程序包org.springframework.web.bind.annotation這個包 結果…

Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫

Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫 目錄 Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫一、為備庫配置靜態監聽1、配置 li…

《深入理解Mybatis原理》Mybatis中的緩存實現原理

一級緩存實現 什么是一級緩存? 為什么使用一級緩存? 每當我們使用MyBatis開啟一次和數據庫的會話,MyBatis會創建出一個SqlSession對象表示一次數據庫會話。 在對數據庫的一次會話中,我們有可能會反復地執行完全相同的查詢語句&…

win32匯編環境,窗口程序中單選框的一般操作示例

;運行效果 ;win32匯編環境,窗口程序中單選框的一般操作示例 ;比如在窗口程序中生成單選框,默認哪項選中,判斷當前選中哪一項,讓哪項選中,得到選中項的名稱等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>&g…

從transformer到informer

Transformer和Informer都是深度學習領域中的模型架構,它們主要用于處理序列數據,如自然語言處理(NLP)和時間序列預測任務。 **Transformer**: Transformer模型最初在2017年由Google的研究者提出,它在NLP領…

hive知識體系

hive知識體系 hive知識體系 鏈接: 1Hive概覽 鏈接: 2Hive表類型 鏈接: 3Hive數據抽樣 鏈接: 4Hive計算引擎 鏈接: 5Hive存儲與壓縮 鏈接: 6Hive Sql 大全 鏈接: 6Hive Sql 大全-Hive 函數 鏈接: 6Hive Sql 大全-窗口函數 鏈接: 7Hive執行計劃 鏈接: 8Hive SQL底層執行原理 鏈接…