動態(tài)網站沒有數據庫怎么做快手作品免費推廣軟件
都2024年了,不會還有人不知道redis的RDB和Aof吧?不知道沒關系,看完這篇文章我相信你就會有個大概的了解和認識了?
1. Redis持久化
1.1 持久化概念
Redis本身是一個基于內存的數據庫,它提供了RDB持久化、AOF持久化兩種方式,用來將存儲在內存中的數據庫狀態(tài)保存到磁盤中。前者是保存了整個Redis數據庫狀態(tài),而后者是保存了從Redis啟動后所有執(zhí)行的寫命令。接下來我們就從這兩方面展開。
1.2 生成RDB文件
觸發(fā)RDB持久化過程分為手動觸發(fā)和自動觸發(fā),手動觸發(fā)的命令有兩個,一個是SAVE
命令,一個是BGSAVE
命令,執(zhí)行命令后會在根目錄生成名為dump.rdb
的文件。
大家看下以下手動觸發(fā)的使用。
# 手動生成RDB文件指令 127.0.0.1:6379> save OK 127.0.0.1:6379> bgsave Background saving started
另外RDB文件是在Redis啟動時自動載入,如果把dump.rdb
文件刪除,重啟Redis后會發(fā)現原先的數據庫狀態(tài)都不存在了。
# 初始化 127.0.0.1:6379> set name JavaGetOffer OK 127.0.0.1:6379> get name "JavaGetOffer" 127.0.0.1:6379> save OK# 重啟Redis 127.0.0.1:6379> get name "JavaGetOffer"# 刪除dump.rdb,重啟Redis后name為nil 127.0.0.1:6379> get name (nil)
1.3 兩種命令的選擇
SAVE命令會阻塞Redis服務器進程,直到RDB文件創(chuàng)建完畢為止,在服務器進程阻塞期間,服務器不能處理其他任何命令請求。
而BGSAVE命令則不進行阻塞,它會派生出一個子進程,然后由子進程負責創(chuàng)建RDB文件,服務器進程繼續(xù)處理命令請求??梢栽谏厦娴闹噶钪锌吹綀?zhí)行BGSAVE指令后,終端顯示Background saving started
。
所以如果在業(yè)務高峰期要使用進行RDB持久化,建議是使用后者,可以防止某些請求丟失了。
1.4 生成AOF文件
AOF文件生成需要在Redis配置文件配置appendonly
的屬性值。
appendonly yes
重啟Redis執(zhí)行寫命令后,會生成appendonly.aof
文件。
也可以在終端手動設置appendonly
屬性值。
config set appendonly yes
2. AOF重寫
2.1 AOF概念
AOF文件是AOF持久化的產物,AOF持久化通過保存服務器所有執(zhí)行的寫命令來記錄數據庫狀態(tài)。而AOF文件重寫主要是為了解決AOF文件體積膨脹的問題。
對于一個鍵值對,AOF舊的文件會保存數十條對該鍵值對的修改命令,這樣浪費了大量內存空間。
而AOF文件重寫可以創(chuàng)建一個新的AOF文件來替代現有的AOF文件,新舊兩個AOF文件所保存的數據庫狀態(tài)相同,但新AOF文件不會包含任何浪費空間的冗余命令,使得新的AOF文件體積很小。
簡單來說,就是新的AOF文件只會保存鍵值對的最終狀態(tài)的創(chuàng)建命令。
2.2 多條命令記錄鍵值
如果每個鍵的創(chuàng)建只有一條命令,在執(zhí)行命令時可能會造成客戶端輸入緩沖區(qū)溢出。
Redis重寫程序在處理列表、哈希表、集合、有序集合這四種可能會帶有多個元素的鍵時,如果元素的數量超過了redis.h/REDIS_AOF_REWRITE_ITEMS_PER_CMD
常量的值,那么重寫程序將使用多條命令來記錄鍵的值,而不單單只使用一條命令。
2.3 AOF重寫緩沖區(qū)
AOF重寫過程中,有新的創(chuàng)建請求進來怎么辦?可以把這些新的創(chuàng)建請求寫入到一個緩沖區(qū)里。
Redis服務器會維護一個AOF重寫緩沖區(qū),該緩沖區(qū)會在子進程創(chuàng)建新AOF文件期間,記錄服務器執(zhí)行的所有寫命令。
等新的AOF文件創(chuàng)建完成,Redis服務器會將重寫緩沖區(qū)中的所有內容追加到新AOF文件的末尾,從而保證兩個新舊AOF文件狀態(tài)一致。
?你好,我是胡廣。?致力于為幫助兄弟們的學習方式、面試困難、入職經驗少走彎路而寫博客 🌹🌹🌹 堅持每天兩篇高質量文章輸出,加油!!!🤩
?如果本篇文章幫到了你 不妨點個贊吧~ 我會很高興的 😄 (^ ~ ^) 。想看更多 那就點個關注? ? ?吧 我會盡力帶來有趣的內容 。
?😎感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以? ? ? 給我留言咨詢,希望幫助更多的人
更多專欄:
📊 Java設計模式寶典:從入門到精通(持續(xù)更新)📝 Java基礎知識:GoGoGo(持續(xù)更新)
? Java面試寶典:從入門到精通(持續(xù)更新)
🌟 程序員的那些事~(樂一樂)
🤩 Redis知識、及面試(持續(xù)更新)
🚀 Kafka知識文章專欄(持續(xù)更新)
🎨?Nginx知識講解專欄(持續(xù)更新)
📡 未完待續(xù)。。。
🎯 未完待續(xù)。。。
🔍 未完待續(xù)。。。
感謝訂閱專欄 三連文章