標籤:
Redis設定檔redis.conf 詳解
1.基本配置
記憶體單位的表示
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
單位中不區分大小寫1GB 1Gb 1gB是一樣的
後台運行,yes是後台運行,no前台運行,將輸出,輸出到終端(預設)
daemonize yes
如果daemonize參數為yes的話就會產生pid檔案,一下是pid檔案的定義
pidfile /usr/local/redis-master/run/redis.pid
監聽的連接埠
port 6379
綁定監聽的IP地址
bind 127.0.0.1
如果在本地調用redis可以直接用sock檔案
unixsocket /tmp/redis.sock //sock檔案的位置
unixsocketperm 755 //sock檔案的許可權
如果一個連結在N秒內是閒置,就將其關閉
timeout 0
如果對方down了或者中間網路斷了發送ACK到用戶端在指定的時間內沒有收到對方的回應就斷開TCP連結(時間單位秒記),此參數會受到核心參數的影響,推薦配置60。
tcp-keepalive 0
指定輸出訊息的層級
# debug (調試層級,詳細資料,資訊量大)
# verbose (詳細資料,資訊量較大)
# notice (通知,生產環境推薦)
# warning (錯誤資訊警告資訊)
loglevel notice
日誌輸出檔案,預設在前端啟動並執行時候此key的預設值是stdout輸出到終端,如果用守護進程運行此key的stdout的時候將日誌輸入到/dev/null,如果想記錄日誌,就必須為其指定logfile位置
logfile /var/log/redis.log
將日誌記錄的哦syslog
syslog-enabled no
指定syslog的身份
syslog-ident redis
指定syslog的層級,必須是LOCAL0-LOCAL7之間
syslog-facility local0
設定資料庫的數量
databases 16
設定資料庫的數量。預設資料庫DB 0,你可以選擇一個不同的per-connection的使用SELECT<dbid>這兒的DBID是一個介於0和‘databases‘-1
databases 16
2.快照配置
將DB儲存到磁碟的規則定義(快照)
格式:save <seconds> <changes>
例子:save 900 1 //在900秒(15分鐘)內如果至少有1個索引值發生變化 就儲存
save 300 10 //在300秒(6分鐘)內如果至少有10個索引值發生變化 就儲存
save 900 1 //每一條表示一個存檔點
save 300 10
save 60 10000
如果啟用如上的快照(RDB),在一個存檔點之後,可能磁碟會壞掉或者許可權問題,redis將依然能正常工作
stop-writes-on-bgsave-error yes
是否將字串用LZF壓縮到.rdb 資料庫中,如果想節省CPU資源可以將其設定成no,但是字串儲存在磁碟上佔用空間會很大,預設是yes
rdbcompression yes
rdb檔案的校正,如果校正將避免檔案格式壞掉,如果不校正將在每次操作檔案時要付出校正過程的資源新能,將此參數設定為no,將跳過校正
rdbchecksum yes
轉儲資料的檔案名稱
dbfilename dump.rdb
redis的工作目錄,它會將轉儲檔案儲存體到這個目錄下,並產生一個附加檔案
dir /usr/local/redis-master/db
3.主從參數
如果本地是salve伺服器那麼配置該項
# slaveof <masterip> <masterport>
slaveof 127.0.0.1 65532
master的驗證密碼
masterauth <master-password>
當從主機脫離主的連結時,如果此值為yes當用戶端查詢從時,迴響應用戶端,如果是第一次同步回返回一個日期資料或這空值,如果設定為no,則返回“SYNC with master in progress”到INFO and SLAVEOF
slave-serve-stale-data yes
從伺服器唯讀(預設)
slave-read-only yes
從發送ping到主的時間間隔(單位:秒)
repl-ping-slave-period 10
批量傳輸I / O逾時和主要資料或ping響應逾時 預設60s 必須大於repl-ping-slave-period值
repl-timeout 60
此選項如果是“yes”那麼Redis的使用數量較少的TCP資料包和更少的頻寬將資料發送到,在從主機上延遲40毫秒(linux kernel中的40毫秒)出現。如果是no將在slave中減少延遲,但是流量使用回相對多一些,如果用多個從主機,此處建議設定成yes
repl-disable-tcp-nodelay no
從主機的優先順序,如果當主主機掛了的時候,將從從主機中選取一個作為其他從機的主,首先優先順序的數字最低的將成為主,0是一個特殊的層級,0將永遠不會成為主。預設值是100.
slave-priority 100
4.安全配置
密碼本機,如果別人要求連結需要其驗證
requirepass password
命令重新命名,如果更改命令可能在從伺服器上出現問題
例如:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 //將config命令命名成b840fc02d524045429941cc15f59e41cb7be6c52
rename-command CONFIG "" //預設是空的
5.極限
用戶端連結的最大數量
maxclients 10000
最大記憶體的使用 如果是主從的話,此值應該設定更低
maxmemory <bytes>
redias達到maxmemory時,如何刪除k&y
volatile-lru -> 用lru演算法刪除到期的索引值
allkeys-lru -> 用lru演算法刪除所有索引值
volatile-random -> 隨機刪除到期的索引值
allkeys-random -> 隨機刪除任何索引值
volatile-ttl -> 刪除最近要到期的索引值(監控TTL)
noeviction -> 不會寫操作,返回一個錯誤
At the date of writing this commands are: set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort
預設值例子如下:
maxmemory-policy volatile-lru
LRU和最小的TTL演算法是不準確,在幾個中挑幾個來檢查近期用的最少的索引值刪除,為了節約記憶體可以設定小點。
maxmemory-samples 3
6.append only
啟用AOF和RDB持久性,如果又一個或者多個寫入點時,在寫入點和寫入點之間的時間裡所有add的索引值回丟失,如果啟用此特性,redis會將add的值先寫入到附加檔案中,此參數預設就是啟用這個特性。
appendonly no
OAF檔案的檔案名稱
appendfilename appendonly.aof
append only檔案名稱是由 appendfilename appendonly.aof項來定義的,redias將資料立刻些如到AOF檔案中時,有三種方式:
no: 讓OS來重新整理資料 快
always:每次寫入後調用函數FSYNC進行寫入 最安全的
everysec: 每一秒進行調用FSYNC進行寫入
預設值:appendfsync everysec
如果磁碟效能問題比較慢,將其設定為yes,磁碟I/O比較寬裕則設定為no資料比較安全。
no-appendfsync-on-rewrite no
OAF檔案的寫規則
如下:如果達到64M的百分之百就停止寫入
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
7.LUA SCRIPTING
執行一個LUA指令碼時的最大時間,防止死迴圈等等,設定為0是沒有限制,單位為秒
lua-time-limit 5000
8.redias的慢查詢記錄
如果大於如下值的執行命令進行記錄,預設是10000,單位是微妙(1000000微秒 == 1秒),設定為一個負數時,警用此記錄,設定為0時,記錄任何執行命令
slowlog-log-slower-than 10000
此值的大小會影響記憶體的大小,回收記憶體可以用SLOWLOGRESET
slowlog-max-len 128
9.進階配置
Hash編碼使用高速記憶體資料結構的條目閾值
如果redisObject的type 成員值是 REDIS_LIST 類型的,則當該list 的 elem數小於配置值: hash-max-ziplist-entries 或者elem_value字串的長度小於 hash-max-ziplist-value, 則可以編碼成 REDIS_ENCODING_ZIPLIST 類型儲存,以節約記憶體. 否則採用 Dict 來儲存.
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
相同雜湊值的列表可以用特殊的表示方式儲存,以節約空間,閾值設定如下
如 type 是 REDIS_LIST 類型的,如果其 entry 小於配置值: list-max-ziplist-entries 或 value字串的長度小於 list-max-ziplist-value,則可以編碼成 REDIS_ENCODING_ZIPLIST 類型儲存,以節約記憶體; 否則採用 REDIS_ENCODING_LINKEDLIST 來儲存
list-max-ziplist-entries 512
list-max-ziplist-value 64
# Sets have a special encoding in just one case: when a set is composed
# of just strings that happens to be integers in radix 10 in the range
# of 64 bit signed integers.
# The following configuration setting sets the limit in the size of the
# set in order to use this special memory saving encoding.
如 type 是 REDIS_SET 類型的,如果其值可以表示成數字類型且 entry 小於配置值set-max-intset-entries, 則可以編碼成 REDIS_ENCODING_INTSET 類型儲存,以節約記憶體; 否則採用 Dict類型來儲存
set-max-intset-entries 512
相同的hash列表中,排序列表的元素和長度都不能高於如下值
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
重建hash表的時候如果記憶體不足 如果此值設定為no則延時,如果為yes則儘快釋放記憶體。
activerehashing yes
用戶端buffer限制,如果達到硬限制則立刻斷開
三種用戶端
# normal -> 正常用戶端
# slave -> 從用戶端或者監控用戶端
# pubsub -> 訂閱或者發布用戶端
用戶端限制的文法如下
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
預設如下
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60 //slave用戶端 buffer硬限制為256M,軟式節流為64MB/60秒 就中斷連線
client-output-buffer-limit pubsub 32mb 8mb 60
一個任務可以使用的cpu數目
hz 10
10.設定檔include
例子:
# include /path/to/local.conf
# include /path/to/other.conf
redis 設定檔詳解