最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 配置與優(yōu)化完全指南

 更新時間:2025年09月23日 09:46:19   作者:東雪蓮☆  
本文系統(tǒng)講解Redis作為高性能內(nèi)存數(shù)據(jù)庫的核心特性,涵蓋與關系型數(shù)據(jù)庫對比、安裝部署、常用命令、持久化機制(RDB/AOF)、高可用方案及性能優(yōu)化,重點分析緩存穿透、擊穿、雪崩問題的解決方案,助力掌握Redis在高并發(fā)場景下的應用與管理,感興趣的朋友跟隨小編一起看看吧

前言

Redis 是目前使用最廣泛的高性能內(nèi)存數(shù)據(jù)庫之一。本文從基礎概念到安裝部署、常用命令、高可用、持久化機制,再到性能優(yōu)化,一文帶你全面掌握 Redis。

1. 關系型數(shù)據(jù)庫 vs 非關系型數(shù)據(jù)庫

關系型數(shù)據(jù)庫(SQL)

  • 特點:表格模型(行+列)、使用 SQL 語言、強事務 ACID、縱向擴展(升級硬件)。
  • 常見產(chǎn)品:MySQL、Oracle、PostgreSQL。
  • 場景示例:銀行轉賬,必須保證兩邊同時成功,事務性要求強。

非關系型數(shù)據(jù)庫(NoSQL)

  • 特點:鍵值對/文檔/圖結構存儲、無需固定表結構、高并發(fā)、高可擴展、橫向擴展(增加節(jié)點)。
  • 常見產(chǎn)品:Redis、MongoDB、HBase、Memcached。
  • 場景示例:微信聊天,一條消息可能是文字、圖片、語音,不適合表格存儲,更適合用文檔型數(shù)據(jù)庫。

2. Redis 簡介

  • 定義:開源、C 語言編寫、基于內(nèi)存、支持持久化的鍵值數(shù)據(jù)庫。
  • 優(yōu)勢
    • 高性能:讀取可達 11 萬次/s,寫入 8 萬次/s。
    • 支持多種數(shù)據(jù)結構:String、List、Hash、Set、Sorted Set。
    • 支持持久化:RDB、AOF。
    • 主從復制,方便數(shù)據(jù)備份。
  • 為什么快?
    • 純內(nèi)存操作,避免磁盤 IO。
    • 單線程,避免鎖開銷。
    • I/O 多路復用,高并發(fā)。

應用示例

  • 秒殺庫存扣減、訂單寫入放在 Redis,減輕數(shù)據(jù)庫壓力。
  • 抖音熱搜榜:用 Sorted Set 存儲關鍵詞和熱度,實時排序。

