一、INCLUDES
include /path/to/local.conf
額外載入配置文件猪腕,如果有需要的話冗澈,可以開啟此配置
二、NETWORK
bind 127.0.0.1
綁定redis服務(wù)器網(wǎng)卡IP陋葡,默認(rèn)為127.0.0.1,即本地回環(huán)地址亚亲。這樣的話,訪問redis服務(wù)只能通過本機(jī)的客戶端連接脖岛,而無法通過遠(yuǎn)程連接朵栖。如果bind選項為空的話颊亮,那會接受所有來自于可用網(wǎng)絡(luò)接口的連接柴梆。如上配置,綁定一個127.0.0.1的本機(jī)地址和192.168.1.100的外網(wǎng)地址终惑。
protected-mode yes
保護(hù)模式绍在,默認(rèn)是開啟狀態(tài),只允許本地客戶端連接雹有, 可以設(shè)置密碼或添加bind來連接
port 6379
監(jiān)聽端口號偿渡,默認(rèn)為6379,如果設(shè)為0霸奕,redis將不在socket 上監(jiān)聽任何客戶端連接
tcp-backlog 511
TCP監(jiān)聽的最大容納數(shù)量溜宽,在高并發(fā)的環(huán)境下,你需要把這個值調(diào)高以避免客戶端連接緩慢的問題质帅。Linux 內(nèi)核會把這個值縮小成 /proc/sys/net/core/somaxconn對應(yīng)的值适揉,要提升并發(fā)量需要修改這兩個值才能達(dá)到目的
unixsocket /tmp/redis.sock
unixsocketperm 700
指定redis監(jiān)聽的unix socket路徑留攒,默認(rèn)不啟用,unixsocketper指定文件的權(quán)限
timeout 0
指定在一個 client 空閑多少秒之后關(guān)閉連接(0表示永不關(guān)閉)
tcp-keepalive 300
單位是秒嫉嘀,表示將周期性的使用SO_KEEPALIVE檢測客戶端是否還處于健康狀態(tài)炼邀,避免服務(wù)器一直阻塞,官方給出的建議值是300s剪侮,如果設(shè)置為0拭宁,則不會周期性的檢測
三、GENERAL
daemonize yes
默認(rèn)情況下 redis 不是作為守護(hù)進(jìn)程運行的瓣俯,如果你想讓它在后臺運行杰标,你就把它改成 yes。當(dāng)redis作為守護(hù)進(jìn)程運行的時候降铸,它會寫一個 pid 到 /var/run/redis.pid 文件里面
supervised no
可以通過upstart和systemd管理Redis守護(hù)進(jìn)程
選項:
supervised no - 沒有監(jiān)督互動
supervised upstart - 通過將Redis置于SIGSTOP模式來啟動信號
supervised systemd - signal systemd將READY = 1寫入$ NOTIFY_SOCKET
supervised auto - 檢測upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET環(huán)境變量
pidfile /var/redis/run/redis_6379.pid
配置PID文件路徑在旱,當(dāng)redis作為守護(hù)進(jìn)程運行的時候,它會把 pid 默認(rèn)寫到 /var/redis/run/redis_6379.pid 文件里面
loglevel notice
定義日志級別推掸。
可以是下面的這些值:
debug(記錄大量日志信息桶蝎,適用于開發(fā)、測試階段)
verbose(較多日志信息)
notice(適量日志信息谅畅,使用于生產(chǎn)環(huán)境)
warning(僅有部分重要登渣、關(guān)鍵信息才會被記錄)
logfile /var/redis/log/redis_6379.log
日志文件的位置,當(dāng)指定為空字符串時毡泻,為標(biāo)準(zhǔn)輸出胜茧,如果redis已守護(hù)進(jìn)程模式運行,那么日志將會輸出到/dev/null
syslog-enabled no
要想把日志記錄到系統(tǒng)日志仇味,就把它改成 yes呻顽,也可以可選擇性的更新其他的syslog 參數(shù)以達(dá)到你的要求
syslog-ident redis
設(shè)置系統(tǒng)日志的ID
syslog-facility local0
指定系統(tǒng)日志設(shè)置,必須是 USER 或者是 LOCAL0-LOCAL7 之間的值
databases 16
設(shè)置數(shù)據(jù)庫的數(shù)目丹墨。默認(rèn)的數(shù)據(jù)庫是DB 0 廊遍,可以在每個連接上使用select <dbid> 命令選擇一個不同的數(shù)據(jù)庫,dbid是一個介于0到databases - 1 之間的數(shù)值贩挣。
四喉前、SNAPSHOTTING
save 900 1
save 300 10
save 60 10000
存 DB 到磁盤:
格式:save <間隔時間(秒)> <寫入次數(shù)>
根據(jù)給定的時間間隔和寫入次數(shù)將數(shù)據(jù)保存到磁盤
下面的例子的意思是:
900 秒內(nèi)如果至少有 1 個 key 的值變化,則保存
300 秒內(nèi)如果至少有 10 個 key 的值變化王财,則保存
60 秒內(nèi)如果至少有 10000 個 key 的值變化卵迂,則保存
注意:你可以注釋掉所有的 save 行來停用保存功能。
也可以直接一個空字符串來實現(xiàn)停用:
save ""
stop-writes-on-bgsave-error yes
如果用戶開啟了RDB快照功能绒净,那么在redis持久化數(shù)據(jù)到磁盤時如果出現(xiàn)失敗见咒,默認(rèn)情況下,redis會停止接受所有的寫請求挂疆。
這樣做的好處在于可以讓用戶很明確的知道內(nèi)存中的數(shù)據(jù)和磁盤上的數(shù)據(jù)已經(jīng)存在不一致了改览。
如果redis不顧這種不一致哎垦,一意孤行的繼續(xù)接收寫請求,就可能會引起一些災(zāi)難性的后果恃疯。
如果下一次RDB持久化成功漏设,redis會自動恢復(fù)接受寫請求。
如果不在乎這種數(shù)據(jù)不一致或者有其他的手段發(fā)現(xiàn)和控制這種不一致的話今妄,可以關(guān)閉這個功能郑口,
以便在快照寫入失敗時,也能確保redis繼續(xù)接受新的寫請求盾鳞。
rdbcompression yes
對于存儲到磁盤中的快照犬性,可以設(shè)置是否進(jìn)行壓縮存儲。
如果是的話腾仅,redis會采用LZF算法進(jìn)行壓縮乒裆。如果你不想消耗CPU來進(jìn)行壓縮的話,
可以設(shè)置為關(guān)閉此功能推励,但是存儲在磁盤上的快照會比較大鹤耍。
rdbchecksum yes
在存儲快照后,我們還可以讓redis使用CRC64算法來進(jìn)行數(shù)據(jù)校驗验辞,但是這樣做會增加大約10%的性能消耗稿黄,
如果希望獲取到最大的性能提升,可以關(guān)閉此功能跌造。
dbfilename dump.rdb
設(shè)置快照的文件名
dir /var/redis/6379
設(shè)置快照文件的存放路徑杆怕,這個配置項一定是個目錄,而不能是文件名
五壳贪、REPLICATION
slaveof <masterip> <masterport>
主從復(fù)制陵珍,使用 slaveof 來讓一個 redis 實例成為另一個reids 實例的副本,默認(rèn)關(guān)閉
注意這個只需要在 slave 上配置
masterauth <master-password>
如果 master 需要密碼認(rèn)證违施,就在這里設(shè)置互纯,默認(rèn)不設(shè)置
slave-serve-stale-data yes
當(dāng)一個 slave 與 master 失去聯(lián)系,或者復(fù)制正在進(jìn)行的時候醉拓,
slave 可能會有兩種表現(xiàn):
- 如果為 yes 伟姐,slave 仍然會應(yīng)答客戶端請求收苏,但返回的數(shù)據(jù)可能是過時亿卤,
或者數(shù)據(jù)可能是空的在第一次同步的時候 - 如果為 no ,在你執(zhí)行除了 info he salveof 之外的其他命令時鹿霸,
slave 都將返回一個 "SYNC with master in progress" 的錯誤
slave-read-only yes
你可以配置一個 slave 實體是否接受寫入操作排吴。
通過寫入操作來存儲一些短暫的數(shù)據(jù)對于一個 slave 實例來說可能是有用的,
因為相對從 master 重新同步數(shù)而言懦鼠,據(jù)數(shù)據(jù)寫入到 slave 會更容易被刪除钻哩。
但是如果客戶端因為一個錯誤的配置寫入屹堰,也可能會導(dǎo)致一些問題。
從 redis 2.6 版起街氢,默認(rèn) slaves 都是只讀的扯键。
repl-diskless-sync no
主從數(shù)據(jù)復(fù)制是否使用無硬盤復(fù)制功能。
新的從站和重連后不能繼續(xù)備份的從站珊肃,需要做所謂的“完全備份”荣刑,即將一個RDB文件從主站傳送到從站。
這個傳送有以下兩種方式:
1)硬盤備份:redis主站創(chuàng)建一個新的進(jìn)程伦乔,用于把RDB文件寫到硬盤上厉亏。過一會兒,其父進(jìn)程遞增地將文件傳送給從站烈和。
2)無硬盤備份:redis主站創(chuàng)建一個新的進(jìn)程爱只,子進(jìn)程直接把RDB文件寫到從站的套接字,不需要用到硬盤招刹。
在硬盤備份的情況下恬试,主站的子進(jìn)程生成RDB文件。一旦生成疯暑,多個從站可以立即排成隊列使用主站的RDB文件忘渔。
在無硬盤備份的情況下,一次RDB傳送開始缰儿,新的從站到達(dá)后畦粮,需要等待現(xiàn)在的傳送結(jié)束,才能開啟新的傳送乖阵。
如果使用無硬盤備份宣赔,主站會在開始傳送之間等待一段時間(可配置,以秒為單位)瞪浸,希望等待多個子站到達(dá)后并行傳送儒将。
在硬盤低速而網(wǎng)絡(luò)高速(高帶寬)情況下,無硬盤備份更好对蒲。
repl-diskless-sync-delay 5
當(dāng)啟用無硬盤備份钩蚊,服務(wù)器等待一段時間后才會通過套接字向從站傳送RDB文件,這個等待時間是可配置的蹈矮。
這一點很重要砰逻,因為一旦傳送開始,就不可能再為一個新到達(dá)的從站服務(wù)泛鸟。從站則要排隊等待下一次RDB傳送蝠咆。因此服務(wù)器等待一段
時間以期更多的從站到達(dá)。
延遲時間以秒為單位,默認(rèn)為5秒刚操。要關(guān)掉這一功能闸翅,只需將它設(shè)置為0秒,傳送會立即啟動菊霜。
repl-ping-slave-period 10
從redis會周期性的向主redis發(fā)出PING包坚冀,你可以通過repl_ping_slave_period指令來控制其周期,默認(rèn)是10秒鉴逞。
repl-timeout 60
接下來的選項為以下內(nèi)容設(shè)置備份的超時時間:
1)從從站的角度遗菠,同步期間的批量傳輸?shù)腎/O
2)從站角度認(rèn)為的主站超時(數(shù)據(jù),ping)
3)主站角度認(rèn)為的從站超時(REPLCONF ACK pings)
確認(rèn)這些值比定義的repl-ping-slave-period要大华蜒,否則每次主站和從站之間通信低速時都會被檢測為超時辙纬。
repl-disable-tcp-nodelay no
同步之后是否禁用從站上的TCP_NODELAY
如果你選擇yes,redis會使用較少量的TCP包和帶寬向從站發(fā)送數(shù)據(jù)叭喜。但這會導(dǎo)致在從站增加一點數(shù)據(jù)的延時瓣窄。
Linux內(nèi)核默認(rèn)配置情況下最多40毫秒的延時捷兰。
如果選擇no,從站的數(shù)據(jù)延時不會那么多,但備份需要的帶寬相對較多澎粟。
默認(rèn)情況下我們將潛在因素優(yōu)化暮的,但在高負(fù)載情況下或者在主從站都跳的情況下介返,把它切換為yes是個好主意星压。
repl-backlog-size 1mb
設(shè)置備份的工作儲備大小。工作儲備是一個緩沖區(qū)溉知,當(dāng)從站斷開一段時間的情況時陨瘩,它替從站接收存儲數(shù)據(jù),
因此當(dāng)從站重連時级乍,通常不需要完全備份舌劳,只需要一個部分同步就可以,即把從站斷開時錯過的一部分?jǐn)?shù)據(jù)接收玫荣。
工作儲備越大甚淡,從站可以斷開并稍后執(zhí)行部分同步的斷開時間就越長。
只要有一個從站連接捅厂,就會立刻分配一個工作儲備贯卦。
repl-backlog-ttl 3600
主站有一段時間沒有與從站連接,對應(yīng)的工作儲備就會自動釋放焙贷。
這個選項用于配置釋放前等待的秒數(shù)撵割,秒數(shù)從斷開的那一刻開始計算,值為0表示不釋放盈厘。
slave-priority 100
從站優(yōu)先級是可以從redis的INFO命令輸出中查到的一個整數(shù)睁枕。當(dāng)主站不能正常工作時
redis sentinel使用它來選擇一個從站并將它提升為主站官边。
低優(yōu)先級的從站被認(rèn)為更適合于提升沸手,因此如果有三個從站優(yōu)先級分別是10外遇,
100,25契吉,sentinel會選擇優(yōu)先級為10的從站跳仿,因為它的優(yōu)先級最低。
然而優(yōu)先級值為0的從站不能執(zhí)行主站的角色捐晶,因此優(yōu)先級為0的從站永遠(yuǎn)不會被redis sentinel提升菲语。
默認(rèn)優(yōu)先級是100
min-slaves-to-write 3
min-slaves-max-lag 10
主站可以停止接受寫請求,當(dāng)與它連接的從站少于N個惑灵,滯后少于M秒山上,N個從站必須是在線狀態(tài)。
延遲的秒數(shù)必須<=所定義的值英支,延遲秒數(shù)是從最后一次收到的來自從站的ping開始計算佩憾。ping通常是每秒一次。
這一選項并不保證N個備份都會接受寫請求干花,但是會限制在指定秒數(shù)內(nèi)由于從站數(shù)量不夠?qū)е碌膶懖僮鱽G失的情況妄帘。
如果想要至少3個從站且延遲少于10秒,如上配置即可
slave-announce-ip 5.5.5.5
slave-announce-port 1234
Redis master能夠以不同的方式列出所連接slave的地址和端口池凄。
例如抡驼,“INFO replication”部分提供此信息,除了其他工具之外肿仑,Redis Sentinel還使用該信息來發(fā)現(xiàn)slave實例致盟。
此信息可用的另一個地方在masterser的“ROLE”命令的輸出中。
通常由slave報告的列出的IP和地址,通過以下方式獲得:
IP:通過檢查slave與master連接使用的套接字的對等體地址自動檢測地址尤慰。
端口:端口在復(fù)制握手期間由slavet通信勾邦,并且通常是slave正在使用列出連接的端口。
然而割择,當(dāng)使用端口轉(zhuǎn)發(fā)或網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)時眷篇,slave實際上可以通過(不同的IP和端口對)來到達(dá)。 slave可以使用以下兩個選項荔泳,以便向master報告一組特定的IP和端口蕉饼,
以便INFO和ROLE將報告這些值。
如果你需要僅覆蓋端口或IP地址玛歌,則沒必要使用這兩個選項昧港。
六、SECURITY
requirepass foobared
設(shè)置redis連接密碼
rename-command CONFIG ""
將命令重命名支子,為了安全考慮创肥,可以將某些重要的、危險的命令重命名。
當(dāng)你把某個命令重命名成空字符串的時候就等于取消了這個命令叹侄。
七巩搏、CLIENTS
maxclients 10000
設(shè)置客戶端最大并發(fā)連接數(shù),默認(rèn)無限制趾代,Redis可以同時打開的客戶端連接數(shù)為Redis進(jìn)程可以打開的最大文件
描述符數(shù)-32(redis server自身會使用一些)贯底,如果設(shè)置 maxclients為0
表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時撒强,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息
八禽捆、MEMORY MANAGEMENT
maxmemory <bytes>
指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中飘哨,達(dá)到最大內(nèi)存后胚想,Redis會先嘗試清除已到期或即將到期的Key
當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置芽隆,將無法再進(jìn)行寫入操作顿仇,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制摆马,
會把Key存放內(nèi)存臼闻,Value會存放在swap區(qū),格式:maxmemory <bytes>
maxmemory-policy noeviction
當(dāng)內(nèi)存使用達(dá)到最大值時囤采,redis使用的清楚策略述呐。有以下幾種可以選擇:
1)volatile-lru 利用LRU算法移除設(shè)置過過期時間的key (LRU:最近使用 Least Recently Used )
2)allkeys-lru 利用LRU算法移除任何key
3)volatile-random 移除設(shè)置過過期時間的隨機(jī)key
4)allkeys-random 移除隨機(jī)ke
5)volatile-ttl 移除即將過期的key(minor TTL)
6)noeviction noeviction 不移除任何key,只是返回一個寫錯誤 蕉毯,默認(rèn)選項
maxmemory-samples 5
LRU 和 minimal TTL 算法都不是精準(zhǔn)的算法乓搬,但是相對精確的算法(為了節(jié)省內(nèi)存)
隨意你可以選擇樣本大小進(jìn)行檢,redis默認(rèn)選擇3個樣本進(jìn)行檢測代虾,你可以通過maxmemory-samples進(jìn)行設(shè)置樣本數(shù)
九进肯、LAZY FREEING
lazyfree-lazy-eviction no (4.0新增)
lazyfree-lazy-expire no(4.0新增)
lazyfree-lazy-server-del no(4.0新增)
slave-lazy-flush no(4.0新增)
十、APPEND ONLY MODE
appendonly no
默認(rèn)redis使用的是rdb方式持久化棉磨,這種方式在許多應(yīng)用中已經(jīng)足夠用了江掩。但是redis如果中途宕機(jī),
會導(dǎo)致可能有幾分鐘的數(shù)據(jù)丟失乘瓤,根據(jù)save來策略進(jìn)行持久化环形,Append Only File是另一種持久化方式,
可以提供更好的持久化特性衙傀。Redis會把每次寫入的數(shù)據(jù)在接收后都寫入appendonly.aof文件抬吟,
每次啟動時Redis都會先把這個文件的數(shù)據(jù)讀入內(nèi)存里,先忽略RDB文件统抬。
appendfilename "appendonly.aof"
aof文件名
appendfsync always
appendfsync everysec
appendfsync no
aof持久化策略的配置
no表示不執(zhí)行fsync火本,由操作系統(tǒng)保證數(shù)據(jù)同步到磁盤危队,速度最快。
always表示每次寫入都執(zhí)行fsync钙畔,以保證數(shù)據(jù)同步到磁盤茫陆。
everysec表示每秒執(zhí)行一次fsync,可能會導(dǎo)致丟失這1s數(shù)據(jù)
no-appendfsync-on-rewrite no
在aof重寫或者寫入rdb文件的時候刃鳄,會執(zhí)行大量IO盅弛,此時對于everysec和always的aof模式來說钱骂,
執(zhí)行fsync會造成阻塞過長時間叔锐,no-appendfsync-on-rewrite字段設(shè)置為默認(rèn)設(shè)置為no。
如果對延遲要求很高的應(yīng)用见秽,這個字段可以設(shè)置為yes愉烙,否則還是設(shè)置為no,這樣對持久化特性來說這是更安全的選擇解取。
設(shè)置為yes表示rewrite期間對新寫操作不fsync,暫時存在內(nèi)存中,等rewrite完成后再寫入步责,默認(rèn)為no,建議yes禀苦。
Linux的默認(rèn)fsync策略是30秒蔓肯。可能丟失30秒數(shù)據(jù)振乏。
auto-aof-rewrite-percentage 100
aof自動重寫配置蔗包,當(dāng)目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進(jìn)行重寫,
即當(dāng)aof文件增長到一定大小的時候慧邮,Redis能夠調(diào)用bgrewriteaof對日志文件進(jìn)行重寫调限。
當(dāng)前AOF文件大小是上次日志重寫得到AOF文件大小的二倍(設(shè)置為100)時,自動啟動新的日志重寫過程误澳。
auto-aof-rewrite-min-size 64mb
設(shè)置允許重寫的最小aof文件大小耻矮,避免了達(dá)到約定百分比但尺寸仍然很小的情況還要重寫
aof-load-truncated yes
aof文件可能在尾部是不完整的,當(dāng)redis啟動的時候忆谓,aof文件的數(shù)據(jù)被載入內(nèi)存裆装。
重啟可能發(fā)生在redis所在的主機(jī)操作系統(tǒng)宕機(jī)后,尤其在ext4文件系統(tǒng)沒有加上data=ordered選項倡缠,出現(xiàn)這種現(xiàn)象
redis宕機(jī)或者異常終止不會造成尾部不完整現(xiàn)象米母,可以選擇讓redis退出,或者導(dǎo)入盡可能多的數(shù)據(jù)毡琉。
如果選擇的是yes铁瞒,當(dāng)截斷的aof文件被導(dǎo)入的時候,會自動發(fā)布一個log給客戶端然后load桅滋。
如果是no慧耍,用戶必須手動redis-check-aof修復(fù)AOF文件才可以身辨。
aof-use-rdb-preamble no (4.0新增)
十一、LUA SCRIPTING
lua-time-limit 5000
如果達(dá)到最大時間限制(毫秒)芍碧,redis會記個log煌珊,然后返回error。當(dāng)一個腳本超過了最大時限泌豆。
只有SCRIPT KILL和SHUTDOWN NOSAVE可以用定庵。第一個可以殺沒有調(diào)write命令的東西。
要是已經(jīng)調(diào)用了write踪危,只能用第二個命令殺
十二蔬浙、REDIS CLUSTER
cluster-enabled yes
集群開關(guān),默認(rèn)是不開啟集群模式
cluster-config-file nodes-6379.conf
集群配置文件的名稱贞远,每個節(jié)點都有一個集群相關(guān)的配置文件畴博,持久化保存集群的信息。
這個文件并不需要手動配置蓝仲,這個配置文件有Redis生成并更新俱病,每個Redis集群節(jié)點需要一個單獨的配置文件
請確保與實例運行的系統(tǒng)中配置文件名稱不沖突
cluster-node-timeout 15000
節(jié)點互連超時的閥值,集群節(jié)點超時毫秒數(shù)
cluster-slave-validity-factor 10
在進(jìn)行故障轉(zhuǎn)移的時候袱结,全部slave都會請求申請為master亮隙,但是有些slave可能與master斷開連接一段時間了,
導(dǎo)致數(shù)據(jù)過于陳舊垢夹,這樣的slave不應(yīng)該被提升為master溢吻。該參數(shù)就是用來判斷slave節(jié)點與master斷線的時間是否過長。
判斷方法是:
比較slave斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period
如果節(jié)點超時時間為三十秒, 并且slave-validity-factor為10,
假設(shè)默認(rèn)的repl-ping-slave-period是10秒棚饵,即如果超過310秒slave將不會嘗試進(jìn)行故障轉(zhuǎn)移
cluster-migration-barrier 1
master的slave數(shù)量大于該值煤裙,slave才能遷移到其他孤立master上,如這個參數(shù)若被設(shè)為2噪漾,
那么只有當(dāng)一個主節(jié)點擁有2 個可工作的從節(jié)點時硼砰,它的一個從節(jié)點會嘗試遷移。
cluster-require-full-coverage yes
默認(rèn)情況下欣硼,集群全部的slot有節(jié)點負(fù)責(zé)题翰,集群狀態(tài)才為ok,才能提供服務(wù)诈胜。
設(shè)置為no豹障,可以在slot沒有全部分配的時候提供服務(wù)。
不建議打開該配置焦匈,這樣會造成分區(qū)的時候血公,小分區(qū)的master一直在接受寫請求,而造成很長時間數(shù)據(jù)不一致
十三缓熟、CLUSTER DOCKER/NAT support
cluster-announce-ip 10.1.1.5 (4.0新增)
cluster-announce-port 6379 (4.0新增)
cluster-announce-bus-port 6380 (4.0新增)
十四累魔、SLOW LOG
slowlog-log-slower-than 10000
slog log是用來記錄redis運行中執(zhí)行比較慢的命令耗時摔笤。
當(dāng)命令的執(zhí)行超過了指定時間,就記錄在slow log中垦写,slog log保存在內(nèi)存中吕世,所以沒有IO操作。
執(zhí)行時間比slowlog-log-slower-than大的請求記錄到slowlog里面梯投,單位是微秒命辖,所以1000000就是1秒。
注意分蓖,負(fù)數(shù)時間會禁用慢查詢?nèi)罩径В?則會強(qiáng)制記錄所有命令。
slowlog-max-len 128
慢查詢?nèi)罩鹃L度咆疗。當(dāng)一個新的命令被寫進(jìn)日志的時候漓帚,最老的那個記錄會被刪掉母债,這個長度沒有限制午磁。
只要有足夠的內(nèi)存就行,你可以通過 SLOWLOG RESET 來釋放內(nèi)存
十五毡们、LATENCY MONITOR
latency-monitor-threshold 0
延遲監(jiān)控功能是用來監(jiān)控redis中執(zhí)行比較緩慢的一些操作迅皇,用LATENCY打印redis實例在跑命令時的耗時圖表。
只記錄大于等于下邊設(shè)置的值的操作衙熔,0的話登颓,就是關(guān)閉監(jiān)視。
默認(rèn)延遲監(jiān)控功能是關(guān)閉的红氯,如果你需要打開框咙,也可以通過CONFIG SET命令動態(tài)設(shè)置。
十六痢甘、EVENT NOTIFICATION
notify-keyspace-events ""
鍵空間通知使得客戶端可以通過訂閱頻道或模式喇嘱,來接收那些以某種方式改動了 Redis 數(shù)據(jù)集的事件。因為開啟鍵空間通知功能需要消耗一些 CPU 塞栅,所以在默認(rèn)配置下者铜,該功能處于關(guān)閉狀態(tài)。
notify-keyspace-events 的參數(shù)可以是以下字符的任意組合放椰,它指定了服務(wù)器該發(fā)送哪些類型的通知:
K 鍵空間通知作烟,所有通知以 keyspace@ 為前綴
E 鍵事件通知,所有通知以 keyevent@ 為前綴
g DEL 砾医、 EXPIRE 拿撩、 RENAME 等類型無關(guān)的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 過期事件:每當(dāng)有過期鍵被刪除時發(fā)送
e 驅(qū)逐(evict)事件:每當(dāng)有鍵因為 maxmemory 政策而被刪除時發(fā)送
A 參數(shù) g$lshzxe 的別名
輸入的參數(shù)中至少要有一個 K 或者 E,否則的話如蚜,不管其余的參數(shù)是什么压恒,都不會有任何 通知被分發(fā)头滔。
十七、ADVANCED CONFIG
hash-max-ziplist-entries 512
hash類型的數(shù)據(jù)結(jié)構(gòu)在編碼上可以使用ziplist和hashtable涎显。
ziplist的特點就是文件存儲(以及內(nèi)存存儲)所需的空間較小,在內(nèi)容較小時,性能和hashtable幾乎一樣坤检。
因此redis對hash類型默認(rèn)采取ziplist。如果hash中條目的條目個數(shù)或者value長度達(dá)到閥值,將會被重構(gòu)為hashtable期吓。
這個參數(shù)指的是ziplist中允許存儲的最大條目個數(shù)早歇,,默認(rèn)為512讨勤,建議為128
hash-max-ziplist-value 64
ziplist中允許條目value值最大字節(jié)數(shù)箭跳,默認(rèn)為64,建議為1024
list-max-ziplist-size -2
當(dāng)取正值的時候潭千,表示按照數(shù)據(jù)項個數(shù)來限定每個quicklist節(jié)點上的ziplist長度谱姓。比如,當(dāng)這個參數(shù)配置成5的時候刨晴,表示每個quicklist節(jié)點的ziplist最多包含5個數(shù)據(jù)項屉来。
當(dāng)取負(fù)值的時候,表示按照占用字節(jié)數(shù)來限定每個quicklist節(jié)點上的ziplist長度狈癞。這時茄靠,它只能取-1到-5這五個值,每個值含義如下:
-5: 每個quicklist節(jié)點上的ziplist大小不能超過64 Kb蝶桶。(注:1kb => 1024 bytes)
-4: 每個quicklist節(jié)點上的ziplist大小不能超過32 Kb慨绳。
-3: 每個quicklist節(jié)點上的ziplist大小不能超過16 Kb。
-2: 每個quicklist節(jié)點上的ziplist大小不能超過8 Kb真竖。(-2是Redis給出的默認(rèn)值)
-1: 每個quicklist節(jié)點上的ziplist大小不能超過4 Kb脐雪。
list-compress-depth 0
這個參數(shù)表示一個quicklist兩端不被壓縮的節(jié)點個數(shù)。
注:這里的節(jié)點個數(shù)是指quicklist雙向鏈表的節(jié)點個數(shù)恢共,而不是指ziplist里面的數(shù)據(jù)項個數(shù)战秋。
實際上,一個quicklist節(jié)點上的ziplist旁振,如果被壓縮获询,就是整體被壓縮的。
參數(shù)list-compress-depth的取值含義如下:
0: 是個特殊值拐袜,表示都不壓縮吉嚣。這是Redis的默認(rèn)值。
1: 表示quicklist兩端各有1個節(jié)點不壓縮蹬铺,中間的節(jié)點壓縮尝哆。
2: 表示quicklist兩端各有2個節(jié)點不壓縮,中間的節(jié)點壓縮甜攀。
3: 表示quicklist兩端各有3個節(jié)點不壓縮秋泄,中間的節(jié)點壓縮琐馆。
依此類推…
由于0是個特殊值,很容易看出quicklist的頭節(jié)點和尾節(jié)點總是不被壓縮的恒序,以便于在表的兩端進(jìn)行快速存取瘦麸。
set-max-intset-entries 512
數(shù)據(jù)量小于等于set-max-intset-entries用intset,大于set-max-intset-entries用set
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
數(shù)據(jù)量小于等于zset-max-ziplist-entries用ziplist歧胁,大于zset-max-ziplist-entries用zset
hll-sparse-max-bytes 3000
value大小小于等于hll-sparse-max-bytes使用稀疏數(shù)據(jù)結(jié)構(gòu)(sparse)
大于hll-sparse-max-bytes使用稠密的數(shù)據(jù)結(jié)構(gòu)(dense)滋饲,一個比16000大的value是幾乎沒用的,
建議的value大概為3000喊巍。如果對CPU要求不高屠缭,對空間要求較高的,建議設(shè)置到10000左右
activerehashing yes
Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進(jìn)行重新hash崭参,可以降低內(nèi)存的使用呵曹。
當(dāng)你的使用場景中,有非常嚴(yán)格的實時性需要何暮,不能夠接受Redis時不時的對請求有2毫秒的延遲的話奄喂,把這項配置為no。
如果沒有這么嚴(yán)格的實時性要求郭卫,可以設(shè)置為yes砍聊,以便能夠盡可能快的釋放內(nèi)存
client-output-buffer-limit normal 0 0 0
對客戶端輸出緩沖進(jìn)行限制可以強(qiáng)迫那些不從服務(wù)器讀取數(shù)據(jù)的客戶端斷開連接背稼,用來強(qiáng)制關(guān)閉傳輸緩慢的客戶端贰军。
對于normal client,第一個0表示取消hard limit蟹肘,第二個0和第三個0表示取消soft limit词疼,normal client默認(rèn)取消限制,因為如果沒有尋問帘腹,他們是不會接收數(shù)據(jù)的
client-output-buffer-limit slave 256mb 64mb 60
對于slave client和MONITER client贰盗,如果client-output-buffer一旦超過256mb,又或者超過64mb持續(xù)60秒阳欲,那么服務(wù)器就會立即斷開客戶端連接舵盈。
client-output-buffer-limit pubsub 32mb 8mb 60
對于pubsub client,如果client-output-buffer一旦超過32mb球化,又或者超過8mb持續(xù)60秒秽晚,那么服務(wù)器就會立即斷開客戶端連接。
hz 10
redis執(zhí)行任務(wù)的頻率為1s除以hz
aof-rewrite-incremental-fsync yes
在aof重寫的時候筒愚,如果打開了aof-rewrite-incremental-fsync開關(guān)赴蝇,系統(tǒng)會每32MB執(zhí)行一次fsync。
這對于把文件寫入磁盤是有幫助的巢掺,可以避免過大的延遲峰值