Redis配置詳解,redis詳解
Web程式猿部落格:http://blog.csdn.net/thinkercode
如果是一個專業的 DBA, 那麼執行個體啟動時會加很多的參數以便使系統啟動並執行非常穩定, 這樣就可能會在啟動時在 Redis 後面加一個參數,以指定設定檔的路徑,就象 mysql 一樣的讀取啟動設定檔的方式來啟動資料庫。源碼編譯完成後,在 Redis目錄下有一個redis.conf 檔案,這個檔案即是 Redis 的設定檔。我們可以在啟動時使用以下命令來用設定檔啟動。
[root@localhost ~]# ./redis-server /path/to/redis.conf
Redis的一些度量單位,redis配置中對單位的大小寫不敏感,1GB、1Gb和1gB都是相同的。由此也說明,redis只支援bytes,不支援bit單位。
# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes
Redis可以引入外部設定檔很像C/C++中的include指令,多個設定檔,Redis總是使用最後載入的配置項,如果想引入的配置不會重寫,可以在主設定檔最後引入。
include /path/to/other.conf
redis配置 - 通用
# Redis預設不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程方式。注意配置成守護進程後Redis會將進程號寫入檔案/var/run/redis.piddaemonize yes## 當Redis以守護進程方式運行時,Redis預設會把pid寫入/var/run/redis.pid檔案,可以通過pidfile指定pidfile /var/run/redis.pid##指定Redis監聽連接埠,預設連接埠為6379,為什麼使用6379,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字port 6379## 在高並發環境下你需要一個高backlog值來避免慢用戶端串連問題。# 注意Linux核心默默地將這個值減小 到/proc/sys/net/core/somaxconn的值,# 所以需要確認增大somaxconn和tcp_max_syn_backlog兩個值來達到想要的效果。tcp-backlog 511## 預設Redis監聽伺服器上所有可用網路介面的串連。可以用"bind"配置指令跟一個或多個ip地址來實現監聽一個或多個網路介面bind 192.168.1.100 10.0.0.1bind 127.0.0.1## 如果redis不監聽連接埠,還怎麼與外界通訊呢”,其實redis還支援通過unix socket方式來接收請求。# 可以通過unixsocket配置項來指定unix socket檔案的路徑,並通過unixsocketperm來指定檔案的許可權。# 指定用來監聽Unix套通訊端的路徑。沒有預設值, 所以在沒有指定的情況下Redis不會監聽Unix通訊端unixsocket /tmp/redis.sockunixsocketperm 755## 當一個redis-client一直沒有請求發向server端,那麼server端有權主動關閉這個串連,可以通過timeout來設定“空閑逾時時限”,0表示永不關閉。# 設定用戶端串連時的逾時時間,單位為秒。當用戶端在這段時間內沒有發出任何指令,那麼關閉該串連# 預設值:0代表禁用,永不關閉 timeout 0## TCP keepalive.## 如果非零,則設定SO_KEEPALIVE選項來向空閑串連的用戶端發送ACK,由於以下兩個原因這是很有用的:## 1)能夠檢測無響應的對端# 2)讓該串連中間的網路裝置知道這個串連還存活## 在Linux上,這個指定的值(單位:秒)就是發送ACK的時間間隔。# 注意:要關閉這個串連需要兩倍的這個時間值。# 在其他核心上這個時間間隔由核心配置決定## TCP串連保活策略,可以通過tcp-keepalive配置項來進行設定,單位為秒,# 假如設定為60秒,則server端會每60秒向串連閒置用戶端發起一次ACK請求,以檢查用戶端是否已經掛掉,# 對於無響應的用戶端則會關閉其串連。所以關閉一個串連最長需要120秒的時間。如果設定為0,則不會進行保活檢測。## 這個選項的一個合理值是60秒tcp-keepalive 0## 指定日誌記錄層級 # Redis總共支援四個層級:debug、verbose、notice、warning,預設為verbose # debug 記錄很多資訊,用於開發與測試# varbose 很多精簡的有用資訊,不像debug會記錄那麼多# notice 普通的verbose,常用於生產環境# warning 只有非常重要或者嚴重的資訊會記錄到日誌 loglevel notice## 指明記錄檔名。也可以使用"stdout"來強制讓Redis把日誌資訊寫到標準輸出上。# 預設為標準輸出,如果配置Redis為守護進程方式運行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發給/dev/nulllogfile ""## 要使用系統日誌記錄器,只要設定 "syslog-enabled" 為 "yes" 就可以了。# 然後根據需要設定其他一些syslog參數就可以了。syslog-enabled no## 指定linux系統日誌syslog的標示符,若是"syslog-enabled=no",則這個選項無效syslog-ident redis## 指定linux系統日誌syslog 裝置(facility), 必須是USER或者LOCAL0到LOCAL7之間syslog-facility local0 ## 可用資料庫數,預設值為16,預設資料庫儲存在DB 0號ID庫中,無特殊需求,建議僅設定一個資料庫 databases 1# 查詢資料庫使用 SELECT <dbid># dbid介於 0 到 'databases'-1 之間databases 16
redis配置 - 快照
## 把資料庫存到磁碟上:## save <seconds> <changes># # 會在指定秒數和資料變化次數之後把資料庫寫到磁碟上。## 下面的例子將會進行把資料寫入磁碟的操作:# 900秒(15分鐘)之後,且至少有1個key(次)變更# 300秒(5分鐘)之後,且至少有10個key(次)變更# 60秒之後,且至少有10000個key(次)變更## 注意:如果不需要寫磁碟,則把所有 "save" 設定注釋掉,即實現全記憶體伺服器。# 如果你想禁用RDB持久化的策略,只要不設定任何save指令就可以,或者給save傳入一個Null 字元串參數也可以達到相同效果save 900 1save 300 10save 60 10000 ## 如果使用者開啟了RDB快照功能,那麼在redis持久化資料到磁碟時如果出現失敗,預設情況下,redis會停止接受所有的寫請求。# 這樣做的好處在於可以讓使用者很明確的知道記憶體中的資料和磁碟上的資料已經存在不一致了。# 如果redis不顧這種不一致,一意孤行的繼續接收寫請求,就可能會引起一些災難性的後果。# 如果下一次RDB持久化成功,redis會自動回復接受寫請求。# 當然,如果你不在乎這種資料不一致或者有其他的手段發現和控制這種不一致的話,你完全可以關閉這個功能,以便在快照寫入失敗時,也能確保redis繼續接受新的寫請求。stop-writes-on-bgsave-error yes#### 當匯出到 .rdb 資料庫時是否用LZF壓縮字串對象。# 預設設定為 "yes",# 如果想節省CPU的話,可以把這個設定為 "no",但是如果有可以壓縮的key卻沒有壓縮的話,那資料檔案就會變得更大rdbcompression yes## 因為版本5的RDB有一個CRC64演算法的校正和放在了檔案的最後。這將使檔案格式更加可靠但在# 生產和載入RDB檔案時,這有一個效能消耗(大約10%),所以你可以關掉它來擷取最好的效能。# 產生的關閉校正的RDB檔案有一個0的校正和,它將告訴載入代碼跳過檢查rdbcompression yes## 資料庫的檔案名稱及存放路徑dbfilename dump.rdb## 工作目錄# 本機資料庫會寫到這個目錄下,檔案名稱就是上面的 "dbfilename" 的值。# 累加檔案也放這裡。# 注意你這裡指定的必須是目錄,不是檔案名稱。dir ./
redis配置 - 同步
# 主從同步。通過 slaveof 配置來實現Redis執行個體的備份。# 注意,這裡是本地從遠端複製資料。也就是說,本地可以有不同的資料庫檔案、綁定不同的IP、監聽不同的連接埠。# 當本機為從服務時,設定主服務的IP及連接埠,在Redis啟動時,它會自動從主服務進行資料同步slaveof <masterip> <masterport> ## 如果主服務master設定了密碼(通過下面的 "requirepass" 選項來配置),slave服務串連master的密碼,那麼slave在開始同步之前必須進行身分識別驗證,否則它的同步請求會被拒絕。# 當本機為從服務時,設定主服務的串連密碼masterauth <master-password> ## 當一個slave失去和master的串連,或者同步進行中中,slave的行為有兩種可能:# 1) 如果 slave-serve-stale-data 設定為 "yes" (預設值),slave會繼續響應用戶端請求,可能是正常資料,也可能是還沒獲得值的空資料。# 2) 如果 slave-serve-stale-data 設定為 "no",slave會回複"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。slave-serve-stale-data yes## 你可以配置salve執行個體是否接受寫操作。可寫的slave執行個體可能對儲存臨時資料比較有用(因為寫入salve# 的資料在同master同步之後將很容被刪除),# 但是如果用戶端由於配置錯誤在寫入時也可能產生一些問題。# 從Redis2.6預設所有的slave為唯讀## 注意:唯讀slave不是為了暴露給互連網上不可信的用戶端而設計的。它只是一個防止執行個體誤用的保護層。# 一個唯讀slave支援所有的管理命令比如config,debug等。為了限制你可以用'rename-command'來# 隱藏所有的管理和危險命令來增強唯讀slave的安全性slave-read-only yes## 複製集同步策略:磁碟或者socket# 新slave串連或者老slave重新串連時候不能只接收不同,得做一個全同步。需要一個新的RDB檔案dump出來,然後從master傳到slave。可以有兩種情況:# 1)基於硬碟(disk-backed):master建立一個新進程dump RDB,完事兒之後由父進程(即主進程)增量傳給slaves。# 2)基於socket(diskless):master建立一個新進程直接dump RDB到slave的socket,不經過主進程,不經過硬碟。# 基於硬碟的話,RDB檔案建立後,一旦建立完畢,可以同時服務更多的slave。基於socket的話, 新slave來了後,得排隊(如果超出了repl-diskless-sync-delay還沒來),完事兒一個再進行下一個。# 當用diskless的時候,master等待一個repl-diskless-sync-delay的秒數,如果沒slave來的話,就直接傳,後來的得排隊等了。否則就可以一起傳。# disk較慢,並且網路較快的時候,可以用diskless。(預設用disk-based)repl-diskless-sync no## 設定成0的話,傳輸開始ASAPrepl-diskless-sync-delay 5## slave根據指定的時間間隔向伺服器發送ping請求。# 時間間隔可以通過 repl_ping_slave_period 來設定。# 預設10秒repl-ping-slave-period 10## 以下選項設定同步的逾時時間## 1)slave在與master SYNC期間有大量資料轉送,造成逾時# 2)在slave角度,master逾時,包括資料、ping等# 3)在master角度,slave逾時,當master發送REPLCONF ACK pings# # 確保這個值大於指定的repl-ping-slave-period,否則在主從間流量不高時每次都會檢測到逾時repl-timeout 60## 是否在slave通訊端發送SYNC之後禁用 TCP_NODELAY ?## 如果你選擇“yes”Redis將使用更少的TCP包和頻寬來向slaves發送資料。# 但是這將使資料轉送到slave上有延遲,Linux核心的預設配置會達到40毫秒,# 如果你選擇了 "no" 資料轉送到salve的延遲將會減少但要使用更多的頻寬預設我們會為低延遲做最佳化,# 但高流量情況或主從之間的跳數過多時,把這個選項設定為“yes”是個不錯的選擇。repl-disable-tcp-nodelay no## 設定資料備份的backlog大小。# backlog是一個slave在一段時間內中斷連線時記錄salve資料的緩衝,# 所以一個slave在重新串連時,不必要全量的同步,而是一個增量同步處理就足夠了,將在中斷連線的這段時間內slave丟失的部分資料傳送給它。# 同步的backlog越大,slave能夠進行增量同步處理並且允許中斷連線的時間就越長。# backlog只分配一次並且至少需要一個slave串連repl-backlog-size 1mb## 當master在一段時間內不再與任何slave串連,backlog將會釋放。以下選項配置了從最後一個slave斷開開始計時多少秒後,backlog緩衝將會釋放。# 0表示永不釋放backlogrepl-backlog-ttl 3600## slave的優先順序是一個整數展示在Redis的Info輸出中。如果master不再正常工作了,# Sentinel將用它來選擇一個slave提升=升為master。優先順序數字小的salve會優先考慮提升為master,# 所以例如有三個slave優先順序分別為10,100,25,# Sentinel將挑選優先順序最小數字為10的slave。# 0作為一個特殊的優先順序,標識這個slave不能作為master,所以一個優先順序為0的slave永遠不會被Sentinel挑選提升為master# 預設優先順序為100slave-priority 100## 如果master少於N個延時小於等於M秒的已串連slave,就可以停止接收寫操作。# N個slave需要是“oneline”狀態# 延時是以秒為單位,並且必須小於等於指定值,是從最後一個從slave接收到的ping(通常每秒發送)開始計數。# 例如至少需要3個延時小於等於10秒的slave用下面的指令:# 兩者之一設定為0將禁用這個功能。# 預設 min-slaves-to-write 值是0(該功能禁用)並且 min-slaves-max-lag 值是10。min-slaves-to-write 3min-slaves-max-lag 10
redis配置 - 安全
# 要求用戶端在處理任何命令時都要驗證身份和密碼。# 這個功能在有你不信任的其它用戶端能夠訪問redis伺服器的環境裡非常有用。# 為了向後相容的話這段應該注釋掉。而且大多數人不需要身分識別驗證(例如:它們運行在自己的伺服器上)# 警告:因為Redis太快了,所以外面的人可以嘗試每秒150k的密碼來試圖破解密碼。這意味著你需要# 一個高強度的密碼,否則破解太容易了。requirepass foobared## 命令重新命名# 在共用環境下,可以為危險命令改變名字。比如,你可以為 CONFIG 改個其他不太容易猜到的名字,# 這樣內部的工具仍然可以使用,而普通的用戶端將不行。# 例如:# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52# 請注意:改變命令名字被記錄到AOF檔案或被傳送到從伺服器可能產生問題。# 也可以通過改名為空白字串來完全禁用一個命令rename-command CONFIG ""
redis配置 - 限制
# 設定最多同時串連的用戶端數量。預設這個限制是10000個用戶端,然而如果Redis伺服器不能配置# 處理檔案的限制數來滿足指定的值,那麼最大的用戶端串連數就被設定成當前檔案限制數減32(因# 為Redis伺服器保留了一些檔案描述符作為內部使用)# 一旦達到這個限制,Redis會關閉所有新串連並發送錯誤'max number of clients reached'maxclients 10000## 不要用比設定的上限更多的記憶體。一旦記憶體使用量達到上限,Redis會根據選定的回收策略(參見:maxmemmory-policy)刪除key# 如果因為刪除策略Redis無法刪除key,或者原則設定為 "noeviction",Redis會回複需要更# 多記憶體的錯誤資訊給命令。例如,SET,LPUSH等等,但是會繼續響應像Get這樣的唯讀命令。# 在使用Redis作為LRU緩衝,或者為執行個體設定了硬性記憶體限制的時候(使用 "noeviction" 策略)的時候,這個選項通常事很有用的。# 警告:當有多個slave連上達到記憶體上限的執行個體時,master為同步slave的輸出緩衝區所需# 記憶體不計算在使用記憶體中。這樣當驅逐key時,就不會因網路問題 / 重新同步事件觸發驅逐key# 的迴圈,反過來slaves的輸出緩衝區充滿了key被驅逐的DEL命令,這將觸發刪除更多的key,# 直到這個資料庫完全被清空為止# # 總之...如果你需要附加多個slave,建議你設定一個稍小maxmemory限制,這樣系統就會有空閑# 的記憶體作為slave的輸出緩衝區(但是如果最大記憶體原則設定為"noeviction"的話就沒必要了)maxmemory <bytes>## 最大記憶體策略:如果達到記憶體限制了,Redis如何選擇刪除key。你可以在下面五個行為裡選:# # volatile-lru -> 根據LRU演算法產生的到期時間來刪除。# allkeys-lru -> 根據LRU演算法刪除任何key。# volatile-random -> 根據到期設定來隨機刪除key。 # allkeys->random -> 無差別隨機刪。 # volatile-ttl -> 根據最近到期時間來刪除(輔以TTL) # noeviction -> 誰也不刪,直接在寫操作時返回錯誤。# # 注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。# 目前為止涉及的命令: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演算法的實現都不是很精確,但是很接近(為了省記憶體),所以你可以用樣本量做檢測。# 例如:預設Redis會檢查3個key然後取最舊的那個,你可以通過下面的配置指令來設定樣本的個數。maxmemory-samples 3
redis配置 - 追加模式
# 預設情況下,Redis是非同步把資料匯出到磁碟上。這種模式在很多應用裡已經足夠好,但Redis進程# 出問題或斷電時可能造成一段時間的寫操作丟失(這取決於配置的save指令)。## AOF是一種提供了更可靠的替代持久化模式,例如使用預設的資料寫入檔案策略(參見後面的配置)# 在遇到像伺服器斷電或單寫情況下Redis自身進程出問題但作業系統仍正常運行等突發事件時,Redis能只丟失1秒的寫操作。## AOF和RDB持久化能同時啟動並且不會有問題。# 如果AOF開啟,那麼在啟動時Redis將載入AOF檔案,它更能保證資料的可靠性。# 請查看 http://redis.io/topics/persistence 來擷取更多資訊.appendonly no## 追加加檔案名稱字(預設:"appendonly.aof")appendfilename "appendonly.aof"## fsync() 系統調用告訴作業系統把資料寫到磁碟上,而不是等更多的資料進入輸出緩衝區。# 有些作業系統會真的把資料馬上刷到磁碟上;有些則會儘快去嘗試這麼做。## Redis支援三種不同的模式:## no:不要立刻刷,只有在作業系統需要刷的時候再刷。比較快。# always:每次寫操作都立刻寫入到aof檔案。慢,但是最安全。# everysec:每秒寫一次。折中方案。 ## 預設的 "everysec" 通常來說能在速度和資料安全性之間取得比較好的平衡。根據你的理解來# 決定,如果你能放寬該配置為"no" 來擷取更好的效能(但如果你能忍受一些資料丟失,可以考慮使用# 預設的快照持久化模式),或者相反,用“always”會比較慢但比everysec要更安全。## 請查看下面的文章來擷取更多的細節# http://antirez.com/post/redis-persistence-demystified.html # # 如果不能確定,就用 "everysec"appendfsync everysec## 如果AOF的同步原則設定成 "always" 或者 "everysec",並且背景儲存進程(後台儲存或寫入AOF# 日誌)會產生很多磁碟I/O開銷。某些Linux的配置下會使Redis因為 fsync()系統調用而阻塞很久。# 注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們同步的write(2)調用。## 為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止fsync()。# # 這就意味著如果有子進程在進行儲存操作,那麼Redis就處於"不可同步"的狀態。# 這實際上是說,在最差的情況下可能會丟掉30秒鐘的日誌資料。(預設Linux設定)# # 如果把這個設定成"yes"帶來了延遲問題,就保持"no",這是儲存持久資料的最安全的方式。no-appendfsync-on-rewrite no## 自動重寫AOF檔案# 如果AOF記錄檔增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF記錄檔。# # 工作原理:Redis記住上次重寫時AOF檔案的大小(如果重啟後還沒有寫操作,就直接用啟動時的AOF大小)# # 這個基準大小和當前大小做比較。如果當前大小超過指定比例,就會觸發重寫操作。你還需要指定被重寫# 日誌的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫。## 指定百分比為0會禁用AOF自動重寫特性。auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb## AOF檔案可能在尾部是不完整的(上次system關閉有問題,尤其是mount ext4檔案系統時沒有加上data=ordered選項。只會發生在os死時,redis自己死不會不完整)。# 那redis重啟時load進記憶體的時候就有問題了。發生的時候,可以選擇redis啟動報錯,或者load盡量多正常的資料。# 如果aof-load-truncated是yes,會自動發布一個log給用戶端然後load(預設)。如果是no,使用者必須手動redis-check-aof修複AOF檔案才可以。aof-load-truncated yes
redis配置 - LUA指令碼
# 如果達到最大時間限制(毫秒),redis會記個log,然後返回error。# 當一個指令碼超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。# 設定成0或者負值,時限就無限。lua-time-limit 5000
redis配置 - 叢集
WARNING Redis Cluster在3.0.X版本還不是一個穩定版本
# 開啟叢集cluster-enabled yes## 每一個叢集節點都有一個叢集設定檔cluster-config-file nodes-6379.conf## 叢集節點的逾時時間,單位為毫秒cluster-node-timeout 15000## 控制從節點FailOver相關的設定# 設為0,從節點會一直嘗試啟動FailOver.# 設為正數,失聯大於一定時間(factor*節點TimeOut),不再進行FailOvercluster-slave-validity-factor 10## 最小從節點串連數cluster-migration-barrier 1## 預設為Yes,丟失一定比例Key後(可能Node無法串連或者掛掉),叢集停止接受寫操作# 設定為No,叢集丟失Key的情況下仍提供查詢服務cluster-require-full-coverage yes
redis配置 - 慢日誌
# Redis慢查詢日誌可以記錄超過指定時間的查詢。已耗用時間不包括各種I/O時間,例如:串連用戶端,# 發送響應資料等,而只計算命令執行的實際時間(這隻是線程阻塞而無法同時為其他請求服務的命令執行階段)# # 你可以為慢查詢日誌配置兩個參數:一個指明Redis的逾時時間(單位為微秒)來記錄超過這個時間的命令# 另一個是慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄從隊列中移除。## 下面的時間單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄# 所有命令。slowlog-log-slower-than 10000## 這個長度沒有限制。只是要主要會消耗記憶體。你可以通過 SLOWLOG RESET 來回收記憶體。slowlog-max-len 128
redis配置 - 延遲監控
# 預設情況下禁用延遲監控,因為它基本上是不需要的,單位為毫秒latency-monitor-threshold 0
redis配置 - 事件通知
# Redis 能通知 Pub/Sub 用戶端關於鍵空間發生的事件# 這個功能文檔位於http://redis.io/topics/keyspace-events## 例如:如果鍵空間事件通知被開啟,並且用戶端對 0 號資料庫的鍵 foo 執行 DEL 命令時,將通過# Pub/Sub發布兩條訊息:# PUBLISH __keyspace@0__:foo del# PUBLISH __keyevent@0__:del foo## 可以在下表中選擇Redis要通知的事件類型。事件類型由單個字元來標識:## K 鍵空間通知,以__keyspace@<db>__為首碼# E 鍵事件通知,以__keysevent@<db>__為首碼# g DEL , EXPIRE , RENAME 等類型無關的通用命令的通知, ...# $ String命令# l List命令# s Set命令# h Hash命令# z 有序集合命令# x 到期事件(每次key到期時產生)# e 驅逐事件(當key在記憶體滿了被清除時產生)# A g$lshzxe的別名,因此”AKE”意味著所有的事件## notify-keyspace-events 帶一個由0到多個字元組成的字串參數。Null 字元串意思是通知被禁用。## 例子:啟用List和通用事件通知:# notify-keyspace-events Elg## 例子2:為了擷取到期key的通知訂閱名字為 __keyevent@__:expired 的頻道,用以下配置# notify-keyspace-events Ex## 預設所用的通知被禁用,因為使用者通常不需要該特性,並且該特性會有效能損耗。# 注意如果你不指定至少K或E之一,不會發送任何事件。notify-keyspace-events ""
redis配置 - 進階配置
# 當有大量資料時,適合用雜湊編碼(這會需要更多的記憶體),元素數量上限不能超過給定限制。# Redis Hash是value內部為一個HashMap,如果該Map的成員數比較少,則會採用類似一維線性緊湊格式來儲存該Map, # 即省去了大量指標的記憶體開銷,如下2個條件任意一個條件超過設定值都會轉換成真正的HashMap,# 當value這個Map內部不超過多少個成員時會採用線性緊湊格式儲存,預設是64,即value內部有64個以下的成員就是使用線性緊湊儲存,超過該值自動轉成真正的HashMap。hash-max-zipmap-entries 512## 當 value這個Map內部的每個成員值長度不超過多少位元組就會採用線性緊湊儲存來節省空間的。hash-max-zipmap-value 64## 與hash-max-zipmap-entries雜湊相類似,資料元素較少的情況下,可以用另一種方式來編碼從而節省大量空間。# list資料類型多少節點以下會採用去指標的緊湊儲存格式list-max-ziplist-entries 512## list資料類型節點值大小小於多少位元組會採用緊湊儲存格式list-max-ziplist-value 64## 還有這樣一種特殊編碼的情況:資料全是64位無符號整型數字構成的字串。# 下面這個配置項就是用來限制這種情況下使用這種編碼的最大上限的。set-max-intset-entries 512 ## 與第一、第二種情況相似,有序序列也可以用一種特別的編碼方式來處理,可節省大量空間。# 這種編碼只適合長度和元素都符合下面限制的有序序列:zset-max-ziplist-entries 128zset-max-ziplist-value 64 ## 關於HyperLogLog的介紹:http://www.redis.io/topics/data-types-intro#hyperloglogs # HyperLogLog稀疏表示限制設定,如果其值大於16000,則仍然採用稠密表示,因為這時稠密表示更能有效使用記憶體 # 建議值為3000 hll-sparse-max-bytes 3000 ## 雜湊重新整理,每100個CPU毫秒會拿出1個毫秒來重新整理Redis的主雜湊表(頂級索引值映射表)。# redis所用的雜湊表實現(見dict.c)採用延遲雜湊重新整理機制:你對一個雜湊表操作越多,雜湊重新整理操作就越頻繁;# 反之,如果伺服器非常不活躍那麼也就是用點記憶體儲存雜湊表而已。# 預設是每秒鐘進行10次雜湊表重新整理,用來重新整理字典,然後儘快釋放記憶體。# 建議:# 如果你對延遲比較在意的話就用 "activerehashing no",每個請求延遲2毫秒不太好嘛。# 如果你不太在意延遲而希望儘快釋放記憶體的話就設定 "activerehashing 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># 一旦達到硬限制用戶端會立即被斷開,或者達到軟式節流並持續達到指定的秒數(連續的)。# 例如,如果硬限制為32MB和軟式節流為16MB/10秒,用戶端將會立即斷開# 如果輸出緩衝區的大小達到32MB,或用戶端達到16MB並連續超過了限制10秒,就將中斷連線。## 預設normal用戶端不做限制,因為他們在不主動請求時不接收資料(以推的方式),只有非同步用戶端# 可能會出現請求資料的速度比它可以讀取的速度快的情境。## pubsub和slave用戶端會有一個預設值,因為訂閱者和slaves以推的方式來接收資料## 把硬限制和軟式節流都設定為0來禁用該功能client-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60## Redis調用內建函式來執行許多背景工作,如關閉用戶端逾時的串連,清除未被請求過的到期Key等等。## 不是所有的任務都以相同的頻率執行,但Redis依照指定的“hz”值來執行檢查任務。## 預設情況下,“hz”的被設定為10。提高該值將在Redis空閑時使用更多的CPU時,但同時當有多個key# 同時到期會使Redis的反應更靈敏,以及逾時可以更精確地處理。## 範圍是1到500之間,但是值超過100通常不是一個好主意。# 大多數使用者應該使用10這個預設值,只有在非常低的延遲要求時有必要提高到100。hz 10## 當一個子進程重寫AOF檔案時,如果啟用下面的選項,則檔案每產生32M資料會被同步。為了增量式的# 寫入硬碟並且避免大的延遲高峰這個指令是非常有用的aof-rewrite-incremental-fsync yes