1. # Redis示例配置檔案
2.
3. # 注意機關問題:當需要設定記憶體大小的時候,可以使用類似1k、5GB、4M這樣的常見格式:
4. #
5. # 1k => 1000 bytes
6. # 1kb => 1024 bytes
7. # 1m => 1000000 bytes
8. # 1mb => 1024*1024 bytes
9. # 1g => 1000000000 bytes
10. # 1gb => 1024*1024*1024 bytes
11. #
12. # 機關是大小寫不敏感的,是以1GB 1Gb 1gB的寫法都是完全一樣的。
13.
14. # Redis預設是不作為守護程序來運作的。你可以把這個設定為"yes"讓它作為守護程序來運作。
15. # 注意,當作為守護程序的時候,Redis會把程序ID寫到 /var/run/redis.pid
16. daemonize no
17.
18. # 當以守護程序方式運作的時候,Redis會把程序ID預設寫到 /var/run/redis.pid。你可以在這裡修改路徑。
19. pidfile /var/run/redis.pid
20.
21. # 接受連接配接的特定端口,預設是6379。
22. # 如果端口設定為0,Redis就不會監聽TCP套接字。
23. port 6379
24.
25. # 如果你想的話,你可以綁定單一接口;如果這裡沒單獨設定,那麼所有接口的連接配接都會被監聽。
26. #
27. # bind 127.0.0.1
28.
29. # 指定用來監聽連接配接的unxi套接字的路徑。這個沒有預設值,是以如果你不指定的話,Redis就不會通過unix套接字來監聽。
30. #
31. # unixsocket /tmp/redis.sock
32. # unixsocketperm 755
33.
34. #一個用戶端空閑多少秒後關閉連接配接。(0代表禁用,永不關閉)
35. timeout 0
36.
37. # 設定伺服器調試等級。
38. # 可能值:
39. # debug (很多資訊,對開發/測試有用)
40. # verbose (很多精簡的有用資訊,但是不像debug等級那麼多)
41. # notice (适量的資訊,基本上是你生産環境中需要的程度)
42. # warning (隻有很重要/嚴重的資訊會記錄下來)
43. loglevel verbose
44.
45. # 指明日志檔案名。也可以使用"stdout"來強制讓Redis把日志資訊寫到标準輸出上。
46. # 注意:如果Redis以守護程序方式運作,而你設定日志顯示到标準輸出的話,那麼日志會發送到 /dev/null
47. logfile stdout
48.
49. # 要使用系統日志記錄器很簡單,隻要設定 "syslog-enabled" 為 "yes" 就可以了。
50. # 然後根據需要設定其他一些syslog參數就可以了。
51. # syslog-enabled no
52.
53. # 指明syslog身份
54. # syslog-ident redis
55.
56. # 指明syslog的裝置。必須是一個使用者或者是 LOCAL0 ~ LOCAL7 之一。
57. # syslog-facility local0
58.
59. # 設定資料庫個數。預設資料庫是 DB 0,你可以通過SELECT <dbid> WHERE dbid(0~'databases' - 1)來為每個連接配接使用不同的資料庫。
60. databases 16
61.
62. ################################ 快照 #################################
63.
64. #
65. # 把資料庫存到磁盤上:
66. #
67. # save <seconds> <changes>
68. #
69. # 會在指定秒數和資料變化次數之後把資料庫寫到磁盤上。
70. #
71. # 下面的例子将會進行把資料寫入磁盤的操作:
72. # 900秒(15分鐘)之後,且至少1次變更
73. # 300秒(5分鐘)之後,且至少10次變更
74. # 60秒之後,且至少10000次變更
75. #
76. # 注意:你要想不寫磁盤的話就把所有 "save" 設定注釋掉就行了。
77.
78. save 900 1
79. save 300 10
80. save 60 10000
81.
82. # 當導出到 .rdb 資料庫時是否用LZF壓縮字元串對象。
83. # 預設設定為 "yes",是以幾乎總是生效的。
84. # 如果你想節省CPU的話你可以把這個設定為 "no",但是如果你有可壓縮的key的話,那資料檔案就會更大了。
85. rdbcompression yes
86.
87. # 資料庫的檔案名
88. dbfilename dump.rdb
89.
90. # 工作目錄
91. #
92. # 資料庫會寫到這個目錄下,檔案名就是上面的 "dbfilename" 的值。
93. #
94. # 累加檔案也放這裡。
95. #
96. # 注意你這裡指定的必須是目錄,不是檔案名。
97. dir ./
98.
99. ################################# 同步 #################################
100.
101. #
102. # 主從同步。通過 slaveof 配置來實作Redis執行個體的備份。
103. # 注意,這裡是本地從遠端複制資料。也就是說,本地可以有不同的資料庫檔案、綁定不同的IP、監聽不同的端口。
104. #
105. # slaveof <masterip> <masterport>
106.
107. # 如果master設定了密碼(通過下面的 "requirepass" 選項來配置),那麼slave在開始同步之前必須進行身份驗證,否則它的同步請求會被拒絕。
108. #
109. # masterauth <master-password>
110.
111. # 當一個slave失去和master的連接配接,或者同步正在進行中,slave的行為有兩種可能:
112. #
113. # 1) 如果 slave-serve-stale-data 設定為 "yes" (預設值),slave會繼續響應用戶端請求,可能是正常資料,也可能是還沒獲得值的空資料。
114. # 2) 如果 slave-serve-stale-data 設定為 "no",slave會回複"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 指令。
115. #
116. slave-serve-stale-data yes
117.
118. # slave根據指定的時間間隔向伺服器發送ping請求。
119. # 時間間隔可以通過 repl_ping_slave_period 來設定。
120. # 預設10秒。
121. #
122. # repl-ping-slave-period 10
123.
124. # 下面的選項設定了大塊資料I/O、向master請求資料和ping響應的過期時間。
125. # 預設值60秒。
126. #
127. # 一個很重要的事情是:確定這個值比 repl-ping-slave-period 大,否則master和slave之間的傳輸過期時間比預想的要短。
128. #
129. # repl-timeout 60
130.
131. ################################## 安全 ###################################
132.
133. # 要求用戶端在處理任何指令時都要驗證身份和密碼。
134. # 這在你信不過來訪者時很有用。
135. #
136. # 為了向後相容的話,這段應該注釋掉。而且大多數人不需要身份驗證(例如:它們運作在自己的伺服器上。)
137. #
138. # 警告:因為Redis太快了,是以居心不良的人可以每秒嘗試150k的密碼來試圖破解密碼。
139. # 這意味着你需要一個高強度的密碼,否則破解太容易了。
140. #
141. # requirepass foobared
142.
143. # 指令重命名
144. #
145. # 在共享環境下,可以為危險指令改變名字。比如,你可以為 CONFIG 改個其他不太容易猜到的名字,這樣你自己仍然可以使用,而别人卻沒法做壞事了。
146. #
147. # 例如:
148. #
149. # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
150. #
151. # 甚至也可以通過給指令指派一個空字元串來完全禁用這條指令:
152. #
153. # rename-command CONFIG ""
154.
155. ################################### 限制 ####################################
156.
157. #
158. # 設定最多同時連接配接用戶端數量。
159. # 預設沒有限制,這個關系到Redis程序能夠打開的檔案描述符數量。
160. # 特殊值"0"表示沒有限制。
161. # 一旦達到這個限制,Redis會關閉所有新連接配接并發送錯誤"達到最大使用者數上限(max number of clients reached)"
162. #
163. # maxclients 128
164.
165. # 不要用比設定的上限更多的記憶體。一旦記憶體使用達到上限,Redis會根據標明的回收政策(參見:maxmemmory-policy)删除key。
166. #
167. # 如果因為删除政策問題Redis無法删除key,或者政策設定為 "noeviction",Redis會回複需要更多記憶體的錯誤資訊給指令。
168. # 例如,SET,LPUSH等等。但是會繼續合理響應隻讀指令,比如:GET。
169. #
170. # 在使用Redis作為LRU緩存,或者為執行個體設定了硬性記憶體限制的時候(使用 "noeviction" 政策)的時候,這個選項還是滿有用的。
171. #
172. # 警告:當一堆slave連上達到記憶體上限的執行個體的時候,響應slave需要的輸出緩存所需記憶體不計算在使用記憶體當中。
173. # 這樣當請求一個删除掉的key的時候就不會觸發網絡問題/重新同步的事件,然後slave就會收到一堆删除指令,直到資料庫空了為止。
174. #
175. # 簡而言之,如果你有slave連上一個master的話,那建議你把master記憶體限制設小點兒,確定有足夠的系統記憶體用作輸出緩存。
176. # (如果政策設定為"noeviction"的話就不無所謂了)
177. #
178. # maxmemory <bytes>
179.
180. # 記憶體政策:如果達到記憶體限制了,Redis如何删除key。你可以在下面五個政策裡面選:
181. #
182. # volatile-lru -> 根據LRU算法生成的過期時間來删除。
183. # allkeys-lru -> 根據LRU算法删除任何key。
184. # volatile-random -> 根據過期設定來随機删除key。
185. # allkeys->random -> 無差别随機删。
186. # volatile-ttl -> 根據最近過期時間來删除(輔以TTL)
187. # noeviction -> 誰也不删,直接在寫操作時傳回錯誤。
188. #
189. # 注意:對所有政策來說,如果Redis找不到合适的可以删除的key都會在寫操作時傳回一個錯誤。
190. #
191. # 這裡涉及的指令:set setnx setex append
192. # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
193. # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
194. # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
195. # getset mset msetnx exec sort
196. #
197. # 預設值如下:
198. #
199. # maxmemory-policy volatile-lru
200.
201. # LRU和最小TTL算法的實作都不是很精确,但是很接近(為了省記憶體),是以你可以用樣例做測試。
202. # 例如:預設Redis會檢查三個key然後取最舊的那個,你可以通過下面的配置項來設定樣本的個數。
203. #
204. # maxmemory-samples 3
205.
206. ############################## 純累加模式 ###############################
207.
208. # 預設情況下,Redis是異步的把資料導出到磁盤上。這種情況下,當Redis挂掉的時候,最新的資料就丢了。
209. # 如果不希望丢掉任何一條資料的話就該用純累加模式:一旦開啟這個模式,Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案。
210. # 每次啟動時Redis都會把這個檔案的資料讀入記憶體裡。
211. #
212. # 注意,異步導出的資料庫檔案和純累加檔案可以并存(你得把上面所有"save"設定都注釋掉,關掉導出機制)。
213. # 如果純累加模式開啟了,那麼Redis會在啟動時載入日志檔案而忽略導出的 dump.rdb 檔案。
214. #
215. # 重要:檢視 BGREWRITEAOF 來了解當累加日志檔案太大了之後,怎麼在背景重新處理這個日志檔案。
216.
217. appendonly no
218.
219. # 純累加檔案名字(預設:"appendonly.aof")
220. # appendfilename appendonly.aof
221.
222. # fsync() 請求作業系統馬上把資料寫到磁盤上,不要再等了。
223. # 有些作業系統會真的把資料馬上刷到磁盤上;有些則要磨蹭一下,但是會盡快去做。
224. #
225. # Redis支援三種不同的模式:
226. #
227. # no:不要立刻刷,隻有在作業系統需要刷的時候再刷。比較快。
228. # always:每次寫操作都立刻寫入到aof檔案。慢,但是最安全。
229. # everysec:每秒寫一次。折衷方案。
230. #
231. # 預設的 "everysec" 通常來說能在速度和資料安全性之間取得比較好的平衡。
232. # 如果你真的了解了這個意味着什麼,那麼設定"no"可以獲得更好的性能表現(如果丢資料的話,則隻能拿到一個不是很新的快照);
233. # 或者相反的,你選擇 "always" 來犧牲速度確定資料安全、完整。
234. #
235. # 如果拿不準,就用 "everysec"
236.
237. # appendfsync always
238. appendfsync everysec
239. # appendfsync no
240.
241. # 如果AOF的同步政策設定成 "always" 或者 "everysec",那麼背景的存儲程序(背景存儲或寫入AOF日志)會産生很多磁盤I/O開銷。
242. # 某些Linux的配置下會使Redis因為 fsync() 而阻塞很久。
243. # 注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們的 write(2) 請求。
244. #
245. # 為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止 fsync()。
246. #
247. # 這就意味着如果有子程序在進行儲存操作,那麼Redis就處于"不可同步"的狀态。
248. # 這實際上是說,在最差的情況下可能會丢掉30秒鐘的日志資料。(預設Linux設定)
249. #
250. # 如果你有延遲的問題那就把這個設為 "yes",否則就保持 "no",這是儲存持久資料的最安全的方式。
251. no-appendfsync-on-rewrite no
252.
253. # 自動重寫AOF檔案
254. #
255. # 如果AOF日志檔案大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日志檔案。
256. #
257. # 工作原理:Redis記住上次重寫時AOF日志的大小(或者重新開機後沒有寫操作的話,那就直接用此時的AOF檔案),
258. # 基準尺寸和目前尺寸做比較。如果目前尺寸超過指定比例,就會觸發重寫操作。
259. #
260. # 你還需要指定被重寫日志的最小尺寸,這樣避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
261. #
262. # 指定百分比為0會禁用AOF自動重寫特性。
263.
264. auto-aof-rewrite-percentage 100
265. auto-aof-rewrite-min-size 64mb
266.
267. ################################## 慢查詢日志 ###################################
268.
269. # Redis慢查詢日志可以記錄超過指定時間的查詢。運作時間不包括各種I/O時間。
270. # 例如:連接配接用戶端,發送響應資料等。隻計算指令運作的實際時間(這是唯一一種指令運作線程阻塞而無法同時為其他請求服務的場景)
271. #
272. # 你可以為慢查詢日志配置兩個參數:一個是超标時間,機關為微妙,記錄超過個時間的指令。
273. # 另一個是慢查詢日志長度。當一個新的指令被寫進日志的時候,最老的那個記錄會被删掉。
274. #
275. # 下面的時間機關是微秒,是以1000000就是1秒。注意,負數時間會禁用慢查詢日志,而0則會強制記錄所有指令。
276. slowlog-log-slower-than 10000
277.
278. # 這個長度沒有限制。隻要有足夠的記憶體就行。你可以通過 SLOWLOG RESET 來釋放記憶體。(譯者注:日志居然是在記憶體裡的Orz)
279. slowlog-max-len 128
280.
281. ################################ 虛拟記憶體 ###############################
282.
283. ### 警告!虛拟記憶體在Redis 2.4是反對的。
284. ### 非常不鼓勵使用虛拟記憶體!!
285.
286. # 虛拟記憶體可以使Redis在記憶體不夠的情況下仍然可以将所有資料序列儲存在記憶體裡。
287. # 為了做到這一點,高頻key會調到記憶體裡,而低頻key會轉到交換檔案裡,就像作業系統使用記憶體頁一樣。
288. #
289. # 要使用虛拟記憶體,隻要把 "vm-enabled" 設定為 "yes",并根據需要設定下面三個虛拟記憶體參數就可以了。
290.
291. vm-enabled no
292. # vm-enabled yes
293.
294. # 這是交換檔案的路徑。估計你猜到了,交換檔案不能在多個Redis執行個體之間共享,是以確定每個Redis執行個體使用一個獨立交換檔案。
295. #
296. # 最好的儲存交換檔案(被随機通路)的媒體是固态硬碟(SSD)。
297. #
298. # *** 警告 *** 如果你使用共享主機,那麼預設的交換檔案放到 /tmp 下是不安全的。
299. # 建立一個Redis使用者可寫的目錄,并配置Redis在這裡建立交換檔案。
300. vm-swap-file /tmp/redis.swap
301.
302. # "vm-max-memory" 配置虛拟記憶體可用的最大記憶體容量。
303. # 如果交換檔案還有空間的話,所有超标部分都會放到交換檔案裡。
304. #
305. # "vm-max-memory" 設定為0表示系統會用掉所有可用記憶體。
306. # 這預設值不咋地,隻是把你能用的記憶體全用掉了,留點餘量會更好。
307. # 例如,設定為剩餘記憶體的60%-80%。
308. vm-max-memory 0
309.
310. # Redis交換檔案是分成多個資料頁的。
311. # 一個可存儲對象可以被儲存在多個連續頁裡,但是一個資料頁無法被多個對象共享。
312. # 是以,如果你的資料頁太大,那麼小對象就會浪費掉很多空間。
313. # 如果資料頁太小,那用于存儲的交換空間就會更少(假定你設定相同的資料頁數量)
314. #
315. # 如果你使用很多小對象,建議分頁尺寸為64或32個位元組。
316. # 如果你使用很多大對象,那就用大一些的尺寸。
317. # 如果不确定,那就用預設值 :)
318. vm-page-size 32
319.
320. # 交換檔案裡資料頁總數。
321. # 根據記憶體中分頁表(已用/未用的資料頁分布情況),磁盤上每8個資料頁會消耗記憶體裡1個位元組。
322. #
323. # 交換區容量 = vm-page-size * vm-pages
324. #
325. # 根據預設的32位元組的資料頁尺寸和134217728的資料頁數來算,Redis的資料頁檔案會占4GB,而記憶體裡的分頁表會消耗16MB記憶體。
326. #
327. # 為你的應驗程式設定最小且夠用的數字比較好,下面這個預設值在大多數情況下都是偏大的。
328. vm-pages 134217728
329.
330. # 同時可運作的虛拟記憶體I/O線程數。
331. # 這些線程可以完成從交換檔案進行資料讀寫的操作,也可以處理資料在記憶體與磁盤間的互動和編碼/解碼處理。
332. # 多一些線程可以一定程度上提高處理效率,雖然I/O操作本身依賴于實體裝置的限制,不會因為更多的線程而提高單次讀寫操作的效率。
333. #
334. # 特殊值0會關閉線程級I/O,并會開啟阻塞虛拟記憶體機制。
335. vm-max-threads 4
336.
337. ############################### 進階配置 ###############################
338.
339. # 當有大量資料時,适合用哈希編碼(需要更多的記憶體),元素數量上限不能超過給定限制。
340. # 你可以通過下面的選項來設定這些限制:
341. hash-max-zipmap-entries 512
342. hash-max-zipmap-value 64
343.
344. # 與哈希相類似,資料元素較少的情況下,可以用另一種方式來編碼進而節省大量空間。
345. # 這種方式隻有在符合下面限制的時候才可以用:
346. list-max-ziplist-entries 512
347. list-max-ziplist-value 64
348.
349. # 還有這樣一種特殊編碼的情況:資料全是64位無符号整型數字構成的字元串。
350. # 下面這個配置項就是用來限制這種情況下使用這種編碼的最大上限的。
351. set-max-intset-entries 512
352.
353. # 與第一、第二種情況相似,有序序列也可以用一種特别的編碼方式來處理,可節省大量空間。
354. # 這種編碼隻适合長度和元素都符合下面限制的有序序列:
355. zset-max-ziplist-entries 128
356. zset-max-ziplist-value 64
357.
358. # 哈希重新整理,每100個CPU毫秒會拿出1個毫秒來重新整理Redis的主哈希表(頂級鍵值映射表)。
359. # redis所用的哈希表實作(見dict.c)采用延遲哈希重新整理機制:你對一個哈希表操作越多,哈希重新整理操作就越頻繁;
360. # 反之,如果伺服器非常不活躍那麼也就是用點記憶體儲存哈希表而已。
361. #
362. # 預設是每秒鐘進行10次哈希表重新整理,用來重新整理字典,然後盡快釋放記憶體。
363. #
364. # 建議:
365. # 如果你對延遲比較在意的話就用 "activerehashing no",每個請求延遲2毫秒不太好嘛。
366. # 如果你不太在意延遲而希望盡快釋放記憶體的話就設定 "activerehashing yes"。
367. activerehashing yes
368.
369. ################################## 包含 ###################################
370.
371. # 包含一個或多個其他配置檔案。
372. # 這在你有标準配置模闆但是每個redis伺服器又需要個性設定的時候很有用。
373. # 包含檔案特性允許你引人其他配置檔案,是以好好利用吧。
374. #
375. # include /path/to/local.conf
# include /path/to/other.conf