bind xxx.xxx.xxx.xxx
綁定redis服務器網卡IP,默認為127.0.0.1,即本地回環地址。這樣的話,訪問redis服務只能通過本機的客戶端連接,而無法通過遠程連接。如果bind選項為空的話,那會接收來自任意一個網卡的Redis請求。 注意:在集群模式時,不能指定lo網卡(127.0.0.1I),否則客戶端重定向時會報”Connection refused”的錯誤。
protected-mode no
保護模式
port 6379
指定redis運行的端口,默認是6379。由於Redis是單線程模型,因此單機開多個Redis進程的時候會修改端口。
tcp-backlog 511
此參數是指:已完成三次握手的TCP連接隊列,默認值511,但是Linux系統內核參數socket最大連接的值默認是128,對應文件/proc/sys/net/core/somaxconn,當系統並發量大且客戶端連接緩慢時,應該將兩個值進行參考設置。 建議將/proc/sys/net/core/somaxconn的值設置為2048, 如果重啟生效,需要在/etc/sysctl.conf中設置: net.core.somaxconn = 2048 執行sysctl -p生效
timeout 0
表示客戶端連接空閑N秒后,將斷開連接。設置0表示禁用,永不超時
tcp-keepalive 300
客戶端連接的保活時間,避免服務器阻塞。官方默認300s,設置為0時,表示永不檢測
daemonize yes
redis服務是否以守護進程在后台運行。設置為no時,表示前台運行
pidfile /var/run/redis_6379.pid
redis運行的進程號保存文件位置
loglevel notice
定義日志級別。
默認值為notice,有如下4種取值:
debug(記錄大量日志信息,適用於開發、測試階段)
verbose(較多日志信息)
notice(適量日志信息,使用於生產環境)
warning(僅有部分重要、關鍵信息才會被記錄)
logfile "/data/module/redis-5.0.0/logs/redis.log"
redis日志文件定義
databases 16
設置數據庫的數目。默認的數據庫是DB 0 ,可以在每個連接上使用select <dbid> 命令選擇一個不同的數據庫,dbid 是 0 到'databases'-1之間的數字 注意:集群模式的時候,只能使用0號數據庫
save 900 1
save 300 10
save 60 10000
redis進行rdb持久化的設置。分別表示: 900秒內有1個key發生變化,就持久化 300秒內有10個key發生變化,就持久化 60秒內有1000個key發生變化,就持久化 如果redis只是用於緩存的功能,可以不開啟rdb持久化。設置為save ""即可。
stop-writes-on-bgsave-error yes
默認值為yes。當啟用了RDB且最后一次后台保存數據失敗,Redis是否停止接收數據。這會讓用戶意識到數據沒有正確持久化到磁盤上,否則沒有人會注意到災難(disaster)發生了。如果Redis重啟了,那么又可以重新開始接收數據了
rdbcompression yes
默認值是yes。對於存儲到磁盤中的快照,可以設置是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。如果你不想消耗CPU來進行壓縮的話,可以設置為關閉此功能,但是存儲在磁盤上的快照會比較大。
rdbchecksum no
默認值是yes。在存儲快照后,我們還可以讓redis使用CRC64算法來進行數據校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能。
dbfilename dump.rdb
設置快照的文件名,默認是 dump.rdb
dir /data/module/redis-5.0.0/data
設置快照文件的存放路徑,這個配置項一定是個目錄,而不能是文件名。使用上面的 dbfilename 作為保存的文件名。
masterauth 123456
設置slave節點同步數據時的認證密碼
replica-serve-stale-data yes
默認值為yes。當一個 slave 與 master 失去聯系,或者復制正在進行的時候,slave 可能會有兩種表現: 1) 如果為 yes ,slave 仍然會應答客戶端請求,但返回的數據可能是過時,或者數據可能是空的在第一次同步的時候 2) 如果為 no ,在你執行除了 info he salveof 之外的其他命令時,slave 都將返回一個 "SYNC with master in progress" 的錯誤
slave-read-only yes
配置Redis的Slave實例是否接受寫操作,即Slave是否為只讀Redis。默認值為yes。
repl-diskless-sync no
主從數據復制是否使用無硬盤復制功能。默認值為no。
repl-diskless-sync-delay 5
當啟用無硬盤備份,服務器等待一段時間后才會通過套接字向從站傳送RDB文件,這個等待時間是可配置的。
這一點很重要,因為一旦傳送開始,就不可能再為一個新到達的從節點服務。新請求的從節點則要排隊等待下一次RDB傳送。因此服務器等待一段 時間以期更多的從節點到達。延遲時間以秒為單位,默認為5秒。要關掉這一功能,只需將它設置為0秒,傳送會立即啟動。默認值為5。
repl-disable-tcp-nodelay no
同步之后是否禁用從站上的TCP_NODELAY 如果你選擇yes,redis會使用較少量的TCP包和帶寬向從站發送數據。但這會導致在從站增加一點數據的延時。
Linux內核默認配置情況下最多40毫秒的延時。如果選擇no,從站的數據延時不會那么多,但備份需要的帶寬相對較多。默認情況下我們將潛在因素優化,但在高負載情況下或者在主從站都跳的情況下,把它切換為yes是個好主意。默認值為no。
requirepass 123456
redis啟用密碼認證一定要requirepass和masterauth同時設置。
如果主節點設置了requirepass登錄驗證,在主從切換,slave在和master做數據同步的時候首先需要發送一個ping的消息給主節點判斷主節點是否存活,再監聽主節點的端口是否聯通,發送數據同步等都會用到master的登錄密碼,否則無法登錄,log會出現響應的報錯。
也就是說slave的masterauth和master的requirepass是對應的,所以建議redis啟用密碼時將各個節點的masterauth和requirepass設置為相同的密碼,降低運維成本。當然設置為不同也是可以的,注意slave節點masterauth和master節點requirepass的對應關系就行。
masterauth作用:主要是針對master對應的slave節點設置的,在slave節點數據同步的時候用到。 requirepass作用:對登錄權限做限制,redis每個節點的requirepass可以是獨立、不同的。
rename-command
命令重命名,對於一些危險命令例如: flushdb(清空數據庫) flushall(清空所有記錄) config(客戶端連接后可配置服務器) keys(客戶端連接后可查看所有存在的鍵) 例如: 可以將命令禁用: # rename-command CONFIG "" 也可以對命令設置別名 rename-command flushall abc


