1 ## Redis 3.2x配置文件詳解 2 3 --------------------------------------- 4 # 默認redis不是之後臺進程的方式啓動,若是須要在後臺運行,須要將這個值設置成yes 5 # 之後臺方式啓動的時候,redis會寫入默認的進程文件/var/run/redis.pid 6 daemonize yes 7 8 # redis啓動的進程路徑 9 pidfile /var/run/redis.pid 10 11 # 啓動進程端口號,這裏最好不要使用默認的6379,容易被攻擊 12 port 7179 13 14 tcp-backlog 511 15 16 # 配置redis監聽到的ip地址,能夠是一個也能夠多個 17 bind 127.0.0.1 10.254.3.42 18 19 # redis的sock路徑 20 unixsocket/tmp/redis.sock 21 unixsocketperm 755 22 23 #當客戶端閒置多長時間後關閉鏈接,若是指定爲0,表示關閉該功能 24 timeout 0 25 26 #指定TCP鏈接是否爲長鏈接,"偵探"信號有server端維護。默認爲0.表示禁用 27 tcp-keepalive 0 28 29 # 日誌級別,log 等級分爲4 級,debug,verbose,notice, 和warning。生產環境下通常開啓notice 30 loglevel notice 31 32 # 日誌文件地址 33 logfile"/usr/local/redis/logs/redis.log" 34 35 36 # 設置數據庫的個數,可使用SELECT 命令來切換數據庫。默認使用的數據庫是0號庫。默認16個庫 37 databases 16 38 39 #RDB方式的持久化是經過快照(snapshotting)完成的,當符合必定條件時Redis會自動將內存中的全部數據進行快照並存儲在硬盤上。進行快照的條件能夠由用戶在配置文件中自定義,由兩個參數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。RDB是Redis默認採用的持久化方式,在配置文件中已經預置了3個條件: 40 save 900 1 # 900秒內有至少1個鍵被更改則進行快照 41 save 300 10 # 300秒內有至少10個鍵被更改則進行快照 42 save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照 43 44 # 持久化數據存儲目錄 45 dir /usr/local/redis/data 46 47 48 #當持久化出現錯誤時,是否依然繼續進行工做,是否終止全部的客戶端write請求。默認設置"yes"表示終止,一旦snapshot數據保存故障,那麼此server爲只讀服務。若是爲"no",那麼這次snapshot將失敗,但下一次snapshot不會受到影響,不過若是出現故障,數據只能恢復到"最近一個成功點" 49 stop-writes-on-bgsave-errorno 50 51 #在進行數據鏡像備份時,是否啓用rdb文件壓縮手段,默認爲yes。壓縮可能須要額外的cpu開支,不過這可以有效的減少rdb文件的大,有利於存儲/備份/傳輸/數據恢復 52 rdbcompression yes 53 54 #checksum文件檢測,讀取寫入的時候rdb文件checksum,會損失一些性能 55 rdbchecksum yes 56 57 #鏡像備份文件的文件名,默認爲dump.rdb 58 dbfilename dump.rdb 59 60 #當主master服務器掛機或主從複製在進行時,是否依然能夠容許客戶訪問可能過時的數據。在"yes"狀況下,slave繼續向客戶端提供只讀服務,有可能此時的數據已通過期;在"no"狀況下,任何向此server發送的數據請求服務(包括客戶端和此server的slave)都將被告知"error" 61 slave-serve-stale-datayes 62 63 # 若是是slave庫,只容許只讀,不容許修改 64 slave-read-only yes 65 66 67 #slave與master的鏈接,是否禁用TCPnodelay選項。"yes"表示禁用,那麼socket通信中數據將會以packet方式發送(packet大小受到socket buffer限制)。能夠提升socket通信的效率(tcp交互次數),可是小數據將會被buffer,不會被當即發送,對於接受者可能存在延遲。"no"表示開啓tcp nodelay選項,任何數據都會被當即發送,及時性較好,可是效率較低,建議設爲no,在高併發或者主從有大量操做的狀況下,設置爲yes 68 repl-disable-tcp-nodelayno 69 70 71 #適用Sentinel模塊(unstable,M-S集羣管理和監控),須要額外的配置文件支持。slave的權重值,默認100.當master失效後,Sentinel將會從slave列表中找到權重值最低(>0)的slave,並提高爲master。若是權重值爲0,表示此slave爲"觀察者",不參與master選舉 72 slave-priority 100 73 74 #限制同時鏈接的客戶數量。當鏈接數超過這個值時,redis 將再也不接收其餘鏈接請求,客戶端嘗試鏈接時將收到error 信息。默認爲10000,要考慮系統文件描述符限制,不宜過大,浪費文件描述符,具體多少根據具體狀況而定 75 maxclients 10000 76 77 #redis-cache所能使用的最大內存(bytes),默認爲0,表示"無限制",最終由OS物理內存大小決定(若是物理內存不足,有可能會使用swap)。此值儘可能不要超過機器的物理內存尺寸,從性能和實施的角度考慮,能夠爲物理內存3/4。此配置須要和"maxmemory-policy"配合使用,當redis中內存數據達到maxmemory時,觸發"清除策略"。在"內存不足"時,任何write操做(好比set,lpush等)都會觸發"清除策略"的執行。在實際環境中,建議redis的全部物理機器的硬件配置保持一致(內存一致),同時確保master/slave中"maxmemory""policy"配置一致。 78 maxmemory 0 79 80 81 #內存過時策略,內存不足"時,數據清除策略,默認爲"volatile-lru"。 82 #volatile-lru ->對"過時集合"中的數據採起LRU(近期最少使用)算法.若是對key使用"expire"指令指定了過時時間,那麼此key將會被添加到"過時集合"中。將已通過期/LRU的數據優先移除.若是"過時集合"中所有移除仍不能知足內存需求,將OOM. 83 #allkeys-lru ->對全部的數據,採用LRU算法 84 #volatile-random ->對"過時集合"中的數據採起"隨即選取"算法,並移除選中的K-V,直到"內存足夠"爲止. 若是若是"過時集合"中所有移除所有移除仍不能知足,將OOM 85 #allkeys-random ->對全部的數據,採起"隨機選取"算法,並移除選中的K-V,直到"內存足夠"爲止 86 #volatile-ttl ->對"過時集合"中的數據採起TTL算法(最小存活時間),移除即將過時的數據. 87 #noeviction ->不作任何干擾操做,直接返回OOM異常 88 #另外,若是數據的過時不會對"應用系統"帶來異常,且系統中write操做比較密集,建議採起"allkeys-lru" 89 maxmemory-policyvolatile-lru 90 91 # 默認值5,上面LRU和最小TTL策略並不是嚴謹的策略,而是大約估算的方式,所以能夠選擇取樣值以便檢查 92 maxmemory-samples 5 93 94 #默認狀況下,redis 會在後臺異步的把數據庫鏡像備份到磁盤,可是該備份是很是耗時的,並且備份也不能很頻繁。因此redis 提供了另一種更加高效的數據庫備份及災難恢復方式。開啓append only 模式以後,redis 會把所接收到的每一次寫操做請求都追加到appendonly.aof 文件中,當redis 從新啓動時,會從該文件恢復出以前的狀態。可是這樣會形成appendonly.aof 文件過大,因此redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行從新整理。若是不常常進行數據遷移操做,推薦生產環境下的作法爲關閉鏡像,開啓appendonly.aof,同時能夠選擇在訪問較少的時間天天對appendonly.aof 進行重寫一次。 95 #另外,對master機器,主要負責寫,建議使用AOF,對於slave,主要負責讀,挑選出1-2臺開啓AOF,其他的建議關閉 96 appendonly yes 97 98 #aof文件名字,默認爲appendonly.aof 99 appendfilename"appendonly.aof" 100 101 # 設置對appendonly.aof 文件進行同步的頻率。always表示每次有寫操做都進行同步,everysec 表示對寫操做進行累積,每秒同步一次。no不主動fsync,由OS本身來完成。這個須要根據實際業務場景進行配置 102 appendfsync everysec 103 104 # 在aof rewrite期間,是否對aof新記錄的append暫緩使用文件同步策略,主要考慮磁盤IO開支和請求阻塞時間。默認爲no,表示"不暫緩",新的aof記錄仍然會被當即同步 105 no-appendfsync-on-rewriteno 106 107 #當Aof log增加超過指定比例時,重寫logfile,設置爲0表示不自動重寫Aof 日誌,重寫是爲了使aof體積保持最小,而確保保存最完整的數據。 108 auto-aof-rewrite-percentage100 109 #觸發aof rewrite的最小文件尺寸 110 auto-aof-rewrite-min-size64mb 111 112 #lua腳本執行的最大時間,單位毫秒 113 lua-time-limit 5000 114 115 116 117 #慢日誌記錄,單位微妙,10000就是10毫秒值,若是操做時間超過此值,將會把command信息"記錄"起來.(內存,非文件)。其中"操做時間"不包括網絡IO開支,只包括請求達到server後進行"內存實施"的時間."0"表示記錄所有操做 118 slowlog-log-slower-than10000 119 120 #"慢操做日誌"保留的最大條數,"記錄"將會被隊列化,若是超過了此長度,舊記錄將會被移除。能夠經過"SLOWLOG<subcommand> args"查看慢記錄的信息(SLOWLOG get 10,SLOWLOG reset) 121 slowlog-max-len 128 122 notify-keyspace-events"" 123 124 #hash類型的數據結構在編碼上可使用ziplist和hashtable。ziplist的特色就是文件存儲(以及內存存儲)所需的空間較小,在內容較小時,性能和hashtable幾乎同樣.所以redis對hash類型默認採起ziplist。若是hash中條目的條目個數或者value長度達到閥值,將會被重構爲hashtable。 125 #這個參數指的是ziplist中容許存儲的最大條目個數,,默認爲512,建議爲128 126 hash-max-ziplist-entries 512 127 #ziplist中容許條目value值最大字節數,默認爲64,建議爲1024 128 hash-max-ziplist-value 64 129 130 #同上 131 list-max-ziplist-entries512 132 list-max-ziplist-value64 133 134 #intset中容許保存的最大條目個數,若是達到閥值,intset將會被重構爲hashtable 135 set-max-intset-entries512 136 137 #zset爲有序集合,有2中編碼類型:ziplist,skiplist。由於"排序"將會消耗額外的性能,當zset中數據較多時,將會被重構爲skiplist。 138 zset-max-ziplist-entries128 139 #zset中容許條目value值最大字節數,默認爲64,建議爲1024 140 zset-max-ziplist-value64 141 142 143 #是否開啓頂層數據結構的rehash功能,若是內存容許,請開啓。rehash可以很大程度上提升K-V存取的效率 144 activerehashing yes 145 146 #客戶端buffer控制。在客戶端與server進行的交互中,每一個鏈接都會與一個buffer關聯,此buffer用來隊列化等待被client接受的響應信息。若是client不能及時的消費響應信息,那麼buffer將會被不斷積壓而給server帶來內存壓力.若是buffer中積壓的數據達到閥值,將會致使鏈接被關閉,buffer被移除。 147 148 #buffer控制類型包括:normal -> 普通鏈接;slave->與slave之間的鏈接;pubsub ->pub/sub類型鏈接,此類型的鏈接,每每會產生此種問題;由於pub端會密集的發佈消息,可是sub端可能消費不足.指令格式:client-output-buffer-limit <class> <hard><soft><seconds>",其中hard表示buffer最大值,一旦達到閥值將當即關閉鏈接;soft表示"容忍值",它和seconds配合,若是buffer值超過soft且持續時間達到了seconds,也將當即關閉鏈接,若是超過了soft可是在seconds以後,buffer數據小於了soft,鏈接將會被保留.其中hard和soft都設置爲0,則表示禁用buffer控制.一般hard值大於soft. 149 client-output-buffer-limitnormal 0 0 0 150 client-output-buffer-limitslave 256mb 64mb 60 151 client-output-buffer-limitpubsub 32mb 8mb 60 152 153 154 #Redis server執行後臺任務的頻率,默認爲10,此值越大表示redis對"間歇性task"的執行次數越頻繁(次數/秒)。"間歇性task"包括"過時集合"檢測、關閉"空閒超時"的鏈接等,此值必須大於0且小於500。此值太小就意味着更多的cpu週期消耗,後臺task被輪詢的次數更頻繁。此值過大意味着"內存敏感"性較差。建議採用默認值。 155 hz 10 156 157 #當一個child在重寫AOF文件的時候,若是aof-rewrite-incremental-fsync值爲yes生效,那麼這個文件會以每次32M數據的來被同步,這大量新增提交到磁盤是有用的,而且能避免高峯延遲。 158 aof-rewrite-incremental-fsyncyes 159 160 ------------------------------------------------------------------------------- 161 可對以上配置按基本配置、主從配置、安全、限制、日誌模式、慢查詢等進行分類 162 ------------------------------------------------------------------------------- 163 164 服務端命令 165 time # 返回時間戳+微秒 166 dbsize #返回key的數量 167 bgrewriteaof #重寫aof 168 bgsave #後臺開啓子進程dump數據 169 save #阻塞進程dump數據 170 lastsave 171 slaveof host port #作host port的從服務器(數據清空,複製新主內容) 172 slaveof no one #變成主服務器(原數據不丟失,通常用於主服失敗後) 173 flushdb #清空當前數據庫的全部數據 174 flushall #清空全部數據庫的全部數據(誤用了怎麼辦?) 175 shutdown [save/nosave] #關閉服務器,保存數據,修改AOF(若是設置) 176 slowlog get #獲取慢查詢日誌 177 slowlog len #獲取慢查詢日誌條數 178 slowlog reset #清空慢查詢 179 info [] 180 config get #選項(支持*通配) 181 config set #選項 值 182 config rewrite #把值寫到配置文件 183 config restart #更新info命令的信息 184 debug object key #調試選項,看一個key的狀況 185 debug segfault #模擬段錯誤,讓服務器崩潰 186 object key (refcount|encoding|idletime) 187 monitor #打開控制檯,觀察命令(調試用) 188 client list #列出全部鏈接 189 client kill #殺死某個鏈接 CLIENT KILL 127.0.0.1:43501 190 client getname #獲取鏈接的名稱 默認nil 191 client setname "名稱" #設置鏈接名稱,便於調試 192 鏈接命令 193 auth 密碼 #密碼登錄(若是有密碼) 194 ping #測試服務器是否可用 195 echo "some content" #測試服務器是否正常交互 196 select 0/1/2... #選擇數據庫 197 quit #退出鏈接