天天看點

redis配置檔案詳解

 注意:如果想在一台機器上不同端口啟動多個redis服務,就把後面的配置檔案修改下,後面加上配置檔案路徑啟動即可。端口,和資料,日志等改下。

說幾個重要的。

253行  dbfilename  : 存放資料的地方。 如:/usr/local/redis/6380/data/dump.rdb

171行  logfile          :存放日志的地方      如:"/redis2.8/redis.log"

1 # Redis 配置檔案
  2 
  3 # 當配置中需要配置記憶體大小時,可以使用 1k, 5GB, 4M 等類似的格式,其轉換方式如下(不區分大小寫)
  4 #
  5 # 1k =>
  6 1000 bytes
  7 # 1kb => 1024 bytes
  8 # 1m => 1000000 bytes
  9 # 1mb =>
 10 1024*1024 bytes
 11 # 1g => 1000000000 bytes
 12 # 1gb => 1024*1024*1024
 13 bytes
 14 #
 15 # 記憶體配置大小寫是一樣的.比如 1gb 1Gb 1GB 1gB
 16 
 17 # daemonize no 預設情況下,redis不是在背景運作的,如果需要在背景運作,把該項的值更改為yes
 18 daemonize
 19 yes
 20 
 21 # 當redis在背景運作的時候,Redis預設會把pid檔案放在/var/run/redis.pid,你可以配置到其他位址。
 22 #
 23 當運作多個redis服務時,需要指定不同的pid檔案和端口
 24 pidfile /var/run/redis.pid
 25 
 26 # 指定redis運作的端口,預設是6379
 27 port 6379
 28 
 29 # 指定redis隻接收來自于該IP位址的請求,如果不進行設定,那麼将處理所有請求,
 30 # 在生産環境中最好設定該項
 31 # bind
 32 127.0.0.1
 33 
 34 # Specify the path for the unix socket that will be used to listen for
 35 #
 36 incoming connections. There is no default, so Redis will not listen
 37 # on a
 38 unix socket when not specified.
 39 #
 40 # unixsocket /tmp/redis.sock
 41 #
 42 unixsocketperm 755
 43 
 44 # 設定用戶端連接配接時的逾時時間,機關為秒。當用戶端在這段時間内沒有發出任何指令,那麼關閉該連接配接
 45 # 0是關閉此設定
 46 timeout
 47 0
 48 
 49 # 指定日志記錄級别
 50 # Redis總共支援四個級别:debug、verbose、notice、warning,預設為verbose
 51 #
 52 debug  記錄很多資訊,用于開發和測試
 53 # varbose 有用的資訊,不像debug會記錄那麼多
 54 #
 55 notice 普通的verbose,常用于生産環境
 56 # warning 隻有非常重要或者嚴重的資訊會記錄到日志
 57 loglevel
 58 debug
 59 
 60 # 配置log檔案位址
 61 # 預設值為stdout,标準輸出,若背景模式會輸出到/dev/null
 62 #logfile
 63 stdout
 64 logfile /var/log/redis/redis.log
 65 
 66 # To enable logging to the system logger, just set 'syslog-enabled' to
 67 yes,
 68 # and optionally update the other syslog parameters to suit your
 69 needs.
 70 # syslog-enabled no
 71 
 72 # Specify the syslog identity.
 73 # syslog-ident redis
 74 
 75 # Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.
 76 #
 77 syslog-facility local0
 78 
 79 # 可用資料庫數
 80 # 預設值為16,預設資料庫為0,資料庫範圍在0-(database-1)之間
 81 databases 16
 82 
 83 ################################ 快照  
 84 #################################
 85 #
 86 # 儲存資料到磁盤,格式如下:
 87 #
 88 #   save
 89 <seconds> <changes>
 90 #
 91 #   
 92 指出在多長時間内,有多少次更新操作,就将資料同步到資料檔案rdb。
 93 #   相當于條件觸發抓取快照,這個可以多個條件配合
 94 #   
 95 #   
 96 比如預設配置檔案中的設定,就設定了三個條件
 97 #
 98 #   save 900 1  900秒内至少有1個key被改變
 99 #   save 300
