redis.conf 配置档详解
最近對 Redis 數據庫非常感興趣,所以想詳細整理下配置檔中的參數以及意義! 下面開始
基本配置
redis 對單位不區分大小寫,所以1kb = 1KB =1kB
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes
redis 默認不作為守護程序在后臺運行,如果需要,則選擇 yes
daemonize yes
redis 運行時pid文件保存在 /var/run/redis/redis.pid ,當然你也可以自己指定
pidfile /var/run/redis/redis.pid
redis 默認監聽端口為 6379 ,如果設置為 0 ,則 redis 不會監聽一個套接字
port 6379
redis 所綁定的 ip 地址
bind 10.1.0.100
redis 關閉連接后,客戶端空閑 N 秒,0禁用
timeout 0
redis 日志級別定義,有下面幾個選項
debug : 幾乎用不到
verbose : 輸出很多無用信息
notice : 默認定義,輸出一些提示信息
warning : 輸出重大錯誤信息
loglevel notice
redis 日志位置
logfile /var/log/redis/redis.log
redis 數據庫個數定義
databases 16
SNAPSHOTTING
redis 保存快照定義 (RDB 持久化)
save ‘seconds’ ‘changes’
save 900 1 #900秒(15分鐘)如果至少有1個關鍵的變化
save 300 10 #300秒(5分鐘)如果至少10鍵改變
save 60 10000 #60秒后如果至少10000鍵改變
redis RDB 壓縮
如果你想節約CPU,那么則選擇 no,默認開啟,并且你有可壓縮的值或鍵,那么會更大!
rdbcompression yes
redis RDB 文件名
dbfilename dump.rdb
redis 存放 dump.rdb 的目錄
dir /var/lib/redis/
REPLICATION
redis 主從復制區,指定一個 redis 服務器作為slave。那么該 redis 服務器則是其他 redis 服務器的 slave。
redis 從服務器指定
slaveof “masterip” “masterport”
redis master服務設置了密碼保護時,slave服務連接master的密碼
masterauth “master-password”
redis master slave 設置
當 slave 和 master 之間的連接斷開或 slave 正在于 master 同步時,如果有 slave 請求,當 slave-serve-stale-data 配置為 yes時 , slave 可以相應客戶端請求;當為 no 時, slave 將要響應錯誤,默認是 yes
slave-serve-stale-data yes
slave 會按照一個時間間隔向 master 發送 PINGs. 可以通過 repl-ping-slave-period 設置這個時間間隔,默認是 10 秒
repl-ping-slave-period 10
設置主庫批量數據傳輸時間或者 ping 回復時間間隔,默認值是 60 秒,該值必須大于 repl-ping-slave-period 的值。
repl-timeout 60
SECURITY
設置客戶端連接后進行任何其他指定前需要使用的密碼。
警告:因為 redis 速度相當快,所以在一臺比較好的服務器下,一個外部的用戶可以在一秒鐘進行 150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解
requirepass foobared
LIMITS
設置同一時間最大客戶端連接數,默認無限制, Redis 可以同時打開的客戶端連接數為 Redis 進程可以打開的最大文件描述符數,如果設置 maxclients 0 ,表示不作限制。
當客戶端連接數到達限制時, Redis 會關閉新的連接并向客戶端返回 max number of clients reached 錯誤信息
maxclients 10000
maxmemory 的設置比較適合于把 redis 當作于類似 memcached 的緩存來使用,而不適合當做一個真實的 DB 。當把 Redis 當做一個真實的數據庫使用的時候,內存使用將是一個很大的開銷。
maxmemory “bytes”
當內存達到最大值的時候 Redis 會選擇刪除哪些數據?有五種方式可供選擇。
注意:對于上面的策略,如果沒有合適的 key 可以移除,當寫的時候 Redis 會返回一個錯誤。默認是 : volatile-lru。
maxmemory-policy volatile-lru
volatile-lru -> 利用 LRU 算法移除設置過過期時間的 key (LRU: 最近使用 Least RecentlyUsed )
allkeys-lru -> 利用 LRU 算法移除任何 key
volatile-random -> 移除設置過過期時間的隨機 key
allkeys->random -> remove a randomkey, any key
volatile-ttl -> 移除即將過期的 key (minor TTL)
noeviction -> 不移除任何 key ,只是返回一個寫錯誤
Redis 默認的會選擇 3 個樣本進行檢測,你可以通過 maxmemory-samples 進行設置
maxmemory-samples 3
APPEND ONLY MODE
默認情況下, redis 會在后臺異步的把數據庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那么將造成比較大范圍的數據丟失。
所以 redis 提供了另外一種更加高效的數據庫備份及災難恢復方式。
開啟 append only 模式之后, redis 會把所接收到的每一次寫操作請求都追加到 appendonly.aof 文件中,當 redis 重新啟動時,會從該文件恢復出之前的狀態。
但是這樣會造成 appendonly.aof 文件過大,所以 redis 還支持了 BGREWRITEAOF 指令,對 appendonly.aof 進行重新整理。
你可以同時開啟 asynchronous dumps 和 AOF
appendonly no
AOF 文件名稱 ( 默認 : “appendonly.aof”)
appendfilename appendonly.aof
Redis 支持三種同步 AOF 文件的策略 :
no: 不進行同步,系統去操作 . Faster.
always: always 表示每次有寫操作都進行同步 . Slow, Safest.
everysec: 表示對寫操作進行累積,每秒同步一次 . Compromise.
默認是 “everysec” ,按照速度和安全折中這是最好的。
如果想讓 Redis 能更高效的運行,你也可以設置為 “no” ,讓操作系統決定什么時候去執行,或者相反想讓數據更安全你也可以設置為 “always”,如果不確定就用 “everysec”.
appendfsync everysec
appendfsync always
appendfsync no
AOF 策略設置為 always 或者 everysec 時,后臺處理進程 ( 后臺保存或者 AOF 日志重寫 ) 會執行大量的 I/O 操作,在某些 Linux 配置中會阻止過長的 fsync() 請求。注意現在沒有任何修復,即使 fsync 在另外一個線程進行處理,為了減緩這個問題,可以設置下面這個參數 no-appendfsync-on-rewrite
no-appendfsync-on-rewrite no
AOF 自動重寫
當 AOF 文件增長到一定大小的時候 Redis 能夠調用 BGREWRITEAOF 對日志文件進行重寫。
它是這樣工作的: Redis 會記住上次進行些日志后文件的大小 ( 如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定 ) 基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動; 同時需要指定一個最小大小用于 AOF 重寫,這個用于阻止即使文件很小但是增長幅度很大也去重寫 AOF 文件的情況,設置 percentage 為 0 就關閉這個特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
SLOW LOG
Redis Slow Log 記錄超過特定執行時間的命令。執行時間不包括 I/O 計算比如連接客戶端,返回結果等,只是命令執行時間可以通過兩個參數設置 slow log :一個是告訴 Redis 執行超過多少時間被記錄的參數 slowlog-log-slower-than( 微秒 ) ,另一個是 slow log 的長度。當一個新命令被記錄的時候最早的命令將被從隊列中移除。
下面的時間以微妙為單位,因此 1000000 代表一秒。
注意指定一個負數將關閉慢日志,而設置為 0 將強制每個命令都會記錄
slowlog-log-slower-than 10000
配置記錄慢查詢的最大條數,對日志長度沒有限制,只是要注意它會消耗內存,可以通過 SLOWLOG RESET 回收被慢日志消耗的內存,推薦使用默認值 128 ,當慢日志超過 128 時,最先進入隊列的記錄會被踢出。
slowlog-max-len 1024
高級配置
當 hash 中包含超過指定元素個數并且最大的元素沒有超過臨界時,hash 將以一種特殊的編碼方式(大大減少內存使用)來存儲,這里可以設置這兩個臨界值,Redis Hash 對應 Value 內部實際就是一個 HashMap ,實際這里會有 2 種不同實現,這個 Hash 的成員比較少時 Redis 為了節省內存會采用類似一維數組的方式來緊湊存儲,而不會采用真正的 HashMap 結構,對應的valueredisObject 的 encoding 為 zipmap。
當成員數量增大時會自動轉成真正的 HashMap, 此時 encoding 為 ht 。
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
和 Hash 一樣,多個小的 list 以特定的方式編碼來節省空間。list 數據類型節點值大小小于多少字節會采用緊湊存儲格式。
list-max-ziplist-entries 512
list-max-ziplist-value 64
set 數據類型內部數據如果全部是數值型,且包含多少節點以下會采用緊湊格式存儲。
set-max-intset-entries 512
和 hashe 和 list 一樣 , 排序的 set 在指定的長度內以指定編碼方式存儲以節省空間,zsort 數據類型節點值大小小于多少字節會采用緊湊存儲格式。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
Redis 將在每 100 毫秒時使用 1 毫秒的 CPU 時間來對 redis 的 hash 表進行重新 hash ,可以降低內存的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受 Redis 時不時的對請求有 2 毫秒的延遲的話,把這項配置為 no 。
如果沒有這么嚴格的實時性要求,可以設置為 yes ,以便能夠盡可能快的釋放內存
activerehashing yes
總結
以上是生活随笔為你收集整理的redis.conf 配置档详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xpath IE 7
- 下一篇: PHP7安装笔记