一、Redis.conf詳解
容量單位
1、配置大小單位,開頭定義了一些基本的度量單位,只支持bytes,不支持bit,不區(qū)分大小寫,G和GB有區(qū)別
2、對 大小寫 不敏感
可以使用 include 組合多個配置問題
網(wǎng)絡配置
bind 127.0.0.1 # 綁定的ip
protected-mode yes # 保護模式,遠程時需要關閉
port 6379 # 默認端口
?指定多個ip 訪問 ip 用空格 隔開
通用 GENERAL
daemonize yes # 默認情況下,Redis不作為守護進程運行。需要開啟的話,改為 yes
supervised no # 可通過upstart和systemd管理Redis守護進程
pidfile /var/run/redis_6379.pid # 以后臺進程方式運行redis,則需要指定pid 文件
loglevel notice # 日志級別??蛇x項有:
# debug(記錄大量日志信息,適用于開發(fā)、測試階段);
# verbose(較多日志信息);
# notice(適量日志信息,使用于生產(chǎn)環(huán)境);
# warning(僅有部分重要、關鍵信息才會被記錄)。
logfile "" # 日志文件的位置,當指定為空字符串時,為標準輸出
databases 16 # 設置數(shù)據(jù)庫的數(shù)目。默認的數(shù)據(jù)庫是DB 0
always-show-logo yes # 是否總是顯示logo
數(shù)據(jù)庫的數(shù)量
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16
#設置數(shù)據(jù)庫個數(shù)。默認數(shù)據(jù)庫為“DB 0”,可選擇
#在每個連接上使用SELECT where
# dbid是一個介于0和'databases'-1之間的數(shù)字
databases 默認的數(shù)據(jù)庫數(shù)量 16 個
?快照 SNAPSHOTTING
持久化數(shù)據(jù) 因為 Redis是內(nèi)存數(shù)據(jù)庫 如果斷電等因素 會失去數(shù)據(jù) 所以我們需要在一定時間里 持久化數(shù)據(jù)
# 900秒(15分鐘)內(nèi)至少1個key值改變(則進行數(shù)據(jù)庫保存--持久化)
save 900 1
# 300秒(5分鐘)內(nèi)至少10個key值改變(則進行數(shù)據(jù)庫保存--持久化)
save 300 10
# 60秒(1分鐘)內(nèi)至少10000個key值改變(則進行數(shù)據(jù)庫保存--持久化)
save 60 10000
stop-writes-on-bgsave-error yes # 持久化出現(xiàn)錯誤后,是否依然進行繼續(xù)進行工作
rdbcompression yes # 使用壓縮rdb文件 yes:壓縮,但是需要一些cpu的消耗。no:不壓
縮,需要更多的磁盤空間
rdbchecksum yes # 是否校驗rdb文件,更有利于文件的容錯性,但是在保存rdb文件的時
候,會有大概10%的性能損耗
dbfilename dump.rdb # dbfilenamerdb文件名稱
dir ./ # dir 數(shù)據(jù)目錄,數(shù)據(jù)庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
?安全 SECURITY
requirepass xxxxx
?設置redis 登錄密碼
# Require clients to issue AUTH <PASSWORD> before processing any other
# commands. This might be useful in environments in which you do not trust
# others with access to the host running redis-server.
#
# This should stay commented out for backward compatibility and because most
# people do not need auth (e.g. they run their own servers).
#
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
# requirepass foobared
??訪問密碼的查看,設置和取消
# 啟動redis
# 連接客戶端
# 獲得和設置密碼
config get requirepass
config set requirepass "123456"
#測試ping,發(fā)現(xiàn)需要驗證
127.0.0.1:6379> ping
NOAUTH Authentication required.
# 驗證
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG
限制 CLIENTS
maxclients 10000 # 設置能連上redis的最大客戶端連接數(shù)量
maxmemory <bytes> # redis配置的最大內(nèi)存容量
maxmemory-policy noeviction # maxmemory-policy 內(nèi)存達到上限的處理策略
#volatile-lru:利用LRU算法移除設置過過期時間的key。
#volatile-random:隨機移除設置過過期時間的key。
#volatile-ttl:移除即將過期的key,根據(jù)最近過期時間來刪除(輔以TTL)
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:隨機移除任何key。
#noeviction:不移除任何key,只是返回一個寫錯誤。
aof配置 APPEND ONLY MODE
appendonly no # 是否以append only模式作為持久化方式,默認使用的是rdb方式持久化,這種
方式在許多應用中已經(jīng)足夠用了
appendfilename "appendonly.aof" # appendfilename AOF 文件名稱
appendfsync everysec # appendfsync aof持久化策略的配置
# no表示不執(zhí)行fsync,由操作系統(tǒng)保證數(shù)據(jù)同步到磁盤,速度最快。
# always表示每次寫入都執(zhí)行fsync,以保證數(shù)據(jù)同步到磁盤。
# everysec表示每秒執(zhí)行一次fsync,可能會導致丟失這1s數(shù)據(jù)。
# appendfsync always // 每修改一個key都會執(zhí)行 sync,消耗性能
appendfsync everysec // 每一秒執(zhí)行一次 sync,可能會丟失這1s的數(shù)據(jù)
# appendfsync no // 不執(zhí)行 sync,這個時候操作系統(tǒng)會自己同步數(shù)據(jù)速度是最快的
二、Redis持久化
?Redis 是內(nèi)存數(shù)據(jù)庫,如果不將內(nèi)存中的數(shù)據(jù)庫狀態(tài)保存到磁盤,那么一旦服務器進程退出,服務器中的數(shù)據(jù)庫狀態(tài)也會消失。所以 Redis 提供了持久化功能!
redis持久化的幾種方案
- RDB (Redis Database)
- AOF (Append Only File)
- No persistence:
- RDB + AOF
2.1RDB (Redis DataBase)
在指定時間間隔后,將內(nèi)存中的數(shù)據(jù)集快照寫入數(shù)據(jù)庫 ;在恢復時候,直接讀取快照文件,進行數(shù)據(jù)的恢復 ; 默認情況下, Redis 將數(shù)據(jù)庫快照保存在名字為 dump.rdb的二進制文件中。文件名可以在配置文件中進行自定義。
在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復時是將快照文件直接讀到內(nèi)存里。?
Redis會單獨創(chuàng)建(fork)一個子進程來進行持久化,會先將數(shù)據(jù)寫入到一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。整個過程中,主進程是不進行任何IO操作的。這就確保了極高的性能。如果需要進行大規(guī)模數(shù)據(jù)的恢復,且對于數(shù)據(jù)恢復的完整性
不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最后一次持久化后的數(shù)據(jù)可能丟失。
觸發(fā)機制#
- save的規(guī)則滿足的情況下,會自動觸發(fā)rdb原則
- 執(zhí)行flushall命令,也會觸發(fā)我們的rdb原則
- 退出redis,也會自動產(chǎn)生rdb文件
save#
使用 save 命令,會立刻對當前內(nèi)存中的數(shù)據(jù)進行持久化 ,但是會阻塞,也就是不接受其他操作了;
由于 save 命令是同步命令,會占用Redis的主進程。若Redis數(shù)據(jù)非常多時,save命令執(zhí)行速度會非常慢,阻塞所有客戶端的請求。
flushall命令#
flushall 命令也會觸發(fā)持久化 ;
觸發(fā)持久化規(guī)則 滿足配置條件中的觸發(fā)條件 ;
可以通過配置文件對 Redis 進行設置, 讓它在“ N 秒內(nèi)數(shù)據(jù)集至少有 M 個改動”這一條件被滿足時, 自動進行數(shù)據(jù)集保存操作。
bgsave#
bgsave 是異步進行,進行持久化的時候,redis 還可以將繼續(xù)響應客戶端請求 ;
?
LASTSAVE:獲取最近一次RDB的時間戳
?總結如何觸發(fā)RDB快照
- 配置文件中默認的快照配置,建議多用一臺機子作為備份,復制一份 dump.rdb
命令save或者是bgsave
- save 時只管保存,其他不管,全部阻塞
- bgsave,Redis 會在后臺異步進行快照操作,快照同時還可以響應客戶端請求??梢酝ㄟ^lastsave命令獲取最后一次成功執(zhí)行快照的時間。
- 執(zhí)行?ushall命令,也會產(chǎn)生 dump.rdb 文件,但里面是空的,無意義 !
- 退出的時候也會產(chǎn)生 dump.rdb 文件!
- 主從復制時,主節(jié)點自動觸發(fā)
如何恢復
1、將備份文件(dump.rdb)移動到redis安裝目錄并啟動服務即可
2、CONFIG GET dir 獲取目錄?
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> CONFIG GET save
1) "save"
2) "5 2"
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/root/redis-dump"
127.0.0.1:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "6379.rdb"
127.0.0.1:6379>
?RDB 優(yōu)缺點
優(yōu)點
- 適合大規(guī)模的數(shù)據(jù)恢復
- 對數(shù)據(jù)的完整性要求不高
- RDB文件在內(nèi)存中的加載速度比AOF快得多
缺點
RDB 修復命令
redis-check-rdb /root/redis-dump/dump6379.rdb
RDB禁用
- config set save “”,命令級別
- save “” ,配置文件(快照禁用)
RDB優(yōu)化參數(shù)
stop-writes-on-bgsave-error:
- 默認值:yes
- 描述:當在執(zhí)行BGSAVE(后臺保存)操作時發(fā)生錯誤時,是否停止寫入操作。如果設置為"yes",則當BGSAVE操作失敗時,Redis將拒絕寫入操作;如果設置為"no",則即使BGSAVE操作失敗,Redis仍然可以接受寫入操作。
rdbcompression:
- 默認值:yes
- 描述:是否對RDB文件進行壓縮。啟用壓縮可以減小RDB文件的大小,但在保存和加載RDB文件時會增加CPU的使用量。
rdbchecksum:
- 默認值:yes
- 描述:是否在RDB文件中包含校驗和。啟用校驗和可以確保RDB文件的完整性,但會增加一些額外的計算開銷。
rdb-del-sync-files:
- 默認值:no
- 描述:是否在刪除RDB文件時同步刪除文件。啟用此選項可以確保刪除RDB文件時立即釋放磁盤空間,但可能會降低性能。
2.2?AOF (Append Only File)
Aof保存的是 appendonly.aof 文件?
將我們所有的命令都記錄下來,history,恢復的時候就把這個文件全部再執(zhí)行一遍
?
以日志的形式來記錄每個寫操作,將Redis執(zhí)行過的所有指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,redis啟動之初會讀取
該文件重新構建數(shù)據(jù),換言之,redis重啟的話就根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復工作
配置
appendonly no # 是否以append only模式作為持久化方式,默認使用的是rdb方式持久化,這
種方式在許多應用中已經(jīng)足夠用了
appendfilename "appendonly.aof" # appendfilename AOF 文件名稱
appendfsync everysec # appendfsync aof持久化策略的配置
# no表示不執(zhí)行fsync,由操作系統(tǒng)保證數(shù)據(jù)同步到磁盤,速度最快。
# always表示每次寫入都執(zhí)行fsync,以保證數(shù)據(jù)同步到磁盤。
# everysec表示每秒執(zhí)行一次fsync,可能會導致丟失這1s數(shù)據(jù)。
No-appendfsync-on-rewrite #重寫時是否可以運用Appendfsync,用默認no即可,保證數(shù)據(jù)安
全性
Auto-aof-rewrite-min-size # 設置重寫的基準值
Auto-aof-rewrite-percentage #設置重寫的基準值
默認是沒有開啟的 我們需要的話需要手動開啟 把?appendonly no
?改為?appendonly yes
如果Aof文件受損了Redis啟動不起來 我們可以通過?redis-check-aof --fix
?來修復aof文件
?AOF 持久化工作流程
AOF 緩沖區(qū)三種寫回策略
- always 同步寫回,每個寫命令執(zhí)行完立刻同步地將日志寫回磁盤
- everysec (默認)每秒寫回,每個寫命令執(zhí)行完,只是先把日志寫到AOF緩沖區(qū),每隔1s把緩存區(qū)地數(shù)據(jù)寫入磁盤
- no操作系統(tǒng)控制寫回,只是將日志先寫到AOF文件的內(nèi)存緩沖區(qū),由操作系統(tǒng)決定何時將緩沖區(qū)內(nèi)容寫回磁盤
優(yōu)化參數(shù)
優(yōu)缺點
優(yōu)點
- 每一次修改都會同步,文件的完整性會更加好
- 每秒同步一次,可能會丟失一秒的數(shù)據(jù)
- 從不同步,效率最高
缺點
- 相對于數(shù)據(jù)文件來說,aof遠遠大于rdb,修復速度比rdb慢!
- Aof運行效率也要比rdb慢,所以我們redis默認的配置就是rdb持久化
AOF重寫機制(Log rewriting)
AOF 文件持續(xù)增長而過大時,會fork出一條新進程來將文件重寫(也是先寫臨時文件最后再rename),遍歷新進程的內(nèi)存中數(shù)據(jù),每條記錄有一條的Set語句。重寫aof文件的操作,并沒有讀取舊的aof文件,這點和快照有點類似!
觸發(fā)機制:
Redis會記錄上次重寫時的AOF大小,默認配置是當AOF文件大小是上次rewrite后大小的已被且文件大于64M的觸發(fā)。
2.3RDB+AOF混合
AOF默認是關閉的,當兩者共存時,AOF的優(yōu)先級高
同時開啟兩種持久化方式
- 當redis 重啟時候會優(yōu)先載入AOF文件來恢復原始的數(shù)據(jù),因為在通常情況下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整
- RDB的數(shù)據(jù)不實時,同時使用兩者時服務器重啟也只會找AOF文件。
- 那要不要只使用AOF呢
- 安特雷茲建議不要
- 因為RDB更適合用于備份數(shù)據(jù)庫(AOF不斷變化不好備份),留著AOF作為一個萬一的手段
- 那要不要只使用AOF呢
文章來源:http://www.zghlxwxcb.cn/news/detail-846890.html
2.4純緩存模式
同時關閉RDB + AOF文章來源地址http://www.zghlxwxcb.cn/news/detail-846890.html
- save “”
- 禁用rdb
- 禁用db持久化模式下,我們?nèi)匀豢梢允褂妹顂ave、bgsave生成rdb文件
- appendonly no
- 禁用aof
- 禁用aof持久化模式下,我們?nèi)匀豢梢允褂妹?bgrewriteaof生成aof文件
2.5總結
- RDB 持久化方式能夠在指定的時間間隔內(nèi)對你的數(shù)據(jù)進行快照存儲
- AOF 持久化方式記錄每次對服務器寫的操作,當服務器重啟的時候會重新執(zhí)行這些命令來恢復原始的數(shù)據(jù),AOF命令以Redis 協(xié)議追加保存每次寫的操作到文件末尾,Redis還能對AOF文件進行后臺重寫,使得AOF文件的體積不至于過大。
- 只做緩存,如果你只希望你的數(shù)據(jù)在服務器運行的時候存在,你也可以不使用任何持久化
到了這里,關于redis進階入門配置與持久化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!