天天看點

Redis詳解(二)------ redis的配置檔案介紹

  上一篇部落格我們介紹了如何安裝Redis,在Redis的解壓目錄下有個很重要的配置檔案 redis.conf (/opt/redis-4.0.9目錄下),關于Redis的很多功能的配置都在此檔案中完成的,在上一講我也說過,一般為了不破壞安裝的檔案,出廠預設配置最好不要去改,是以我們将此配置檔案複制到 /etc/redis/目錄下了。

  通過 vim /etc/redis/redis.conf  指令打開此檔案。下面我們将詳細介紹此配置檔案。

  ps:大家不懂這些配置意思沒關系,後面會在具體執行個體中進行介紹,先過個眼熟即可。

1、開頭說明

  

Redis詳解(二)------ redis的配置檔案介紹

  這裡沒什麼好說的,需要注意的是後面需要使用記憶體大小時,可以指定機關,通常是以 k,gb,m的形式出現,并且機關不區分大小寫。

2、INCLUDES

Redis詳解(二)------ redis的配置檔案介紹

  我們知道Redis隻有一個配置檔案,如果多個人進行開發維護,那麼就需要多個這樣的配置檔案,這時候多個配置檔案就可以在此通過 include /path/to/local.conf 配置進來,而原本的 redis.conf 配置檔案就作為一個總閘。

  ps:如果用過struts2 開發的同學,在項目組中多人開發的情況下,通常會有多個struts2.xml 檔案,這時候也會通過類時的配置引入進來。

  另外需要注意的時,如果将此配置寫在redis.conf 檔案的開頭,那麼後面的配置會覆寫引入檔案的配置,如果想以引入檔案的配置為主,那麼需要将 include 配置寫在 redis.conf 檔案的末尾。

3、MODULES

   

Redis詳解(二)------ redis的配置檔案介紹

  redis3.0的爆炸功能是新增了叢集,而redis4.0就是在3.0的基礎上新增了許多功能,其中這裡的 自定義子產品配置就是其中之一。通過這裡的 loadmodule 配置将引入自定義子產品來新增一些功能。

4、NETWORK

Redis詳解(二)------ redis的配置檔案介紹

  ps:這裡的配置較長,我隻截取了一部分,下同。

  ①、bind:綁定redis伺服器網卡IP,預設為127.0.0.1,即本地回環位址。這樣的話,通路redis服務隻能通過本機的用戶端連接配接,而無法通過遠端連接配接。如果bind選項為空的話,那會接受所有來自于可用網絡接口的連接配接。

  ②、port:指定redis運作的端口,預設是6379。由于Redis是單線程模型,是以單機開多個Redis程序的時候會修改端口。

  ③、timeout:設定用戶端連接配接時的逾時時間,機關為秒。當用戶端在這段時間内沒有發出任何指令,那麼關閉該連接配接。預設值為0,表示不關閉。

  ④、tcp-keepalive :機關是秒,表示将周期性的使用SO_KEEPALIVE檢測用戶端是否還處于健康狀态,避免伺服器一直阻塞,官方給出的建議值是300s,如果設定為0,則不會周期性的檢測。

5、GENERAL

Redis詳解(二)------ redis的配置檔案介紹

  具體配置詳解:

  ①、daemonize:設定為yes表示指定Redis以守護程序的方式啟動(背景啟動)。預設值為 no

  ②、pidfile:配置PID檔案路徑,當redis作為守護程序運作的時候,它會把 pid 預設寫到 /var/redis/run/redis_6379.pid 檔案裡面

  ③、loglevel :定義日志級别。預設值為notice,有如下4種取值:

          debug(記錄大量日志資訊,适用于開發、測試階段)

          verbose(較多日志資訊)

          notice(适量日志資訊,使用于生産環境)

          warning(僅有部分重要、關鍵資訊才會被記錄)

  ④、logfile :配置log檔案位址,預設列印在指令行終端的視窗上

  ⑤、databases:設定資料庫的數目。預設的資料庫是DB 0 ,可以在每個連接配接上使用select  <dbid> 指令選擇一個不同的資料庫,dbid是一個介于0到databases - 1 之間的數值。預設值是 16,也就是說預設Redis有16個資料庫。

6、SNAPSHOTTING

  這裡的配置主要用來做持久化操作。

Redis詳解(二)------ redis的配置檔案介紹

  ①、save:這裡是用來配置觸發 Redis的持久化條件,也就是什麼時候将記憶體中的資料儲存到硬碟。預設如下配置:

save 900 1:表示900 秒内如果至少有 1 個 key 的值變化,則儲存
save 300 10:表示300 秒内如果至少有 10 個 key 的值變化,則儲存
save 60 10000:表示60 秒内如果至少有 10000 個 key 的值變化,則儲存      

    當然如果你隻是用Redis的緩存功能,不需要持久化,那麼你可以注釋掉所有的 save 行來停用儲存功能。可以直接一個空字元串來實作停用:save ""

  ②、stop-writes-on-bgsave-error :預設值為yes。當啟用了RDB且最後一次背景儲存資料失敗,Redis是否停止接收資料。這會讓使用者意識到資料沒有正确持久化到磁盤上,否則沒有人會注意到災難(disaster)發生了。如果Redis重新開機了,那麼又可以重新開始接收資料了

  ③、rdbcompression ;預設值是yes。對于存儲到磁盤中的快照,可以設定是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。如果你不想消耗CPU來進行壓縮的話,可以設定為關閉此功能,但是存儲在磁盤上的快照會比較大。

  ④、rdbchecksum :預設值是yes。在存儲快照後,我們還可以讓redis使用CRC64算法來進行資料校驗,但是這樣做會增加大約10%的性能消耗,如果希望擷取到最大的性能提升,可以關閉此功能。

  ⑤、dbfilename :設定快照的檔案名,預設是 dump.rdb

  ⑥、dir:設定快照檔案的存放路徑,這個配置項一定是個目錄,而不能是檔案名。使用上面的 dbfilename 作為儲存的檔案名。

7、REPLICATION

Redis詳解(二)------ redis的配置檔案介紹

  ①、slave-serve-stale-data:預設值為yes。當一個 slave 與 master 失去聯系,或者複制正在進行的時候,slave 可能會有兩種表現:

      1) 如果為 yes ,slave 仍然會應答用戶端請求,但傳回的資料可能是過時,或者資料可能是空的在第一次同步的時候 

      2) 如果為 no ,在你執行除了 info he salveof 之外的其他指令時,slave 都将傳回一個 "SYNC with master in progress" 的錯誤

  ②、slave-read-only:配置Redis的Slave執行個體是否接受寫操作,即Slave是否為隻讀Redis。預設值為yes。

  ③、repl-diskless-sync:主從資料複制是否使用無硬碟複制功能。預設值為no。

  ④、repl-diskless-sync-delay:當啟用無硬碟備份,伺服器等待一段時間後才會通過套接字向從站傳送RDB檔案,這個等待時間是可配置的。  這一點很重要,因為一旦傳送開始,就不可能再為一個新到達的從站服務。從站則要排隊等待下一次RDB傳送。是以伺服器等待一段  時間以期更多的從站到達。延遲時間以秒為機關,預設為5秒。要關掉這一功能,隻需将它設定為0秒,傳送會立即啟動。預設值為5。

  ⑤、repl-disable-tcp-nodelay:同步之後是否禁用從站上的TCP_NODELAY 如果你選擇yes,redis會使用較少量的TCP包和帶寬向從站發送資料。但這會導緻在從站增加一點資料的延時。  Linux核心預設配置情況下最多40毫秒的延時。如果選擇no,從站的資料延時不會那麼多,但備份需要的帶寬相對較多。預設情況下我們将潛在因素優化,但在高負載情況下或者在主從站都跳的情況下,把它切換為yes是個好主意。預設值為no。

8、SECURITY

Redis詳解(二)------ redis的配置檔案介紹

  ①、rename-command:指令重命名,對于一些危險指令例如:

    flushdb(清空資料庫)

    flushall(清空所有記錄)

    config(用戶端連接配接後可配置伺服器)

    keys(用戶端連接配接後可檢視所有存在的鍵)                   

  作為服務端redis-server,常常需要禁用以上指令來使得伺服器更加安全,禁用的具體做法是是:

  • rename-command FLUSHALL ""

也可以保留指令但是不能輕易使用,重命名這個指令即可:

  • rename-command FLUSHALL abcdefg

  這樣,重新開機伺服器後則需要使用新指令來執行操作,否則伺服器會報錯unknown command。

9、CLIENTS

Redis詳解(二)------ redis的配置檔案介紹

  ①、maxclients :設定用戶端最大并發連接配接數,預設無限制,Redis可以同時打開的用戶端連接配接數為Redis程序可以打開的最大檔案。  描述符數-32(redis server自身會使用一些),如果設定 maxclients為0 。表示不作限制。當用戶端連接配接數到達限制時,Redis會關閉新的連接配接并向用戶端傳回max number of clients reached錯誤資訊

10、MEMORY MANAGEMENT