100 10  300秒内至少有300個key被改變
101 #   save 60 10000  60秒内至少有10000個key被改變
102 
103 save 900 1
104 save 300 10
105 save 60 10000
106 
107 # 存儲至本地資料庫時(持久化到rdb檔案)是否壓縮資料,預設為yes
108 rdbcompression yes
109 
110 # 本地持久化資料庫檔案名,預設值為dump.rdb
111 dbfilename dump.rdb
112 
113 # 工作目錄
114 #
115 # 資料庫鏡像備份的檔案放置的路徑。
116 #
117 這裡的路徑跟檔案名要分開配置是因為redis在進行備份時,先會将目前資料庫的狀态寫入到一個臨時檔案中,等備份完成時,
118 #
119 再把該該臨時檔案替換為上面所指定的檔案,而這裡的臨時檔案和上面所配置的備份檔案都會放在這個指定的路徑當中。
120 #
121 #
122 AOF檔案也會存放在這個目錄下面
123 #
124 # 注意這裡必須制定一個目錄而不是檔案
125 dir ./
126 
127 ################################# 複制
128 #################################
129 
130 # 主從複制. 設定該資料庫為其他資料庫的從資料庫.
131 #
132 設定當本機為slav服務時,設定master服務的IP位址及端口,在Redis啟動時,它會自動從master進行資料同步
133 #
134 # slaveof
135 <masterip> <masterport>
136 
137 # 當master服務設定了密碼保護時(用requirepass制定的密碼)
138 # slav服務連接配接master的密碼
139 #
140 #
141 masterauth <master-password>
142 
143 
144 # 當從庫同主機失去連接配接或者複制正在進行,從機庫有兩種運作方式:
145 #
146 # 1)
147 如果slave-serve-stale-data設定為yes(預設設定),從庫會繼續相應用戶端的請求
148 #
149 # 2)
150 如果slave-serve-stale-data是指為no,出去INFO和SLAVOF指令之外的任何請求都會傳回一個
151 #    錯誤"SYNC with
152 master in progress"
153 #
154 slave-serve-stale-data yes
155 
156 # 從庫會按照一個時間間隔向主庫發送PINGs.可以通過repl-ping-slave-period設定這個時間間隔,預設是10秒
157 #
158 #
159 repl-ping-slave-period 10
160 
161 # repl-timeout 設定主庫批量資料傳輸時間或者ping回複時間間隔,預設值是60秒
162 #
163 一定要確定repl-timeout大于repl-ping-slave-period
164 # repl-timeout 60
165 
166 ################################## 安全
167 ###################################
168 
169 # 設定用戶端連接配接後進行任何其他指定前需要使用的密碼。
170 #
171 警告:因為redis速度相當快,是以在一台比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K次的密碼嘗試,這意味着你需要指定非常非常強大的密碼來防止暴力破解
172 #
173 #
174 requirepass foobared
175 
176 # 指令重命名.
177 #
178 # 在一個共享環境下可以重命名相對危險的指令。比如把CONFIG重名為一個不容易猜測的字元。
179 #
180 #
181 舉例:
182 #
183 # rename-command CONFIG
184 b840fc02d524045429941cc15f59e41cb7be6c52
185 #
186 #
187 如果想删除一個指令,直接把它重命名為一個空字元""即可,如下:
188 #
189 # rename-command CONFIG ""
190 
191 ################################### 限制
192 ####################################
193 
194 # 設定同一時間最大用戶端連接配接數,預設無限制,Redis可以同時打開的用戶端連接配接數為Redis程序可以打開的最大檔案描述符數,
195 # 如果設定
196 maxclients 0,表示不作限制。
197 # 當用戶端連接配接數到達限制時,Redis會關閉新的連接配接并向用戶端傳回max number of clients
198 reached錯誤資訊
199 #
200 # maxclients 128
201 
202 # 指定Redis最大記憶體限制,Redis在啟動時會把資料加載到記憶體中,達到最大記憶體後,Redis會先嘗試清除已到期或即将到期的Key
203 #
204 Redis同時也會移除空的list對象
205 #
206 #
207 當此方法處理後,仍然到達最大記憶體設定,将無法再進行寫入操作,但仍然可以進行讀取操作
208 #
209 #
210 注意:Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
211 #
212 #
213 maxmemory的設定比較适合于把redis當作于類似memcached的緩存來使用,而不适合當做一個真實的DB。
214 #
215 當把Redis當做一個真實的資料庫使用的時候,記憶體使用将是一個很大的開銷
216 # maxmemory <bytes>
217 
218 # 當記憶體達到最大值的時候Redis會選擇删除哪些資料?有五種方式可供選擇
219 #
220 # volatile-lru ->
221 利用LRU算法移除設定過過期時間的key (LRU:最近使用 Least Recently Used )
222 # allkeys-lru ->
223 利用LRU算法移除任何key
224 # volatile-random -> 移除設定過過期時間的随機key
225 #
226 allkeys->random -> remove a random key, any key
227 # volatile-ttl ->
228 移除即将過期的key(minor TTL)
229 # noeviction -> 不移除任何可以,隻是傳回一個寫錯誤
230 #
231 #
232 注意:對于上面的政策,如果沒有合适的key可以移除,當寫的時候Redis會傳回一個錯誤
233 #
234 #       寫指令包括: set setnx
235 setex append
236 #       incr decr rpush lpush rpushx lpushx linsert lset
237 rpoplpush sadd
238 #       sinter sinterstore sunion sunionstore sdiff sdiffstore
239 zadd zincrby
240 #       zunionstore zinterstore hset hsetnx hmset hincrby incrby
241 decrby
242 #       getset mset msetnx exec sort
243 #
244 # 預設是:
245 #
246 #
247 maxmemory-policy volatile-lru
248 
249 # LRU 和 minimal TTL 算法都不是精準的算法,但是相對精确的算法(為了節省記憶體),随意你可以選擇樣本大小進行檢測。
250 #
251 Redis預設的灰選擇3個樣本進行檢測,你可以通過maxmemory-samples進行設定
252 #
253 # maxmemory-samples
254 3
255 
256 ############################## AOF ###############################
257 
258 
259 #
260 預設情況下,redis會在背景異步的把資料庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁,如果發生諸如拉閘限電、拔插頭等狀況,那麼将造成比較大範圍的資料丢失。
261 #
262 是以redis提供了另外一種更加高效的資料庫備份及災難恢複方式。
263 # 開啟append
264 only模式之後,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof檔案中,當redis重新啟動時,會從該檔案恢複出之前的狀态。
265 #
266 但是這樣會造成appendonly.aof檔案過大,是以redis還支援了BGREWRITEAOF指令,對appendonly.aof 進行重新整理。
267 #
268 你可以同時開啟asynchronous dumps 和 AOF
269 
270 appendonly no
271 
272 # AOF檔案名稱 (預設: "appendonly.aof")
273 # appendfilename appendonly.aof
274 
275 # Redis支援三種同步AOF檔案的政策:
276 #
277 # no: 不進行同步,系統去操作 . Faster.
278 # always:
279 always表示每次有寫操作都進行同步. Slow, Safest.
280 # everysec: 表示對寫操作進行累積,每秒同步一次.
281 Compromise.
282 #
283 # 預設是"everysec",按照速度和安全折中這是最好的。
284 #
285 如果想讓Redis能更高效的運作,你也可以設定為"no",讓作業系統決定什麼時候去執行
286 #
287 或者相反想讓資料更安全你也可以設定為"always"
288 #
289 # 如果不确定就用 "everysec".
290 
291 # appendfsync always
292 appendfsync everysec
293 # appendfsync no
294 
295 # AOF政策設定為always或者everysec時,背景處理程序(背景儲存或者AOF日志重寫)會執行大量的I/O操作
296 #
297 在某些Linux配置中會阻止過長的fsync()請求。注意現在沒有任何修複,即使fsync在另外一個線程進行處理
298 #
299 #
300 為了減緩這個問題,可以設定下面這個參數no-appendfsync-on-rewrite
301 #
302 # This means that while
303 another child is saving the durability of Redis is
304 # the same as "appendfsync
305 none", that in pratical terms means that it is
306 # possible to lost up to 30
307 seconds of log in the worst scenario (with the
308 # default Linux
309 settings).
310 #
311 # If you have latency problems turn this to "yes". Otherwise
312 leave it as
313 # "no" that is the safest pick from the point of view of
314 durability.
315 no-appendfsync-on-rewrite no
316 
317 # Automatic rewrite of the append only file.
318 # AOF 自動重寫
319 #
320 當AOF檔案增長到一定大小的時候Redis能夠調用 BGREWRITEAOF 對日志檔案進行重寫
321 #
322 #
323 它是這樣工作的:Redis會記住上次進行些日志後檔案的大小(如果從開機以來還沒進行過重寫,那日子大小在開機的時候确定)
324 #
325 #
326 基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能将啟動
327 #
328 同時需要指定一個最小大小用于AOF重寫,這個用于阻止即使檔案很小但是增長幅度很大也去重寫AOF檔案的情況
329 # 設定 percentage
330 為0就關閉這個特性
331 
332 auto-aof-rewrite-percentage 100
333 auto-aof-rewrite-min-size 64mb
334 
335 ################################## SLOW LOG
336 ###################################
337 
338 # Redis Slow Log 記錄超過特定執行時間的指令。執行時間不包括I/O計算比如連接配接用戶端,傳回結果等,隻是指令執行時間
339 #
340 #
341 可以通過兩個參數設定slow log:一個是告訴Redis執行超過多少時間被記錄的參數slowlog-log-slower-than(微妙),
342 #
343 另一個是slow log 的長度。當一個新指令被記錄的時候最早的指令将被從隊列中移除
344 
345 # 下面的時間以微妙微機關,是以1000000代表一分鐘。
346 #
347 注意制定一個負數将關閉慢日志,而設定為0将強制每個指令都會記錄
348 slowlog-log-slower-than 10000
349 
350 # 對日志長度沒有限制,隻是要注意它會消耗記憶體
351 # 可以通過 SLOWLOG RESET
352 回收被慢日志消耗的記憶體
353 slowlog-max-len 1024
354 
355 ################################ VM ###############################
356 
357 ### WARNING! Virtual Memory is deprecated in Redis 2.4
358 ### The use of
359 Virtual Memory is strongly discouraged.
360 
361 # Virtual Memory allows Redis to work with datasets bigger than the
362 actual
363 # amount of RAM needed to hold the whole dataset in memory.
364 # In
365 order to do so very used keys are taken in memory while the other keys
366 # are
367 swapped into a swap file, similarly to what operating systems do
368 # with
369 memory pages.
370 #
371 # To enable VM just set 'vm-enabled' to yes, and set the
372 following three
373 # VM parameters accordingly to your needs.
374 
375 vm-enabled no
376 # vm-enabled yes
377 
378 # This is the path of the Redis swap file. As you can guess, swap
379 files
380 # can't be shared by different Redis instances, so make sure to use a
381 swap
382 # file for every redis process you are running. Redis will complain if
383 the
384 # swap file is already in use.
385 #
386 # The best kind of storage for the
387 Redis swap file (that's accessed at random)
388 # is a Solid State Disk
389 (SSD).
390 #
391 # *** WARNING *** if you are using a shared hosting the default
392 of putting
393 # the swap file under /tmp is not secure. Create a dir with access
394 granted
395 # only to Redis user and configure Redis to create the swap file
396 there.
397 vm-swap-file /tmp/redis.swap
398 
399 # vm-max-memory configures the VM to use at max the specified amount
400 of
401 # RAM. Everything that deos not fit will be swapped on disk *if* possible,
402 that
403 # is, if there is still enough contiguous space in the swap
404 file.
405 #
406 # With vm-max-memory 0 the system will swap everything it can. Not
407 a good
408 # default, just specify the max amount of RAM you can in bytes, but
409 it's
410 # better to leave some margin. For instance specify an amount of
411 RAM
412 # that's more or less between 60 and 80% of your free
413 RAM.
414 vm-max-memory 0
415 
416 # Redis swap files is split into pages. An object can be saved using
417 multiple
418 # contiguous pages, but pages can't be shared between different
419 objects.
420 # So if your page is too big, small objects swapped out on disk will
421 waste
422 # a lot of space. If you page is too small, there is less space in the
423 swap
424 # file (assuming you configured the same number of total swap file
425 pages).
426 #
427 # If you use a lot of small objects, use a page size of 64 or 32
428 bytes.
429 # If you use a lot of big objects, use a bigger page size.
430 # If
431 unsure, use the default :)
432 vm-page-size 32
433 
434 # Number of total memory pages in the swap file.
435 # Given that the page
436 table (a bitmap of free/used pages) is taken in memory,
437 # every 8 pages on
438 disk will consume 1 byte of RAM.
439 #
440 # The total swap size is vm-page-size *
441 vm-pages
442 #
443 # With the default of 32-bytes memory pages and 134217728 pages
444 Redis will
445 # use a 4 GB swap file, that will use 16 MB of RAM for the page
446 table.
447 #
448 # It's better to use the smallest acceptable value for your
449 application,
450 # but the default is large in order to work in most
451 conditions.
452 vm-pages 134217728
453 
454 # Max number of VM I/O threads running at the same time.
455 # This threads
456 are used to read/write data from/to swap file, since they
457 # also encode and
458 decode objects from disk to memory or the reverse, a bigger
459 # number of
460 threads can help with big objects even if they can't help with
461 # I/O itself
462 as the physical device may not be able to couple with many
463 # reads/writes
464 operations at the same time.
465 #
466 # The special value of 0 turn off threaded
467 I/O and enables the blocking
468 # Virtual Memory
469 implementation.
470 vm-max-threads 4
471 
472 ############################### ADVANCED CONFIG
473 ###############################
474 
475 # 當hash中包含超過指定元素個數并且最大的元素沒有超過臨界時,
476 #
477 hash将以一種特殊的編碼方式(大大減少記憶體使用)來存儲,這裡可以設定這兩個臨界值
478 # Redis
479 Hash對應Value内部實際就是一個HashMap,實際這裡會有2種不同實作,
480 #
481 這個Hash的成員比較少時Redis為了節省記憶體會采用類似一維數組的方式來緊湊存儲,而不會采用真正的HashMap結構,對應的value
482 redisObject的encoding為zipmap,
483 #
484 當成員數量增大時會自動轉成真正的HashMap,此時encoding為ht。
485 hash-max-zipmap-entries
486 512
487 hash-max-zipmap-value 64
488 
489 # list資料類型多少節點以下會采用去指針的緊湊存儲格式。
490 #
491 list資料類型節點值大小小于多少位元組會采用緊湊存儲格式。
492 list-max-ziplist-entries
493 512
494 list-max-ziplist-value 64
495 
496 # set資料類型内部資料如果全部是數值型,且包含多少節點以下會采用緊湊格式存儲。
497 set-max-intset-entries
498 512
499 
500 # zsort資料類型多少節點以下會采用去指針的緊湊存儲格式。
501 #
502 zsort資料類型節點值大小小于多少位元組會采用緊湊存儲格式。
503 zset-max-ziplist-entries
504 128
505 zset-max-ziplist-value 64
506 
507 # Redis将在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用
508 #
509 #
510 當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。
511 #
512 #
513 如果沒有這麼嚴格的實時性要求,可以設定為yes,以便能夠盡可能快的釋放記憶體
514 activerehashing yes
515 
516 ################################## INCLUDES
517 ###################################
518 
519 # 指定包含其它的配置檔案,可以在同一主機上多個Redis執行個體之間使用同一份配置檔案,而同時各個執行個體又擁有自己的特定配置檔案
520 #
521 include /path/to/local.conf
522 # include /path/to/other.conf