<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入探究Redis存儲原理

jf_78858299 ? 來源:老李說架構之道 ? 作者:夢海飛翔 ? 2023-02-15 15:52 ? 次閱讀

Redis是用C語言開發的一個開源的高性能鍵值對(key-value)內存數據庫。

Redis數據存儲原理

** 存儲結構如圖:**

圖片

redisDB、dict、dictht、dictEntry、RedisObject的存儲結構關系如圖:

圖片

占的字節數:

dictEntry :16字節、RedisObject:12字節、sds:8字節 + 字符串長度

我們現在思考,如果一個10字節的key,需要多少存儲空間呢?

16+12+8+10+1=47*2(exprires也需要同樣的空間所以乘以倍數)

結論:在key設置的時候盡量的少的字節,避免空間的浪費;

內存清理方式:

  • 定期清理

    隨機取樣的方式,如果清理的比例大于25%,繼續。如下圖:

圖片

  • 惰性刪除:被動刪除策略,訪問時判斷;

  • LFU

    volatile-lfu:對有過期時間的key采用LFU淘汰算法;
    allkeys-lfu:對全部key采用LFU淘汰算法;

  • LRU

    volatile-lru:從設置了過期時間的數據集中,選擇最近最久未使用的數據釋放;
    allkeys-lru:從數據集中選擇最近最久未使用的數據釋放;

Redis數據固化方式

  • RDB快照方式

    手動方式:
    
                  save:阻塞當前Redis服務器,直到RDB過程完成為止;
    
          自動方式:
    
                   bgsave:fork子進程,持久化過程由子進程負責,完成后自動結束;
    
          配置項:save m n,m秒存在n次寫入,觸發bgsave  ;
    

    優點:

    對Redis性能影響低,二進制壓縮文件體積小,數據恢復塊;
    

    ** 缺點:**

    有數據丟失可能,備份文件版本兼容問題;
    

    ** 過程如圖:**

圖片* AOF快照方式

append only file,日志形式記錄寫入指令,實時持久化;**命令寫入過程:**

圖片

配置 含義 效率 數據安全
appendfsync=always 每次同步 全最高,最多丟失一個寫入的數據
appendfsync=everysec 每秒同步 安全最折中,最多丟失1S的數據
appendfsync=no 關 閉 安全最低,最多上一次保存AOF文件到當前時刻的全部數據
  • AOF文件重寫
    • fork子進程不影響父進程處理請求
    • 子進程雙寫,確保數據不丟失
    • 手動觸發:調用bgrewriteaof命令
    • 被動觸發:
      • auto-aof-rewrite-min-size
      • auto-aof-rewrite-percentage
      • aof_current_size
      • aof_base_size

過程如圖:

圖片

Redis重啟恢復過程:

圖片

注意:重啟的過程中需要注意:如果開啟RDB模型,未開啟AOF模式,而在重啟的時候開啟AOF模式,這是RDB****的數據就會覆蓋掉。

Redis可靠性保障

  • 主從模式
    啟動時,全量同步Slave。增量同步,運行ID(Master啟動時生成),同步給Slave,通過復制偏移量確定具體同步位置;
    

具體同步過程如下圖所示:

圖片

  • 哨兵模式
    不斷地檢查Master和Slave是否運作正常,發現故障通知管理員和客戶端,自動主從切換,更新配置信息,客戶端應用初始化時連接Sentinel獲取節點信息;
    

哨兵模式架構:

圖片

  • 集群模式

    無需Sentinel哨兵,支持水平擴容,自動遷移。

圖片

缺點:

不支持批量操作,客戶端路由,兩次交互,存在性能問題,如圖:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7548

    瀏覽量

    131342
  • 數據存儲
    +關注

    關注

    5

    文章

    921

    瀏覽量

    50663
  • 數據庫
    +關注

    關注

    7

    文章

    3618

    瀏覽量

    63639