Redis詳解(二)------ redis的配置檔案介紹

  ①、maxmemory:設定用戶端最大并發連接配接數,預設無限制,Redis可以同時打開的用戶端連接配接數為Redis程序可以打開的最大檔案。描述符數-32(redis server自身會使用一些),如果設定 maxclients為0 。表示不作限制。當用戶端連接配接數到達限制時,Redis會關閉新的連接配接并向用戶端傳回max number of clients reached錯誤資訊。

  ②、maxmemory-policy :當記憶體使用達到最大值時,redis使用的清楚政策。有以下幾種可以選擇:

    1)volatile-lru   利用LRU算法移除設定過過期時間的key (LRU:最近使用 Least Recently Used ) 

    2)allkeys-lru   利用LRU算法移除任何key 

    3)volatile-random 移除設定過過期時間的随機key 

    4)allkeys-random  移除随機ke

    5)volatile-ttl   移除即将過期的key(minor TTL) 

    6)noeviction  noeviction   不移除任何key,隻是傳回一個寫錯誤 ,預設選項

   ③、maxmemory-samples :LRU 和 minimal TTL 算法都不是精準的算法,但是相對精确的算法(為了節省記憶體)。随意你可以選擇樣本大小進行檢,redis預設選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設定樣本數。

11、APPEND ONLY MODE

Redis詳解(二)------ redis的配置檔案介紹

  ①、appendonly:預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途當機,會導緻可能有幾分鐘的資料丢失,根據save來政策進行持久化,Append Only File是另一種持久化方式,  可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入appendonly.aof檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案。預設值為no。

  ②、appendfilename :aof檔案名,預設是"appendonly.aof"

  ③、appendfsync:aof持久化政策的配置;no表示不執行fsync,由作業系統保證資料同步到磁盤,速度最快;always表示每次寫入都執行fsync,以保證資料同步到磁盤;everysec表示每秒執行一次fsync,可能會導緻丢失這1s資料

  ④、no-appendfsync-on-rewrite:在aof重寫或者寫入rdb檔案的時候,會執行大量IO,此時對于everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設定為預設設定為no。如果對延遲要求很高的應用,這個字段可以設定為yes,否則還是設定為no,這樣對持久化特性來說這是更安全的選擇。   設定為yes表示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入,預設為no,建議yes。Linux的預設fsync政策是30秒。可能丢失30秒資料。預設值為no。

  ⑤、auto-aof-rewrite-percentage:預設值為100。aof自動重寫配置,當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候,Redis能夠調用bgrewriteaof對日志檔案進行重寫。目前AOF檔案大小是上次日志重寫得到AOF檔案大小的二倍(設定為100)時,自動啟動新的日志重寫過程。

  ⑥、auto-aof-rewrite-min-size:64mb。設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫。

  ⑦、aof-load-truncated:aof檔案可能在尾部是不完整的,當redis啟動的時候,aof檔案的資料被載入記憶體。重新開機可能發生在redis所在的主機作業系統當機後,尤其在ext4檔案系統沒有加上data=ordered選項,出現這種現象  redis當機或者異常終止不會造成尾部不完整現象,可以選擇讓redis退出,或者導入盡可能多的資料。如果選擇的是yes,當截斷的aof檔案被導入的時候,會自動釋出一個log給用戶端然後load。如果是no,使用者必須手動redis-check-aof修複AOF檔案才可以。預設值為 yes。

12、LUA SCRIPTING

Redis詳解(二)------ redis的配置檔案介紹

  ①、lua-time-limit:一個lua腳本執行的最大時間,機關為ms。預設值為5000.

13、REDIS CLUSTER

Redis詳解(二)------ redis的配置檔案介紹

  ①、cluster-enabled:叢集開關,預設是不開啟叢集模式。

  ②、cluster-config-file:叢集配置檔案的名稱,每個節點都有一個叢集相關的配置檔案,持久化儲存叢集的資訊。 這個檔案并不需要手動配置,這個配置檔案有Redis生成并更新,每個Redis叢集節點需要一個單獨的配置檔案。請確定與執行個體運作的系統中配置檔案名稱不沖突。預設配置為nodes-6379.conf。

  ③、cluster-node-timeout :可以配置值為15000。節點互連逾時的閥值,叢集節點逾時毫秒數

  ④、cluster-slave-validity-factor :可以配置值為10。在進行故障轉移的時候,全部slave都會請求申請為master,但是有些slave可能與master斷開連接配接一段時間了,  導緻資料過于陳舊,這樣的slave不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:比較slave斷開連接配接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period     如果節點逾時時間為三十秒, 并且slave-validity-factor為10,假設預設的repl-ping-slave-period是10秒,即如果超過310秒slave将不會嘗試進行故障轉移

  ⑤、cluster-migration-barrier :可以配置值為1。master的slave數量大于該值,slave才能遷移到其他孤立master上,如這個參數若被設為2,那麼隻有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。

  ⑥、cluster-require-full-coverage:預設情況下,叢集全部的slot有節點負責,叢集狀态才為ok,才能提供服務。  設定為no,可以在slot沒有全部配置設定的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而造成很長時間資料不一緻。

作者:

YSOcean

出處:

http://www.cnblogs.com/ysocean/

本文版權歸作者所有,歡迎轉載,但未經作者同意不能轉載,否則保留追究法律責任的權利。