1. 程式人生 > >redis 配置檔案說明

redis 配置檔案說明

# 當配置中需要配置記憶體大小時,可以使用 1k, 5GB, 4M 等類似的格式,其轉換方式如下(不區分大小寫)

#

# 1k => 

1000 bytes

# 1kb => 1024 bytes

# 1m => 1000000 bytes

# 1mb => 

1024*1024 bytes

# 1g => 1000000000 bytes

# 1gb => 1024*1024*1024 

bytes

#

# 記憶體配置大小寫是一樣的.比如 1gb 1Gb 1GB 1gB

 

daemonize no  預設情況下, redis 不是在後臺執行的,如果需要在後臺執行,把該項的值更改為 yes

daemonize yes

#  當 redis 在後臺執行的時候, Redis 預設會把 pid 檔案放在 /var/run/redis.pid,你可以配置到其他地址。

#  當執行多個 redis 服務時,需要指定不同的 pid 檔案和埠

pidfile /var/run/redis_6379.pid

#  指定 redis 執行的埠,預設是 6379

port 6379

#  在高併發的環境中,為避免慢客戶端的連線問題,需要設定一個高速後臺日誌

tcp-backlog 511

#  指定 redis 只接收來自於該 IP 地址的請求,如果不進行設定,那麼將處理所有請求

# bind 192.168.1.100 10.0.0.1

# bind 127.0.0.1

#  設定客戶端連線時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連線

# 0 是關閉此設定

timeout 0

# TCP keepalive

#  在 Linux 上,指定值(秒)用於傳送 ACKs 的時間。注意關閉連線需要雙倍的時間。預設為 0 。

tcp-keepalive 0

#  指定日誌記錄級別,生產環境推薦 notice

# Redis 總共支援四個級別: debug 、 verbose 、 notice 、 warning ,預設為verbose

# debug     記錄很多資訊,用於開發和測試

# varbose   有用的資訊,不像 debug 會記錄那麼多

# notice    普通的 verbose ,常用於生產環境

# warning   只有非常重要或者嚴重的資訊會記錄到日誌

loglevel notice

#  配置 log 檔案地址

#  預設值為 stdout ,標準輸出,若後臺模式會輸出到 /dev/null 。

logfile /var/log/redis/redis.log

#  可用資料庫數

#  預設值為 16 ,預設資料庫為 0 ,資料庫範圍在 0- ( database-1 )之間

databases 16

################################  快照  #################################

#  儲存資料到磁碟,格式如下 :

#   save <seconds> <changes>

#    指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案 rdb 。

#    相當於條件觸發抓取快照,這個可以多個條件配合

#    比如預設配置檔案中的設定,就設定了三個條件

#   save 900 1  900 秒內至少有 1 個 key 被改變

#   save 300 10  300 秒內至少有 300 個 key 被改變

#   save 60 10000  60 秒內至少有 10000 個 key 被改變

# save 900 1

# save 300 10

# save 60 10000

#  後臺儲存錯誤停止寫。

stop-writes-on-bgsave-error yes

#  儲存至本地資料庫時(持久化到 rdb 檔案)是否壓縮資料,預設為 yes

rdbcompression yes

# RDB 檔案的是否直接偶像 chcksum

rdbchecksum yes

#  本地持久化資料庫檔名,預設值為 dump.rdb

dbfilename dump.rdb

#  工作目錄

#  資料庫映象備份的檔案放置的路徑。

#  這裡的路徑跟檔名要分開配置是因為 redis 在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成時,

#  再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。

# AOF 檔案也會存放在這個目錄下面

#  注意這裡必須制定一個目錄而不是檔案

dir /var/lib/redis-server/

#################################  複製 #################################

#  主從複製 . 設定該資料庫為其他資料庫的從資料庫 .

#  設定當本機為 slav 服務時,設定 master 服務的 IP 地址及埠,在 Redis 啟動時,它會自動從 master 進行資料同步

# slaveof <masterip><masterport>

#  當 master 服務設定了密碼保護時 ( 用 requirepass 制定的密碼 )

# slave 服務連線 master 的密碼

# masterauth <master-password>

#  當從庫同主機失去連線或者複製正在進行,從機庫有兩種執行方式:

# 1)  如果 slave-serve-stale-data 設定為 yes( 預設設定 ) ,從庫會繼續響應客戶端的請求

# 2)  如果 slave-serve-stale-data 是指為 no ,出去 INFO 和 SLAVOF 命令之外的任何請求都會返回一個

#     錯誤 "SYNC with master in progress"

slave-serve-stale-data yes

#  配置 slave 例項是否接受寫。寫 slave 對儲存短暫資料(在同 master 資料同步後可以很容易地被刪除)是有用的,但未配置的情況下,客戶端寫可能會發送問題。

#  從 Redis2.6 後,預設 slave 為 read-only

slaveread-only yes

#  從庫會按照一個時間間隔向主庫傳送 PINGs. 可以通過 repl-ping-slave-period設定這個時間間隔,預設是 10 秒

