欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

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

  • 特點:鍵值對/文檔/圖結(jié)構(gòu)存儲、無需固定表結(jié)構(gòu)、高并發(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ù)結(jié)構(gòu):String、List、Hash、Set、Sorted Set。
    • 支持持久化:RDB、AOF。
    • 主從復(fù)制,方便數(shù)據(jù)備份。
  • 為什么快?
    • 純內(nèi)存操作,避免磁盤 IO。
    • 單線程,避免鎖開銷。
    • I/O 多路復(fù)用,高并發(fā)。

應(yīng)用示例

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

3. Redis 安裝與部署

  • 停防火墻、關(guān)閉 SELinux。
  • 安裝依賴:yum install -y gcc gcc-c++ make
  • 下載并解壓 Redis 源碼,執(zhí)行 make && make PREFIX=/usr/local/redis install。
  • 使用 cd utils/install_server.sh 配置服務(wù),按提示輸入路徑。
  • 建立軟鏈接 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ù)保存到磁盤,防止進程退出后丟失。
  • 主從復(fù)制:一主多從,主寫從讀,實現(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é)點全量復(fù)制時,主節(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)點:文件緊湊、體積小、適合全量備份和傳輸;恢復(fù)速度快;對性能影響小。
  • 缺點:無法做到實時持久化,可能丟失幾分鐘數(shù)據(jù);fork 阻塞和磁盤 IO 壓力。

6.2 AOF 持久化

① 原理

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

② 開啟 AOF

默認關(guān)閉,需要在 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)點:實時性更好(秒級持久化)、可讀性強、兼容性好。
  • 缺點:文件大、恢復(fù)速度慢、寫磁盤頻率高對性能影響更大,重寫過程也有 fork 阻塞與 IO 壓力。

6.3 對比總結(jié)

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

實踐建議

  • 對數(shù)據(jù)安全要求不高:僅 RDB。
  • 對實時性要求高:開啟 AOF(默認 everysec)+定期 RDB 做全量備份。
  • Redis 4.0 以后支持混合持久化,結(jié)合兩者優(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 結(jié)構(gòu)存儲減少碎片。
  • 給 Key 設(shè)置過期時間:
set session:123 abcdef EX 3600
  • 設(shè)置最大內(nèi)存與淘汰策略:
maxmemory 2gb
maxmemory-policy allkeys-lru
  • 關(guān)閉或限制 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ù)也緩存一份空對象并設(shè)置較短 TTL。
  • 布隆過濾器(Bloom Filter):在緩存前加過濾器,請求 Key 不在過濾器中直接返回空,減少 DB 查詢。
  • 參數(shù)校驗:對明顯非法參數(shù)直接攔截。

8.2 緩存擊穿

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

解決方案

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

8.3 緩存雪崩

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

解決方案

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

8.4 綜合實踐建議

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

結(jié)語

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

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

相關(guān)文章

  • 在Centos?8.0中安裝Redis服務(wù)器的教程詳解

    在Centos?8.0中安裝Redis服務(wù)器的教程詳解

    由于考慮到linux服務(wù)器的性能,所以經(jīng)常需要把一些中間件安裝在linux服務(wù)上,今天通過本文給大家介紹下在Centos?8.0中安裝Redis服務(wù)器的詳細過程,感興趣的朋友一起看看吧
    2022-03-03
  • 使用redis如何生成自增序列號碼

    使用redis如何生成自增序列號碼

    這篇文章主要介紹了使用redis如何生成自增序列號碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • redis啟動和退出命令行簡單操作步驟

    redis啟動和退出命令行簡單操作步驟

    Redis是一種鍵值存儲數(shù)據(jù)庫,用戶可以使用它來存儲和檢索大量的鍵值數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于redis啟動和退出命令行的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • CentOS系統(tǒng)下Redis安裝和自啟動配置的步驟

    CentOS系統(tǒng)下Redis安裝和自啟動配置的步驟

    相信大家都知道Redis是一個C實現(xiàn)的基于內(nèi)存、可持久化的鍵值對數(shù)據(jù)庫,在分布式服務(wù)中常作為緩存服務(wù)。所以這篇文章將詳細介紹在CentOS系統(tǒng)下如何從零開始安裝到配置啟動服務(wù)。有需要的可以參考借鑒。
    2016-09-09
  • redis全局命令set、get、keys使用方法

    redis全局命令set、get、keys使用方法

    這篇文章主要介紹了redis全局命令set、get、keys使用方法的相關(guān)資料,詳細講解了Redis的基本概念和常用命令,強調(diào)了在生產(chǎn)環(huán)境中避免使用keys命令的重要性,需要的朋友可以參考下
    2025-03-03
  • Redis高性能的原因及說明

    Redis高性能的原因及說明

    這篇文章主要介紹了Redis高性能的原因及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Redis fork進程分配不到內(nèi)存解決方案

    Redis fork進程分配不到內(nèi)存解決方案

    這篇文章主要介紹了Redis fork進程分配不到內(nèi)存解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • redis 數(shù)據(jù)刪除策略和逐出算法的問題小結(jié)

    redis 數(shù)據(jù)刪除策略和逐出算法的問題小結(jié)

    這篇文章主要介紹了redis 數(shù)據(jù)刪除策略和逐出算法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Redis+PHP實現(xiàn)用戶消息推送每天最多通知2次的功能

    Redis+PHP實現(xiàn)用戶消息推送每天最多通知2次的功能

    在開發(fā)應(yīng)用程序中,經(jīng)常需要向用戶推送消息通知,但是為了避免過多的打擾用戶,我們希望限制每天最多通知2次,本篇博文將介紹如何使用PHP和Redis實現(xiàn)這一功能,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-10-10
  • Redis基本數(shù)據(jù)類型String常用操作命令

    Redis基本數(shù)據(jù)類型String常用操作命令

    這篇文章主要為大家介紹了Redis基本數(shù)據(jù)類型String常用操作命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論