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

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

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

前言

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

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

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

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

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

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

2. Redis 簡(jiǎn)介

  • 定義:開源、C 語(yǔ)言編寫、基于內(nèi)存、支持持久化的鍵值數(shù)據(jù)庫(kù)。
  • 優(yōu)勢(shì)
    • 高性能:讀取可達(dá) 11 萬(wàn)次/s,寫入 8 萬(wàn)次/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)用示例

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

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)聽(tīng)地址。
    • port 6379:默認(rèn)端口。
    • daemonize yes:守護(hù)進(jìn)程。
    • logfile /var/log/redis_6379.log:日志文件。

4. Redis 常用命令

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

5. Redis 高可用

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

6. 持久化機(jī)制

6.1 RDB 持久化

① 原理

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

② 觸發(fā)條件

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

③ 執(zhí)行流程

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

④ 啟動(dòng)加載

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

⑤ 優(yōu)缺點(diǎn)

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

6.2 AOF 持久化

① 原理

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

② 開啟 AOF

默認(rèn)關(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 決定何時(shí)刷盤,不安全但最快。
    • appendfsync everysec:每秒 fsync 一次(默認(rèn),性能與安全折中)。
  • 文件重寫 (rewrite)
    • AOF 文件越來(lái)越大時(shí) Redis 通過(guò) BGREWRITEAOF 重寫文件。
    • 重寫并不是讀取舊 AOF,而是把當(dāng)前內(nèi)存狀態(tài)重新生成最少命令集寫入新文件。
    • 過(guò)期數(shù)據(jù)、無(wú)效命令不寫入;多條命令可合并成一條,大幅壓縮文件。
  • 觸發(fā):
    • 手動(dòng):bgrewriteaof。
    • 自動(dòng):滿足 auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage。
    • 重寫期間緩沖:Redis 把新寫命令同時(shí)追加到舊緩沖區(qū)和 aof_rewrite_buf,確保新文件與當(dāng)前狀態(tài)一致。

④ 啟動(dòng)加載

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

⑤ 優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):實(shí)時(shí)性更好(秒級(jí)持久化)、可讀性強(qiáng)、兼容性好。
  • 缺點(diǎn):文件大、恢復(fù)速度慢、寫磁盤頻率高對(duì)性能影響更大,重寫過(guò)程也有 fork 阻塞與 IO 壓力。

6.3 對(duì)比總結(jié)

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

實(shí)踐建議

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

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

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

  • used_memory:實(shí)際用來(lái)存儲(chǔ)數(shù)據(jù)的內(nèi)存。
  • used_memory_rss:進(jìn)程占用的物理內(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ī)劃實(shí)例內(nèi)存(單實(shí)例不超過(guò)物理內(nèi)存 70%~80%)。
  • 多用 Hash 結(jié)構(gòu)存儲(chǔ)減少碎片。
  • 給 Key 設(shè)置過(guò)期時(shí)間:
set session:123 abcdef EX 3600
  • 設(shè)置最大內(nèi)存與淘汰策略:
maxmemory 2gb
maxmemory-policy allkeys-lru
  • 關(guān)閉或限制 swap。

內(nèi)存淘汰策略

當(dāng)數(shù)據(jù)量超過(guò) maxmemory 時(shí),Redis 按策略回收空間:

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

實(shí)踐建議

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

8. 常見(jiàn)緩存問(wèn)題與解決方案

8.1 緩存穿透

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

解決方案

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

8.2 緩存擊穿

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

解決方案

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

8.3 緩存雪崩

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

解決方案

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

8.4 綜合實(shí)踐建議

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

結(jié)語(yǔ)

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

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

相關(guān)文章

  • Redis 同步機(jī)制全面解析

    Redis 同步機(jī)制全面解析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Redis線程模型的原理分析

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

最新評(píng)論

宝兴县| 阿合奇县| 喀喇| 孟津县| 新平| 鲜城| 大安市| 鄂托克前旗| 内丘县| 延寿县| 布尔津县| 云梦县| 江油市| 宿松县| 吉木萨尔县| 临泽县| 海丰县| 耿马| 平定县| 西盟| 沾化县| 灌南县| 兴安县| 宝坻区| 定远县| 关岭| 哈尔滨市| 兴仁县| 犍为县| 酒泉市| 潍坊市| 朔州市| 威信县| 洪雅县| 宁乡县| 武山县| 淳化县| 常州市| 商都县| 民丰县| 册亨县|