# repl-ping-slave-period 10

# repl-timeout  設定主庫批量資料傳輸時間或者 ping 回覆時間間隔,預設值是60 秒

#  一定要確保 repl-timeout 大於 repl-ping-slave-period

# repl-timeout 60

#  在 slave socket 的 SYNC 後禁用 TCP_NODELAY

#  如果選擇“ yes ” ,Redis 將使用一個較小的數字 TCP 資料包和更少的頻寬將資料傳送到 slave , 但是這可能導致資料傳送到 slave 端會有延遲 , 如果是 Linux kernel 的預設配置,會達到 40 毫秒 .

#  如果選擇 "no" ,則傳送資料到 slave 端的延遲會降低,但將使用更多的頻寬用於複製 .

repl-disable-tcp-nodelay no

#  設定複製的後臺日誌大小。

#  複製的後臺日誌越大, slave 斷開連線及後來可能執行部分複製花的時間就越長。

#  後臺日誌在至少有一個 slave 連線時,僅僅分配一次。

# repl-backlog-size 1mb

#  在 master 不再連線 slave 後,後臺日誌將被釋放。下面的配置定義從最後一個 slave 斷開連線後需要釋放的時間(秒)。

# 0 意味著從不釋放後臺日誌

# repl-backlog-ttl 3600

#  如果 master 不能再正常工作,那麼會在多個 slave 中,選擇優先值最小的一個 slave 提升為 master ,優先值為 0 表示不能提升為 master 。

slave-priority 100

#  如果少於 N 個 slave 連線,且延遲時間 <=M 秒,則 master 可配置停止接受寫操作。

#  例如需要至少 3 個 slave 連線,且延遲 <=10 秒的配置:

# min-slaves-to-write 3

# min-slaves-max-lag 10

#  設定 0 為禁用

#   預設 min-slaves-to-write 為 0 (禁用), min-slaves-max-lag 為 10

##################################  安全 ###################################

#  設定客戶端連線後進行任何其他指定前需要使用的密碼。

#  警告:因為 redis 速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行 150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解

# requirepass foobared

#  命令重新命名 .

#  在一個共享環境下可以重新命名相對危險的命令。比如把 CONFIG 重名為一個不容易猜測的字元。

#  舉例 :

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

#  如果想刪除一個命令,直接把它重新命名為一個空字元 "" 即可,如下:

# rename-command CONFIG ""

###################################  約束 ###################################

#  設定同一時間最大客戶端連線數,預設無限制, Redis 可以同時開啟的客戶端連線數為 Redis 程序可以開啟的最大檔案描述符數,

#  如果設定  maxclients 0 ,表示不作限制。

#  當客戶端連線數到達限制時, Redis 會關閉新的連線並向客戶端返回 max number of clients reached 錯誤資訊

# maxclients 10000

#  指定 Redis 最大記憶體限制, Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後, Redis 會按照清除策略嘗試清除已到期的 Key

#  如果 Redis 依照策略清除後無法提供足夠空間,或者策略設定為 ”noeviction”,則使用更多空間的命令將會報錯,例如 SET, LPUSH 等。但仍然可以進行讀取操作

#  注意: Redis 新的 vm 機制,會把 Key 存放記憶體, Value 會存放在 swap 區

#  該選項對 LRU 策略很有用。

# maxmemory 的設定比較適合於把 redis 當作於類似 memcached 的快取來使用,而不適合當做一個真實的 DB 。

#  當把 Redis 當做一個真實的資料庫使用的時候,記憶體使用將是一個很大的開銷

# maxmemory <bytes>

#  當記憶體達到最大值的時候 Redis 會選擇刪除哪些資料?有五種方式可供選擇

# 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,只是返回一個寫錯誤

#  注意:對於上面的策略,如果沒有合適的 key 可以移除,當寫的時候 Redis 會返回一個錯誤

#  預設是 :  volatile-lru

# maxmemory-policy volatile-lru  

# LRU  和  minimal TTL 演算法都不是精準的演算法,但是相對精確的演算法 ( 為了節省記憶體 ) ,隨意你可以選擇樣本大小進行檢測。

# Redis 預設的灰選擇 3 個樣本進行檢測,你可以通過 maxmemory-samples 進行設定

# maxmemory-samples 3

############################## AOF###############################

#  預設情況下, 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 always

appendfsync everysec

# appendfsync no

# AOF 策略設定為 always 或者 everysec 時,後臺處理程序 ( 後臺儲存或者 AOF日誌重寫 ) 會執行大量的 I/O 操作

#  在某些 Linux 配置中會阻止過長的 fsync() 請求。注意現在沒有任何修復,即使fsync 在另外一個執行緒進行處理

#  為了減緩這個問題,可以設定下面這個引數 no-appendfsync-on-rewrite

預設值是 no

#yes : 在日誌重寫時,不進行命令追加操作,而只是將其放在緩衝區裡,避免與命令的追加造成DISK IO上的衝突。