收藏 人收藏

    評論

    相關推薦

    如何使用Rust連接Redis

    Redis是一款快速、開源、鍵值存儲數據庫,被廣泛應用于緩存、發布/訂閱系統、定時任務等場景中。Rust提供了很多Redis的客戶端庫,本教程將會介紹如何使用Rust連接Redis,以
    的頭像 發表于 09-19 16:22 ?1518次閱讀

    Python存儲數據詳解

    在Python開發中,數據存儲、讀取是必不可少的環節,而且可以采用的存儲方式也很多,常用的方法有json文件、csv文件、MySQL數據庫、Redis數據庫以及Mongdb數據庫等。1. json
    發表于 03-29 15:47

    Redis Stream應用案例

    ,還有一個很重要的能力是跨平臺,甚至是作為一個嵌入式的存儲系統跑在基于ARM的平臺上,比如作者之前就宣稱,Redis成功的跑在了“樹莓派”上。試想一下,在IoT時代,會有無數隨時隨地可以接入互聯網
    發表于 06-26 17:15

    深入探究Linux的設備樹

    新版本linux設備樹講解??!ppt- 深入探究Linux的設備樹_2017.8.14.pdf
    發表于 07-03 08:03

    深入探究Linux的設備樹

    新版本linux設備樹講解??!ppt- 深入探究Linux的設備樹_2017.8.14.pdf
    發表于 07-09 00:15

    redis概述

    REmote DIctionary Server(Redis)是一個基于key-value鍵值對的持久化數據庫存儲系統。redis和大名鼎鼎的Memcached緩存服務軟件很像,但是redis
    發表于 07-17 07:38

    如何使得redis中的數據不再有

    ,原因是redis的持久化功能導致的,所謂的持久化就是redis在系統關閉的時候把數據存儲到硬盤中,在下一次啟動的時候,在從硬盤恢復到redis中,
    發表于 11-05 08:50

    電子狗工作原理深入探究

    電子狗工作原理深入探究,感興趣的小伙伴們可以看看。
    發表于 07-28 09:32 ?17次下載

    Redis為什么這么快!深入了解Redis的內存模型!

    Redis是目前最火爆的內存數據庫之一,通過在內存中讀寫數據,大大提高了讀寫速度,可以說Redis是實現網站高并發不可或缺的一部分。
    的頭像 發表于 05-02 16:57 ?4265次閱讀
    <b class='flag-5'>Redis</b>為什么這么快!<b class='flag-5'>深入</b>了解<b class='flag-5'>Redis</b>的內存模型!

    Redis混合存儲產品與架構介紹

    摘要:?簡介 Redis混合存儲實例是阿里云自主研發的完全兼容Redis協議和特性的混合存儲產品。通過將部分冷數據存儲到磁盤,在保證絕大部分
    發表于 08-30 16:09 ?142次閱讀

    探究Redis 性能測試與監控

    很多人在安裝部署好Redis后,就沒有對Rredis的配置和部署等有效性和高可用性進行性能測試,最終導致上線出現緩存穿透、雪崩等現象,導致性能還是有問題,其實做為技術運維人員在部署好Redis后可以
    的頭像 發表于 10-12 09:19 ?1281次閱讀
    <b class='flag-5'>探究</b><b class='flag-5'>Redis</b> 性能測試與監控

    Redis架構演化之路

    這個架構非常簡單,你的業務應用可以把 Redis 當做緩存來使用,從 MySQL 中查詢數據,然后寫入到 Redis 中,之后業務應用再從 Redis 中讀取這些數據,由于 Redis
    的頭像 發表于 08-03 16:54 ?363次閱讀
    <b class='flag-5'>Redis</b>架構演化之路

    深入理解redis分布式鎖

    深入理解redis分布式鎖 哈嘍,大家好,我是指北君。 本篇文件我們來介紹如何Redis實現分布式鎖的演進過程,以及為什么不能直接用Setnx實現分布式鎖。 1、分布式鎖簡介 分布式鎖是控制分布式
    的頭像 發表于 10-08 14:13 ?612次閱讀
    <b class='flag-5'>深入</b>理解<b class='flag-5'>redis</b>分布式鎖

    redis的原理和使用場景

    、消息隊列、實時分析、排行榜和計數器等場景。本文將詳細介紹Redis的原理和使用場景。 一、Redis的原理 Redis的原理主要包括以下幾個方面: 內存數據庫:Redis是一種內存數
    的頭像 發表于 12-04 16:29 ?272次閱讀

    redis使用多線程處理操作命令

    Redis 多線程處理操作命令的實現和優勢,幫助讀者深入了解這一方面的知識。 首先,我們來了解一下 Redis 的基本概念和工作原理。Redis 是一個支持鍵值對
    的頭像 發表于 12-05 10:25 ?323次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>