1. 程式人生 > 實用技巧 >2、redis入門--redis配置檔案

2、redis入門--redis配置檔案

Redis 的配置檔案位於 Redis 安裝目錄下,檔名為redis.conf(Windows 名為 redis.windows.conf)。 1.通過CONFIG命令檢視或設定配置項。
1 redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
1 config get * // 獲取的是所有配置項

2.編輯配置 你可以通過修改 redis.conf 檔案或使用CONFIG set命令來修改配置。
1 redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
2 config set 配置項 配置項的值 修改成功會返回 OK
有些配置項是不能通過set修改的,報以下錯誤: (error) ERR Unsupported CONFIG parameter: daemonize 3、配置檔案
  1
# daemonize no 預設情況下, redis 不是在後臺執行的,如果需要在後臺執行,把該項的值更改為 yes 2 daemonize yes 3 4 # 當 redis 在後臺執行的時候, Redis 預設會把 pid 檔案放在 /var/run/redis.pid ,你可以配置到其他地址。 5 # 當執行多個 redis 服務時,需要指定不同的 pid 檔案和埠 6 pidfile /var/run/redis_6379.pid 7 8 # 指定 redis 執行的埠,預設是 6379 9 port 6379 10 11 # 在高併發的環境中,為避免慢客戶端的連線問題,需要設定一個高速後臺日誌
12 tcp-backlog 511 13 14 # 指定 redis 只接收來自於該 IP 地址的請求,如果不進行設定,那麼將處理所有請求 15 # bind 192.168.1.100 10.0.0.1 16 # bind 127.0.0.1 17 18 # 設定客戶端連線時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連線 19 # 0 是關閉此設定 20 timeout 0 21 22 # TCP keepalive 23 # 在 Linux 上,指定值(秒)用於傳送 ACKs 的時間。注意關閉連線需要雙倍的時間。預設為 0 24 tcp-keepalive 0
25 26 # 指定日誌記錄級別,生產環境推薦 notice 27 # Redis 總共支援四個級別: debug 、 verbose 、 notice 、 warning ,預設為 verbose 28 # debug 記錄很多資訊,用於開發和測試 29 # varbose 有用的資訊,不像 debug 會記錄那麼多 30 # notice 普通的 verbose ,常用於生產環境 31 # warning 只有非常重要或者嚴重的資訊會記錄到日誌 32 33 loglevel notice 34 35 # 配置 log 檔案地址 36 # 預設值為 stdout ,標準輸出,若後臺模式會輸出到 /dev/null 37 logfile /var/log/redis/redis.log 38 39 # 可用資料庫數 40 # 預設值為 16 ,預設資料庫為 0 ,資料庫範圍在 0- ( database-1 )之間 41 databases 16 42 43 ################################ 快照################################# 44 # 儲存資料到磁碟,格式如下 : 45 #save 46 # 指出在多長時間內,有多少次更新操作,就將資料同步到資料檔案 rdb 。 47 # 相當於條件觸發抓取快照,這個可以多個條件配合 48 # 比如預設配置檔案中的設定,就設定了三個條件 49 # save 900 1 900 秒內至少有 1 個 key 被改變 50 # save 300 10 300 秒內至少有 300 個 key 被改變 51 # save 60 10000 60 秒內至少有 10000 個 key 被改變 52 # save 900 1 53 # save 300 10 54 # save 60 10000 55 56 # 後臺儲存錯誤停止寫。 57 stop-writes-on-bgsave-error yes 58 59 # 儲存至本地資料庫時(持久化到 rdb 檔案)是否壓縮資料,預設為 yes 60 rdbcompression yes 61 62 # RDB 檔案的是否直接偶像 chcksum 63 rdbchecksum yes 64 65 # 本地持久化資料庫檔名,預設值為 dump.rdb 66 dbfilename dump.rdb 67 68 # 工作目錄 69 # 資料庫映象備份的檔案放置的路徑。 70 # 這裡的路徑跟檔名要分開配置是因為 redis 在進行備份時,先會將當前資料庫的狀態寫入到一個臨時檔案中,等備份完成, 71 # 再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。 72 # AOF 檔案也會存放在這個目錄下面 73 # 注意這裡必須制定一個目錄而不是檔案 74 dir /var/lib/redis-server/ 75 76 ################################# 複製 ################################# 77 78 # 主從複製 . 設定該資料庫為其他資料庫的從資料庫 . 79 # 設定當本機為 slav 服務時,設定 master 服務的 IP 地址及埠,在 Redis 啟動時,它會自動從 master 進行資料同步 80 # slaveof 81 82 # 當 master 服務設定了密碼保護時 ( 用 requirepass 制定的密碼 ) 83 # slave 服務連線 master 的密碼 84 # masterauth 85 86 # 當從庫同主機失去連線或者複製正在進行,從機庫有兩種執行方式: 87 # 1) 如果 slave-serve-stale-data 設定為 yes( 預設設定 ) ,從庫會繼續響應客戶端的請求 88 # 2) 如果 slave-serve-stale-data 是指為 no ,出去 INFO 和 SLAVOF 命令之外的任何請求都會返回一個 89 # 錯誤 "SYNC with master in progress" 90 slave-serve-stale-data yes 91 92 # 配置 slave 例項是否接受寫。寫 slave 對儲存短暫資料(在同 master 資料同步後可以很容易地被刪除)是有用的,但未配置的情況下,客戶端寫可能會發送問題。 93 # 從 Redis2.6 後,預設 slave 為 read-only 94 slaveread-only yes 95 96 # 從庫會按照一個時間間隔向主庫傳送 PINGs. 可以通過 repl-ping-slave-period 設定這個時間間隔,預設是 10 97 # repl-ping-slave-period 10 98 # repl-timeout 設定主庫批量資料傳輸時間或者 ping 回覆時間間隔,預設值是 60 99 # 一定要確保 repl-timeout 大於 repl-ping-slave-period 100 # repl-timeout 60 101 102 # 在 slave socket 的 SYNC 後禁用 TCP_NODELAY 103 # 如果選擇“ yes ” ,Redis 將使用一個較小的數字 TCP 資料包和更少的頻寬將資料傳送到 slave , 但是這可能導致資料傳送到 slave 端會有延遲 , 如果是 Linux kernel 的預設配置,會達到 40 毫秒 . 104 # 如果選擇 "no" ,則傳送資料到 slave 端的延遲會降低,但將使用更多的頻寬用於複製 . 105 repl-disable-tcp-nodelay no 106 107 # 設定複製的後臺日誌大小。 108 # 複製的後臺日誌越大, slave 斷開連線及後來可能執行部分複製花的時間就越長。 109 # 後臺日誌在至少有一個 slave 連線時,僅僅分配一次。 110 # repl-backlog-size 1mb 111 112 # 在 master 不再連線 slave 後,後臺日誌將被釋放。下面的配置定義從最後一個 slave 斷開連線後需要釋放的時間(秒)。 113 # 0 意味著從不釋放後臺日誌 114 # repl-backlog-ttl 3600 115 116 # 如果 master 不能再正常工作,那麼會在多個 slave 中,選擇優先值最小的一個 slave 提升為 master ,優先值為 0 表示不能提升為 master 。 117 slave-priority 100 118 119 # 如果少於 N 個 slave 連線,且延遲時間 <=M 秒,則 master 可配置停止接受寫操作。 120 # 例如需要至少 3 個 slave 連線,且延遲 <=10 秒的配置: 121 # min-slaves-to-write 3 122 # min-slaves-max-lag 10 123 # 設定 0 為禁用 124 # 預設 min-slaves-to-write 為 0 (禁用), min-slaves-max-lag 為 10 125 126 ################################## 安全 ################################### 127 128 # 設定客戶端連線後進行任何其他指定前需要使用的密碼。 129 # 警告:因為 redis 速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行 150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解 130 # requirepass foobared 131 # 命令重新命名 . 132 # 在一個共享環境下可以重新命名相對危險的命令。比如把 CONFIG 重名為一個不容易猜測的字元。 133 # 舉例 : 134 # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 135 # 如果想刪除一個命令,直接把它重新命名為一個空字元 "" 即可,如下: 136 # rename-command CONFIG "" 137 138 ################################### 約束################################### 139 140 # 設定同一時間最大客戶端連線數,預設無限制, 141 # Redis 可以同時開啟的客戶端連線數為 Redis 程序可以開啟的最大檔案描述符數, 142 # 如果設定 maxclients 0 ,表示不作限制。 143 # 當客戶端連線數到達限制時, Redis 會關閉新的連線並向客戶端返回 max number of clients reached 錯誤資訊 144 # maxclients 10000 145 146 # 指定 Redis 最大記憶體限制, Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後, Redis 會按照清除策略嘗試清除已到期的 Key 147 # 如果 Redis 依照策略清除後無法提供足夠空間,或者策略設定為 ”noeviction” ,則使用更多空間的命令將會報錯,例如 SET, LPUSH 等。但仍然可以進行讀取操作 148 # 注意: Redis 新的 vm 機制,會把 Key 存放記憶體, Value 會存放在 swap 區 149 # 該選項對 LRU 策略很有用。 150 # maxmemory 的設定比較適合於把 redis 當作於類似 memcached 的快取來使用,而不適合當做一個真實的 DB 。 151 # 當把 Redis 當做一個真實的資料庫使用的時候,記憶體使用將是一個很大的開銷 152 # maxmemory 153 154 # 當記憶體達到最大值的時候 Redis 會選擇刪除哪些資料?有五種方式可供選擇 155 # volatile-lru -> 利用 LRU 演算法移除設定過過期時間的 key (LRU: 最近使用 Least RecentlyUsed ) 156 # allkeys-lru -> 利用 LRU 演算法移除任何 key 157 # volatile-random -> 移除設定過過期時間的隨機 key 158 # allkeys->random -> remove a randomkey, any key 159 # volatile-ttl -> 移除即將過期的 key(minor TTL) 160 # noeviction -> 不移除任何可以,只是返回一個寫錯誤 161 # 注意:對於上面的策略,如果沒有合適的 key 可以移除,當寫的時候 Redis 會返回一個錯誤 162 # 預設是 : volatile-lru 163 # maxmemory-policy volatile-lru 164 165 # LRU 和 minimal TTL 演算法都不是精準的演算法,但是相對精確的演算法 ( 為了節省記憶體 ) ,隨意你可以選擇樣本大小進行檢測。 166 # Redis 預設選擇 3 個樣本進行檢測,你可以通過 maxmemory-samples 進行設定 167 # maxmemory-samples 3 168 169 ############################## AOF############################### 170 171 # 預設情況下, redis 會在後臺非同步的把資料庫映象備份到磁碟,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼將造成比較大範圍的資料丟失。 172 # 所以 redis 提供了另外一種更加高效的資料庫備份及災難恢復方式。 173 # 開啟 append only 模式之後, redis 會把所接收到的每一次寫操作請求都追加到 appendonly.aof 檔案中,當 redis 重新啟動時,會從該檔案恢復出之前的狀態。 174 # 但是這樣會造成 appendonly.aof 檔案過大,所以 redis 還支援了 BGREWRITEAOF 指令,對 appendonly.aof 進行重新整理。 175 # 你可以同時開啟 asynchronous dumps 和 AOF 176 appendonly no 177 178 # AOF 檔名稱 ( 預設 : "appendonly.aof") 179 # appendfilename appendonly.aof 180 # Redis 支援三種同步 AOF 檔案的策略 : 181 # no: 不進行同步,系統去操作 . Faster. 182 # always: always 表示每次有寫操作都進行同步 . Slow, Safest. 183 # everysec: 表示對寫操作進行累積,每秒同步一次 . Compromise. 184 # 預設是 "everysec" ,按照速度和安全折中這是最好的。 185 # 如果想讓 Redis 能更高效的執行,你也可以設定為 "no" ,讓作業系統決定什麼時候去執行 186 # 或者相反想讓資料更安全你也可以設定為 "always" 187 # 如果不確定就用 "everysec". 188 # appendfsync always 189 appendfsync everysec 190 # appendfsync no 191 192 # AOF 策略設定為 always 或者 everysec 時,後臺處理程序 ( 後臺儲存或者 AOF 日誌重寫 ) 會執行大量的 I/O 操作 193 # 在某些 Linux 配置中會阻止過長的 fsync() 請求。注意現在沒有任何修復,即使 fsync 在另外一個執行緒進行處理 194 # 為了減緩這個問題,可以設定下面這個引數 no-appendfsync-on-rewrite 195 no-appendfsync-on-rewrite no 196 197 # AOF 自動重寫 198 # 當 AOF 檔案增長到一定大小的時候 Redis 能夠呼叫 BGREWRITEAOF 對日誌檔案進行重寫 199 # 它是這樣工作的: Redis 會記住上次進行些日誌後文件的大小 ( 如果從開機以來還沒進行過重寫,那日子大小在開機的時候確定 ) 200 # 基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動 201 # 同時需要指定一個最小大小用於 AOF 重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫 AOF 檔案的情況 202 # 設定 percentage 為 0 就關閉這個特性 203 auto-aof-rewrite-percentage 100 204 auto-aof-rewrite-min-size 64mb 205 206 ################################ LUASCRIPTING ############################# 207 # 一個 Lua 指令碼最長的執行時間為 5000 毫秒( 5 秒),如果為 0 或負數表示無限執行時間。 208 lua-time-limit 5000 209 210 ################################LOW LOG################################ 211 # Redis Slow Log 記錄超過特定執行時間的命令。執行時間不包括 I/O 計算比如連線客戶端,返回結果等,只是命令執行時間 212 # 可以通過兩個引數設定 slow log :一個是告訴 Redis 執行超過多少時間被記錄的引數 slowlog-log-slower-than( 微妙 ) , 213 # 另一個是 slow log 的長度。當一個新命令被記錄的時候最早的命令將被從佇列中移除 214 # 下面的時間以微妙為單位,因此 1000000 代表一秒。 215 # 注意指定一個負數將關閉慢日誌,而設定為 0 將強制每個命令都會記錄 216 slowlog-log-slower-than 10000 217 218 # 對日誌長度沒有限制,只是要注意它會消耗記憶體 219 # 可以通過 SLOWLOG RESET 回收被慢日誌消耗的記憶體 220 # 推薦使用預設值 128 ,當慢日誌超過 128 時,最先進入佇列的記錄會被踢出 221 slowlog-max-len 128 222 223 ################################ 事件通知 ############################# 224 # 當事件發生時, Redis 可以通知 Pub/Sub 客戶端。 225 # 可以在下表中選擇 Redis 要通知的事件型別。事件型別由單個字元來標識: 226 # K Keyspace 事件,以 _keyspace@_ 的字首方式釋出 227 # E Keyevent 事件,以 _keysevent@_ 的字首方式釋出 228 # g 通用事件(不指定型別),像 DEL, EXPIRE, RENAME, … 229 # $ String 命令 230 # s Set 命令 231 # h Hash 命令 232 # z 有序集合命令 233 # x 過期事件(每次 key 過期時生成) 234 # e 清除事件(當 key 在記憶體被清除時生成) 235 # A g$lshzxe 的別稱,因此 ”AKE” 意味著所有的事件 236 # notify-keyspace-events 帶一個由 0 到多個字元組成的字串引數。空字串意思是通知被禁用。 237 # 例子:啟用 list 和通用事件: 238 # notify-keyspace-events Elg 239 # 預設所用的通知被禁用,因為使用者通常不需要改特性,並且該特性會有效能損耗。 240 # 注意如果你不指定至少 K 或 E 之一,不會發送任何事件。 241 notify-keyspace-events “” 242 243 ############################## 高階配置 ############################### 244 245 # 當 hash 中包含超過指定元素個數並且最大的元素沒有超過臨界時, 246 # hash 將以一種特殊的編碼方式(大大減少記憶體使用)來儲存,這裡可以設定這兩個臨界值 247 # Redis Hash 對應 Value 內部實際就是一個 HashMap ,實際這裡會有 2 種不同實現, 248 # 這個 Hash 的成員比較少時 Redis 為了節省記憶體會採用類似一維陣列的方式來緊湊儲存,而不會採用真正的 HashMap 結構,對應的 valueredisObject 的 encoding 為 zipmap, 249 # 當成員數量增大時會自動轉成真正的 HashMap, 此時 encoding 為 ht 。 250 hash-max-zipmap-entries 512 251 hash-max-zipmap-value 64 252 253 # 和 Hash 一樣,多個小的 list 以特定的方式編碼來節省空間。 254 # list 資料型別節點值大小小於多少位元組會採用緊湊儲存格式。 255 list-max-ziplist-entries 512 256 list-max-ziplist-value 64 257 258 # set 資料型別內部資料如果全部是數值型,且包含多少節點以下會採用緊湊格式儲存。 259 set-max-intset-entries 512 260 261 # 和 hashe 和 list 一樣 , 排序的 set 在指定的長度內以指定編碼方式儲存以節省空間 262 # zsort 資料型別節點值大小小於多少位元組會採用緊湊儲存格式。 263 zset-max-ziplist-entries 128 264 zset-max-ziplist-value 64 265 266 # Redis 將在每 100 毫秒時使用 1 毫秒的 CPU 時間來對 redis 的 hash 表進行重新 hash ,可以降低記憶體的使用 267 # 當你的使用場景中,有非常嚴格的實時性需要,不能夠接受 Redis 時不時的對請求有 2 毫秒的延遲的話,把這項配置為 no 。 268 # 如果沒有這麼嚴格的實時性要求,可以設定為 yes ,以便能夠儘可能快的釋放記憶體 269 activerehashing yes 270 271 # 客戶端的輸出緩衝區的限制,因為某種原因客戶端從伺服器讀取資料的速度不夠快, 272 # 可用於強制斷開連線(一個常見的原因是一個釋出 / 訂閱客戶端消費訊息的速度無法趕上生產它們的速度)。 273 # 可以三種不同客戶端的方式進行設定: 274 # normal -> 正常客戶端 275 # slave -> slave 和 MONITOR 客戶端 276 # pubsub -> 至少訂閱了一個 pubsub channel 或 pattern 的客戶端 277 # 每個 client-output-buffer-limit 語法 : 278 # client-output-buffer-limit 279 # 一旦達到硬限制客戶端會立即斷開,或者達到軟限制並保持達成的指定秒數(連續)。 280 # 例如,如果硬限制為 32 兆位元組和軟限制為 16 兆位元組 /10 秒,客戶端將會立即斷開 281 # 如果輸出緩衝區的大小達到 32 兆位元組,客戶端達到 16 兆位元組和連續超過了限制 10 秒,也將斷開連線。 282 # 預設 normal 客戶端不做限制,因為他們在一個請求後未要求時(以推的方式)不接收資料, 283 # 只有非同步客戶端可能會出現請求資料的速度比它可以讀取的速度快的場景。 284 # 把硬限制和軟限制都設定為 0 來禁用該特性 285 client-output-buffer-limit normal 0 0 0 286 client-output-buffer-limit slave 256mb 64mb60 287 client-output-buffer-limit pubsub 32mb 8mb60 288 289 # Redis 呼叫內部函式來執行許多後臺任務,如關閉客戶端超時的連線,清除過期的 Key ,等等。 290 # 不是所有的任務都以相同的頻率執行,但 Redis 依照指定的“ Hz ”值來執行檢查任務。 291 # 預設情況下,“ Hz ”的被設定為 10292 # 提高該值將在 Redis 空閒時使用更多的 CPU 時,但同時當有多個 key 同時到期會使 Redis 的反應更靈敏,以及超時可以更精確地處理。 293 # 範圍是 1500 之間,但是值超過 100 通常不是一個好主意。 294 # 大多數使用者應該使用 10 這個預設值,只有在非常低的延遲的情況下有必要提高最大到 100295 hz 10 296 297 # 當一個子節點重寫 AOF 檔案時,如果啟用下面的選項,則檔案每生成 32M 資料進行同步。 298 aof-rewrite-incremental-fsync yes