maxclients 10000
設置客戶端最大並發連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件。 描述符數-32(redis server自身會使用一些),如果設置 maxclients為0 。表示不作限制。
當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息
maxmemory 6GB
設置redis可以使用的最大物理內存,有幾種設置方式: maxmemory 1,073,741,824 maxmemory 1,073,741,824B maxmemory 1GB 不帶單位默認為B。但需要注意KB和K、MB和M、GB和G是不同的,如1K表示1000字節,而1KB則為1024字節。如果maxmemory值為0,表示不做限制。 Redis會占用非常大內存,所以通常需要關閉系統的OOM,方法為將“/proc/sys/vm/overcommit_memory”的值設置為1(通常不建議設置為2)
也可以使用命令sysctl設置,如:sysctl vm.overcommit_memory=1,但注意一定要同時修改文件/etc/sysctl.conf,執行“sysctl -p”,以便得系統重啟后仍然生效。 可選值:0、1、2。 0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。 1, 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。 2, 表示內核允許分配超過所有物理內存和交換空間總和的內存
maxmemory-policy allkeys-lru
當內存使用達到最大值時,redis使用的鍵清除策略。有以下幾種: (1)默認生效的是永不過期策略(noeviction policy) 在noeviction策略中,沒有鍵設置為過期。如果redis沒有可用內存,任何寫操作都會導致redis錯誤。 (2) volatile-lru 將最近較少使用的鍵驅逐 這些鍵必須通過 expire set 命令設置了超時的。當redis內存耗盡時,redis開始刪除那些設置了過期時間的鍵,即便該鍵仍然有剩余時間。 (3)allkeys-lru 基於鍵的TTL值來驅逐鍵。 當鍵值存儲到redis,並通過expire設置了超時時間,當redis沒有鍵值寫入,且已接近最大內存,會根據設置的TTL依據LRU算法進行驅逐。忽略沒有設置過期時間的鍵。 (4)volatile-random 基於鍵上設置的過期狀態隨機驅逐一個鍵 需要O(n)時間復雜度的操作來計算創建的這些鍵是否已被驅逐。 (5)allkeys-random 整個鍵空間中隨機驅逐一個鍵 (6)volatile-ttl redis會嘗試根據鍵的剩余時間(TTL)清除鍵。
maxmemory-samples 3
redis的LRU算法是不准確的,因為redis並不會自動選擇最佳的候選鍵來驅逐,例如最少使用的鍵或者最早訪問的鍵。相反,redis默認行為是選取5個鍵的samples,並驅逐當中最少使用的那個。
如果想要增加LRU算法的精確性,可以更改redis.conf文件中的maxmemory-samples指令,或者在運行時通過config set maxmemory-samples命令進行設置。 將maxmemory-samples增加到10,從而提升redisLRU算法的性能,效果接近真實LRU算法,但是副作用就是消耗更多的CPU計算能力。將maxmemory-samples降至3,從而減少了redisLRU算法的精確性,不過相應地加快了處理速度。
appendonly yes
默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鍾的數據丟失,根據save來策略進行持久化
Append Only File是另一種持久化方式
可以提供更好的持久化特性。Redis會把每次寫入的數據在接收后都寫入appendonly.aof文件,每次啟動時Redis都會先把這個文件的數據讀入內存里,先忽略RDB文件。默認值為no。
appendfilename
aof文件名,默認是"appendonly.aof"
appendfsync
aof持久化策略的配置;
no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快
appendfsync always
每次收到寫命令就立即強制寫入磁盤,是最有保證的完全的持久化,但速度也是最慢的,一般不推薦使用。
appendfsync everysec
每秒鍾強制寫入磁盤一次,在性能和持久化方面做了很好的折中,是受推薦的方式。 可能會導致丟失這1s數據
no-appendfsync-on-rewrite no
在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
默認值為100。aof自動重寫配置,當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候,Redis能夠調用bgrewriteaof對日志文件進行重寫。
當前AOF文件大小是上次日志重寫得到AOF文件大小的二倍(設置為100)時,自動啟動新的日志重寫過程。
auto-aof-rewrite-min-size 64mb
設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
aof-load-truncated no
aof文件可能在尾部是不完整的,當redis啟動的時候,aof文件的數據被載入內存。重啟可能發生在redis所在的主機操作系統宕機后,尤其在ext4文件系統沒有加上data=ordered選項,出現這種現象
redis宕機或者異常終止不會造成尾部不完整現象,可以選擇讓redis退出,或者導入盡可能多的數據。如果選擇的是yes,當截斷的aof文件被導入的時候,會自動發布一個log給客戶端然后load。如果是no,用戶必須手動redis-check-aof修復AOF文件才可以。默認值為 yes。
lua-time-limit
一個lua腳本執行的最大時間,單位為ms。默認值為5000.
工作模式:cluster-enabled yes
集群模式啟動redis設置為yes,表示開啟集群,否則會以單實例啟動。
集群配置文件:cluster-config-file nodes-6379.conf
這是redis集群運行時服務自身維護的配置文件。Redis群集節點每次發生更改時自動保留群集配置(基本上為狀態)的文件,以便能夠 在啟動時重新讀取它。 該文件列出了群集中其他節點,它們的狀態,持久變量等等。 由於某些消息的接收,通常會將此文件重寫並刷新到磁盤上。
cluster-node-timeout 15000
集群超時時間(毫秒),節點超時多久則認為它宕機了。如果主節點超過指定的時間不可達,進行故障切換,將其對應的從節點提升為主。注意,每個無法在指定時間內到達大多數主節點的節點將停止接受查詢。
cluster-require-full-coverage no
默認為yes,表示只有所有哈希槽有主節點管理的時候,集群才可以接受查詢。no 表示 當集群哈希槽的一部分沒有主節點接管或者主節點宕機沒有從節點進行故障切換時,仍然可以提供服務。
cluster-migration-barrier 1
可以配置值為1。master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數若被設為2,那么只有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。
# cluster-replica-validity-factor 10
集群副本有效因子 此參數設置后,需要在集群可用性和數據的完整性之間進行取舍。 例如:設置了副本有效性因子為cluster-replica-validity-factor 10 ,節點超時時間 cluster-node-timeout 5000,且副本的復制周期為10秒,那么如果從節點與主節點的最后一次交互的時間大於(node-timeout * replica-validity-factor) + repl-ping-replica-period)的值,將不會進行故障轉移。 如果需要集群的最大可用性,可以將此值設置為0,表示忽略從節點最后一次和主節點交互的時間,從節點始終進行故障轉移。但數據的完整性最低
配置文件
bind 10.0.0.10 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "/data/module/redis-5.0.0/logs/redis.log" databases 16 always-show-logo yes save "" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum no dbfilename dump.rdb dir /data/module/redis-5.0.0/data masterauth 123456 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 requirepass 123456 rename-command flushall abc maxmemory 1GB maxmemory-policy allkeys-lru maxmemory-samples 3 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated no lua-time-limit 5000 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 cluster-require-full-coverage yes slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
本文參考:https://www.cnblogs.com/ysocean/p/9074787.html