3. Redis 安裝與部署

  • 停防火墻、關閉 SELinux。
  • 安裝依賴:yum install -y gcc gcc-c++ make。
  • 下載并解壓 Redis 源碼,執(zhí)行 make && make PREFIX=/usr/local/redis install。
  • 使用 cd utils/install_server.sh 配置服務,按提示輸入路徑。
  • 建立軟鏈接 ln -s /usr/local/redis/bin/* /usr/local/bin/ 方便全局使用。
  • 常用控制命令:
/etc/init.d/redis_6379 start|stop|restart|status
  • 修改 /etc/redis/6379.conf
    • bind 127.0.0.1 192.168.x.x:監(jiān)聽地址。
    • port 6379:默認端口。
    • daemonize yes:守護進程。
    • logfile /var/log/redis_6379.log:日志文件。

4. Redis 常用命令

  • 客戶端工具
  • redis-cli -h host -p port -a password
  • 壓力測試
  • redis-benchmark -c 100 -n 100000
  • 數(shù)據(jù)操作
set key value
get key
exists key
del key
keys pattern
rename oldkey newkey
  • 多數(shù)據(jù)庫
  • 默認 0~15 共 16 個庫。
  • select n 切換庫,move key n 移動數(shù)據(jù)。
  • flushdb 清空當前庫,flushall 清空所有庫(慎用)。

5. Redis 高可用

  • 持久化:RDB/AOF 將內(nèi)存數(shù)據(jù)保存到磁盤,防止進程退出后丟失。
  • 主從復制:一主多從,主寫從讀,實現(xiàn)負載均衡。
  • 哨兵(Sentinel):主機宕機自動切換到從機。
  • 集群(Cluster):多節(jié)點分片存儲,解決單機容量限制和寫入瓶頸。

6. 持久化機制

6.1 RDB 持久化

① 原理

RDB 是將 Redis 某一時刻的內(nèi)存數(shù)據(jù)快照(Snapshot)保存到磁盤的二進制文件 dump.rdb 中。 Redis 通過 fork 一個子進程把內(nèi)存數(shù)據(jù)寫入臨時 RDB 文件,完成后再替換舊文件。

② 觸發(fā)條件

  • 手動觸發(fā)
    • save:阻塞主進程直到完成,不推薦在線上使用。
    • bgsavefork 子進程執(zhí)行保存,主進程繼續(xù)處理請求(推薦)。
  • 自動觸發(fā): 在 redis.conf 里通過 save m n 配置:
save 900 1
save 300 10
save 60 10000
  • 其他觸發(fā):
    • 從節(jié)點全量復制時,主節(jié)點會自動執(zhí)行 bgsave。
    • 執(zhí)行 shutdown 時如果沒開啟 AOF,會自動做一次 RDB。

③ 執(zhí)行流程

  • 主進程檢查是否已有持久化子進程在運行,若有則直接返回。
  • fork 子進程(此過程主進程短暫阻塞)。
  • 子進程把內(nèi)存數(shù)據(jù)寫入臨時 RDB 文件。
  • 寫完后原子替換舊文件,發(fā)送完成信號給主進程。
  • 主進程更新狀態(tài)。

④ 啟動加載

Redis 啟動時若開啟 AOF 優(yōu)先加載 AOF,否則加載 RDB 文件。載入期間 Redis 會阻塞直至完成。

⑤ 優(yōu)缺點

  • 優(yōu)點:文件緊湊、體積小、適合全量備份和傳輸;恢復速度快;對性能影響小。
  • 缺點:無法做到實時持久化,可能丟失幾分鐘數(shù)據(jù);fork 阻塞和磁盤 IO 壓力。

6.2 AOF 持久化

① 原理

AOF(Append Only File)是把 Redis 執(zhí)行過的寫/刪除命令按 Redis 協(xié)議格式追加到日志文件中。重啟時 Redis 重新執(zhí)行 AOF 文件中的命令恢復數(shù)據(jù)。查詢類命令不會寫入 AOF。

② 開啟 AOF

默認關閉,需要在 redis.conf 開啟:

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

③ 執(zhí)行流程

  • 命令追加 (append):Redis 先將命令追加到 AOF 緩沖區(qū) aof_buf
  • 文件寫入/同步 (write & fsync)
    • appendfsync always:每條命令都 fsync,同步最安全但最慢。
    • appendfsync no:僅 write,由 OS 決定何時刷盤,不安全但最快。
    • appendfsync everysec:每秒 fsync 一次(默認,性能與安全折中)。
  • 文件重寫 (rewrite)
    • AOF 文件越來越大時 Redis 通過 BGREWRITEAOF 重寫文件。
    • 重寫并不是讀取舊 AOF,而是把當前內(nèi)存狀態(tài)重新生成最少命令集寫入新文件。
    • 過期數(shù)據(jù)、無效命令不寫入;多條命令可合并成一條,大幅壓縮文件。
  • 觸發(fā):
    • 手動:bgrewriteaof。
    • 自動:滿足 auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage
    • 重寫期間緩沖:Redis 把新寫命令同時追加到舊緩沖區(qū)和 aof_rewrite_buf,確保新文件與當前狀態(tài)一致。

④ 啟動加載

Redis 啟動時若 AOF 開啟則優(yōu)先加載 AOF;AOF 文件不存在時才加載 RDB。 若 AOF 文件尾部不完整(如宕機),且 aof-load-truncated yes,則忽略尾部繼續(xù)啟動。

⑤ 優(yōu)缺點

  • 優(yōu)點:實時性更好(秒級持久化)、可讀性強、兼容性好。
  • 缺點:文件大、恢復速度慢、寫磁盤頻率高對性能影響更大,重寫過程也有 fork 阻塞與 IO 壓力。

6.3 對比總結

特性RDBAOF
持久化方式周期性快照逐條命令日志
文件大小
恢復速度
數(shù)據(jù)安全可能丟幾分鐘丟失不超過 1 秒(默認)
性能影響

實踐建議

  • 對數(shù)據(jù)安全要求不高:僅 RDB。
  • 對實時性要求高:開啟 AOF(默認 everysec)+定期 RDB 做全量備份。
  • Redis 4.0 以后支持混合持久化,結合兩者優(yōu)點。

7. 性能管理與優(yōu)化

內(nèi)存指標與碎片率

  • used_memory:實際用來存儲數(shù)據(jù)的內(nèi)存。
  • used_memory_rss:進程占用的物理內(nèi)存。
  • 內(nèi)存碎片率 = used_memory_rss / used_memory
    • ≈1:正常。
    • 1.5:碎片較高,低峰期重啟 Redis 釋放碎片。

    • <1:內(nèi)存不足可能觸發(fā) swap。

查看命令:

redis-cli info memory

優(yōu)化建議

  • 合理規(guī)劃實例內(nèi)存(單實例不超過物理內(nèi)存 70%~80%)。
  • 多用 Hash 結構存儲減少碎片。
  • 給 Key 設置過期時間:
set session:123 abcdef EX 3600
  • 設置最大內(nèi)存與淘汰策略:
maxmemory 2gb
maxmemory-policy allkeys-lru
  • 關閉或限制 swap。

內(nèi)存淘汰策略

當數(shù)據(jù)量超過 maxmemory 時,Redis 按策略回收空間:

策略描述
volatile-lru從有 TTL 的 Key 中淘汰最少使用的
volatile-ttl從有 TTL 的 Key 中淘汰最快過期的
volatile-random從有 TTL 的 Key 中隨機淘汰
allkeys-lru從所有 Key 中淘汰最少使用的(最常用)
allkeys-random從所有 Key 中隨機淘汰
noeviction不淘汰,內(nèi)存不足時報錯

實踐建議

  • 緩存場景:allkeys-lru。
  • 需要保留核心數(shù)據(jù)但允許部分丟失:volatile-lru。
  • 嚴格要求數(shù)據(jù)不丟失:noeviction。

8. 常見緩存問題與解決方案

8.1 緩存穿透

現(xiàn)象:請求的 Key 在緩存和數(shù)據(jù)庫都不存在,大量請求直達數(shù)據(jù)庫,造成壓力。 原因:惡意攻擊或查詢不存在數(shù)據(jù)。

解決方案

  • 緩存空值:把不存在的數(shù)據(jù)也緩存一份空對象并設置較短 TTL。
  • 布隆過濾器(Bloom Filter):在緩存前加過濾器,請求 Key 不在過濾器中直接返回空,減少 DB 查詢。
  • 參數(shù)校驗:對明顯非法參數(shù)直接攔截。

8.2 緩存擊穿

現(xiàn)象:某個熱點 Key 正好過期瞬間,大量請求同時穿透到數(shù)據(jù)庫。 原因:緩存數(shù)據(jù)過期瞬間并發(fā)請求落到 DB。

解決方案

  • 熱點數(shù)據(jù)不過期:為熱點 Key 設置長 TTL 或永不過期。
  • 加互斥鎖(Mutex):第一個請求獲得鎖去 DB,其余請求等待。
  • 預加載/異步刷新:在數(shù)據(jù)快過期前提前刷新緩存。
  • 過期時間隨機化:在 TTL 上加隨機值避免集中過期。

8.3 緩存雪崩

現(xiàn)象:大量緩存同時失效或 Redis 宕機,所有請求涌入數(shù)據(jù)庫。 原因:集中過期、緩存不可用、沒有熔斷限流。

解決方案

  • 過期時間分散:設置 TTL 時加上隨機數(shù),避免同一時刻大面積過期。
  • 雙緩存機制:在緩存失效前提前準備備用緩存,主緩存宕機時快速切換。
  • 限流與熔斷:在應用層限制請求速率,避免瞬時打爆數(shù)據(jù)庫。
  • Redis 高可用:主從+哨兵或集群,減少緩存整體不可用風險。

8.4 綜合實踐建議

  • 穿透 → 布隆過濾器 + 緩存空值。
  • 擊穿 → 熱點 Key 不過期 + 加鎖或提前刷新。
  • 雪崩 → TTL 隨機 + 限流熔斷 + 高可用部署。

結語

掌握 Redis 的 RDB/AOF 持久化原理緩存問題與解決方案,不僅能保證數(shù)據(jù)安全,也能讓你的系統(tǒng)在高并發(fā)場景下穩(wěn)定運行。

到此這篇關于Redis 配置與優(yōu)化完全指南的文章就介紹到這了,更多相關Redis 配置與優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis 同步機制全面解析

    Redis 同步機制全面解析

    本文系統(tǒng)解析了Redis的同步機制,涵蓋主從復制、哨兵模式和集群模式,主從實現(xiàn)數(shù)據(jù)備份與讀寫分離,哨兵保障高可用自動故障轉移,集群支持分布式分片與水平擴展,感興趣的朋友一起看看吧
    2025-09-09
  • Redis實現(xiàn)分布式鎖的示例代碼

    Redis實現(xiàn)分布式鎖的示例代碼

    日常開發(fā)中,秒殺下單、搶紅包等等業(yè)務場景,都需要用到分布式鎖,本文主要介紹了Redis實現(xiàn)分布式鎖的示例代碼,感興趣的可以了解一下
    2023-10-10
  • 深入解析Redis的LRU與LFU算法實現(xiàn)

    深入解析Redis的LRU與LFU算法實現(xiàn)

    這篇文章主要重點介紹了Redis的LRU與LFU算法實現(xiàn),并分析總結了兩種算法的實現(xiàn)效果以及存在的問題,并闡述其優(yōu)劣特性,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • redis中使用redis-dump導出、導入、還原數(shù)據(jù)實例

    redis中使用redis-dump導出、導入、還原數(shù)據(jù)實例

    這篇文章主要介紹了redis中使用redis-dump導出、導入、還原數(shù)據(jù)實例,本文直接給出操作命令,并給出注釋加以說明,需要的朋友可以參考下
    2014-11-11
  • Redis 內(nèi)存碎片原因及清理

    Redis 內(nèi)存碎片原因及清理

    內(nèi)存碎片是指在內(nèi)存分配的時候,產(chǎn)生的不能重復利用的空間,本文主要介紹了Redis 內(nèi)存碎片原因及清理,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • 一文詳解Redis在Ubuntu系統(tǒng)上的安裝步驟

    一文詳解Redis在Ubuntu系統(tǒng)上的安裝步驟

    安裝redis在Ubuntu上有多種方法,下面這篇文章主要給大家介紹了關于Redis在Ubuntu系統(tǒng)上安裝的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • Redis中set、setnx、setex的使用區(qū)別及說明

    Redis中set、setnx、setex的使用區(qū)別及說明

    本文介紹了Redis中的SET、SETEX、SETNX和GETSET命令,分別用于設置鍵值對、設置帶過期時間的鍵值對、僅當鍵不存在時設置鍵值對以及獲取并設置鍵值對,同時,還提到了expire和persist命令用于設置和清除鍵的過期時間
    2025-11-11
  • Redis實戰(zhàn)之Jedis使用技巧詳解

    Redis實戰(zhàn)之Jedis使用技巧詳解

    Jedis?是老牌的?Redis?的?Java?客戶端,提供了比較全面的?Redis?命令的操作支持,也是目前使用最廣泛的客戶端。這篇文章主要為大家詳細介紹了Jedis的使用技巧,需要的可以參考一下
    2022-12-12
  • redis中hiredis-API函數(shù)的調(diào)用方法

    redis中hiredis-API函數(shù)的調(diào)用方法

    這篇文章主要介紹了redis中hiredis-API函數(shù)的調(diào)用,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-09-09
  • Redis線程模型的原理分析

    Redis線程模型的原理分析

    Redis是一個高性能的數(shù)據(jù)存儲框架,在高并發(fā)的系統(tǒng)設計中,Redis也是一個比較關鍵的組件,是我們提升系統(tǒng)性能的一大利器,本文詳細的介紹了Redis線程模型,感興趣的可以了解一
    2021-11-11

最新評論

陆川县| 通州市| 寿光市| 宜兰县| 嘉义县| 天峻县| 山丹县| 保靖县| 郸城县| 汉源县| 玉溪市| 邛崃市| 辉县市| 民勤县| 丰宁| 江城| 红桥区| 望谟县| 泾源县| 霍城县| 九江市| 逊克县| 镇江市| 会同县| 庆安县| 大安市| 罗田县| 曲周县| 个旧市| 新和县| 嵊州市| 行唐县| 思南县| 苏尼特左旗| 宁波市| 克什克腾旗| 天镇县| 昆明市| 海丰县| 濉溪县| 忻州市|