#no : 在日誌重寫時,命令追加操作照常進行

no-appendfsync-on-rewrite 的解釋:

在預設情況下 當aof進行重寫的時候,aof的同步資訊不是關閉的。

在這種情況下 。子程序rewrite在寫硬碟 主程序 aof也在寫硬碟。在rewrite的過程中 子程序對主程序造成了磁碟阻塞(disk io衝突),導致了報警資訊的產生。

但是這個引數修改成 yes之後 ,又會有安全上的問題。

當rewrite的過程中 要是redis down掉的話 丟失的資料 就不是之前appendfsync 定下的策略。

而是整個 rewrite 過程中的所有資料。

no-appendfsync-on-rewrite no

# AOF  自動重寫

#  當 AOF 檔案增長到一定大小的時候 Redis 能夠呼叫  BGREWRITEAOF  對日誌檔案進行重寫

# Redis 會記住上次進行些日誌後文件的大小 ( 如果從開機以來還沒進行過重寫,那日誌大小在開機的時候確定 ),如果當前的AOF檔案的大小增加100%並且超過64mb時,就會自動觸發Redis改寫AOF檔案到RDB檔案中

#  同時需要指定一個最小大小用於 AOF 重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫 AOF 檔案的情況

#  設定  percentage 為 0 就關閉這個特性

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

################################ LUASCRIPTING #############################

#  一個 Lua 指令碼最長的執行時間為 5000 毫秒( 5 秒),如果為 0 或負數表示無限執行時間。

lua-time-limit 5000

################################LOW 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 128

################################  事件通知 #############################

#  當事件發生時, Redis 可以通知 Pub/Sub 客戶端。

#  可以在下表中選擇 Redis 要通知的事件型別。事件型別由單個字元來標識:

# K     Keyspace 事件,以 [email protected]<db>_ 的字首方式釋出

# E     Keyevent 事件,以 [email protected]<db>_ 的字首方式釋出

# g     通用事件(不指定型別),像 DEL, EXPIRE, RENAME, …

# $     String 命令

# s     Set 命令

# h     Hash 命令

# z     有序集合命令

# x     過期事件(每次 key 過期時生成)

# e     清除事件(當 key 在記憶體被清除時生成)

# A     g$lshzxe 的別稱,因此 ”AKE” 意味著所有的事件

# notify-keyspace-events 帶一個由 0 到多個字元組成的字串引數。空字串意思是通知被禁用。

#  例子:啟用 list 和通用事件:

# notify-keyspace-events Elg

#  預設所用的通知被禁用,因為使用者通常不需要改特性,並且該特性會有效能損耗。

#  注意如果你不指定至少 K 或 E 之一,不會發送任何事件。

notify-keyspace-events “”

##############################  高階配置 ###############################

#  當 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

# 客戶端的輸出緩衝區的限制,因為某種原因客戶端從伺服器讀取資料的速度不夠快,

# 可用於強制斷開連線(一個常見的原因是一個釋出 / 訂閱客戶端消費訊息的速度無法趕上生產它們的速度)。

#  可以三種不同客戶端的方式進行設定:

# normal ->  正常客戶端

# slave  -> slave 和 MONITOR 客戶端

# pubsub ->  至少訂閱了一個 pubsub channel 或 pattern 的客戶端

#  每個 client-output-buffer-limit 語法 :

# client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>

#  一旦達到硬限制客戶端會立即斷開,或者達到軟限制並保持達成的指定秒數(連續)。

#  例如,如果硬限制為 32 兆位元組和軟限制為 16 兆位元組 /10 秒,客戶端將會立即斷開

#  如果輸出緩衝區的大小達到 32 兆位元組,客戶端達到 16 兆位元組和連續超過了限制 10 秒,也將斷開連線。

#  預設 normal 客戶端不做限制,因為他們在一個請求後未要求時(以推的方式)不接收資料,

#  只有非同步客戶端可能會出現請求資料的速度比它可以讀取的速度快的場景。

#  把硬限制和軟限制都設定為 0 來禁用該特性

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb60

client-output-buffer-limit pubsub 32mb 8mb60

# Redis 呼叫內部函式來執行許多後臺任務,如關閉客戶端超時的連線,清除過期的 Key ,等等。

#  不是所有的任務都以相同的頻率執行,但 Redis 依照指定的“ Hz ”值來執行檢查任務。

#  預設情況下,“ Hz ”的被設定為 10 。

#  提高該值將在 Redis 空閒時使用更多的 CPU 時,但同時當有多個 key 同時到期會使 Redis 的反應更靈敏,以及超時可以更精確地處理。

#  範圍是 1 到 500 之間,但是值超過 100 通常不是一個好主意。

#  大多數使用者應該使用 10 這個預設值,只有在非常低的延遲的情況下有必要提高最大到 100 。

hz 10  

#  當一個子節點重寫 AOF 檔案時,如果啟用下面的選項,則檔案每生成 32M 資料進行同步。

aof-rewrite-incremental-fsync yes