1. # Redis 配置文件


  2. # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写)

  3. #

  4. # 1k =>

  5. 1000 bytes

  6. # 1kb => 1024 bytes

  7. # 1m => 1000000 bytes

  8. # 1mb =>

  9. 1024*1024 bytes

  10. # 1g => 1000000000 bytes

  11. # 1gb => 1024*1024*1024

  12. bytes

  13. #

  14. # 内存配置大小写是一样的.比如 1gb 1Gb 1GB 1gB


  15. # daemonize no 默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes

  16. daemonize

  17. yes


  18. # 当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。

  19. #

  20. 当运行多个redis服务时,需要指定不同的pid文件和端口

  21. pidfile /var/run/redis.pid


  22. # 指定redis运行的端口,默认是6379

  23. port 6379


  24. # 指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,

  25. # 在生产环境中最好设置该项

  26. # bind

  27. 127.0.0.1


  28. # Specify the path for the unix socket that will be used to listen for

  29. #

  30. incoming connections. There is no default, so Redis will not listen

  31. # on a

  32. unix socket when not specified.

  33. #

  34. # unixsocket /tmp/redis.sock

  35. #

  36. unixsocketperm 755


  37. # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接

  38. # 0是关闭此设置

  39. timeout

  40. 0


  41. # 指定日志记录级别

  42. # Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

  43. #

  44. debug  记录很多信息,用于开发和测试

  45. # varbose 有用的信息,不像debug会记录那么多

  46. #

  47. notice 普通的verbose,常用于生产环境

  48. # warning 只有非常重要或者严重的信息会记录到日志

  49. loglevel

  50. debug


  51. # 配置log文件地址

  52. # 默认值为stdout,标准输出,若后台模式会输出到/dev/null

  53. #logfile

  54. stdout

  55. logfile /var/log/redis/redis.log


  56. # To enable logging to the system logger, just set 'syslog-enabled' to

  57. yes,

  58. # and optionally update the other syslog parameters to suit your

  59. needs.

  60. # syslog-enabled no


  61. # Specify the syslog identity.

  62. # syslog-ident redis


  63. # Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.

  64. #

  65. syslog-facility local0


  66. # 可用数据库数

  67. # 默认值为16,默认数据库为0,数据库范围在0-(database-1)之间

  68. databases 16


  69. ################################ 快照  

  70. #################################

  71. #

  72. # 保存数据到磁盘,格式如下:

  73. #

  74. #   save


  75. #

  76. #   

  77. 指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。

  78. #   相当于条件触发抓取快照,这个可以多个条件配合

  79. #   

  80. #   

  81. 比如默认配置文件中的设置,就设置了三个条件

  82. #

  83. #   save 900 1  900秒内至少有1个key被改变

  84. #   save 300

  85. 10  300秒内至少有300个key被改变

  86. #   save 60 10000  60秒内至少有10000个key被改变


  87. save 900 1

  88. save 300 10

  89. save 60 10000


  90. # 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes

  91. rdbcompression yes


  92. # 本地持久化数据库文件名,默认值为dump.rdb

  93. dbfilename dump.rdb


  94. # 工作目录

  95. #

  96. # 数据库镜像备份的文件放置的路径。

  97. #

  98. 这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,

  99. #

  100. 再把该该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中。

  101. #

  102. #

  103. AOF文件也会存放在这个目录下面

  104. #

  105. # 注意这里必须制定一个目录而不是文件

  106. dir ./


  107. ################################# 复制

  108. #################################


  109. # 主从复制. 设置该数据库为其他数据库的从数据库.

  110. #

  111. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

  112. #

  113. # slaveof



  114. # 当master服务设置了密码保护时(用requirepass制定的密码)

  115. # slav服务连接master的密码

  116. #

  117. #

  118. masterauth



  119. # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:

  120. #

  121. # 1)

  122. 如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求

  123. #

  124. # 2)

  125. 如果slave-serve-stale-data是指为no,出去INFO和SLAVOF命令之外的任何请求都会返回一个

  126. #    错误"SYNC with

  127. master in progress"

  128. #

  129. slave-serve-stale-data yes


  130. # 从库会按照一个时间间隔向主库发送PINGs.可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒

  131. #

  132. #

  133. repl-ping-slave-period 10


  134. # repl-timeout 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒

  135. #

  136. 一定要确保repl-timeout大于repl-ping-slave-period

  137. # repl-timeout 60


  138. ################################## 安全

  139. ###################################


  140. # 设置客户端连接后进行任何其他指定前需要使用的密码。

  141. #

  142. 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解

  143. #

  144. #

  145. requirepass foobared


  146. # 命令重命名.

  147. #

  148. # 在一个共享环境下可以重命名相对危险的命令。比如把CONFIG重名为一个不容易猜测的字符。

  149. #

  150. #

  151. 举例:

  152. #

  153. # rename-command CONFIG

  154. b840fc02d524045429941cc15f59e41cb7be6c52

  155. #

  156. #

  157. 如果想删除一个命令,直接把它重命名为一个空字符""即可,如下:

  158. #

  159. # rename-command CONFIG ""


  160. ################################### 约束

  161. ####################################


  162. # 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,

  163. # 如果设置

  164. maxclients 0,表示不作限制。

  165. # 当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients

  166. reached错误信息

  167. #

  168. # maxclients 128


  169. # 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key

  170. #

  171. Redis同时也会移除空的list对象

  172. #

  173. #

  174. 当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作

  175. #

  176. #

  177. 注意:Redis新的vm机制,会把Key存放内存,Value会存放在swap区

  178. #

  179. #

  180. maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用,而不适合当做一个真实的DB。

  181. #

  182. 当把Redis当做一个真实的数据库使用的时候,内存使用将是一个很大的开销

  183. # maxmemory


  184. # 当内存达到最大值的时候Redis会选择删除哪些数据?有五种方式可供选择

  185. #

  186. # volatile-lru ->

  187. 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )

  188. # allkeys-lru ->

  189. 利用LRU算法移除任何key

  190. # volatile-random -> 移除设置过过期时间的随机key

  191. #

  192. allkeys->random -> remove a random key, any key

  193. # volatile-ttl ->

  194. 移除即将过期的key(minor TTL)

  195. # noeviction -> 不移除任何可以,只是返回一个写错误

  196. #

  197. #

  198. 注意:对于上面的策略,如果没有合适的key可以移除,当写的时候Redis会返回一个错误

  199. #

  200. #       写命令包括: set setnx

  201. setex append

  202. #       incr decr rpush lpush rpushx lpushx linsert lset

  203. rpoplpush sadd

  204. #       sinter sinterstore sunion sunionstore sdiff sdiffstore

  205. zadd zincrby

  206. #       zunionstore zinterstore hset hsetnx hmset hincrby incrby

  207. decrby

  208. #       getset mset msetnx exec sort

  209. #

  210. # 默认是:

  211. #

  212. #

  213. maxmemory-policy volatile-lru


  214. # LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。

  215. #

  216. Redis默认的灰选择3个样本进行检测,你可以通过maxmemory-samples进行设置

  217. #

  218. # maxmemory-samples

  219. 3


  220. ############################## AOF ###############################



  221. #

  222. 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。

  223. #

  224. 所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。

  225. # 开启append

  226. only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。

  227. #

  228. 但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。

  229. #

  230. 你可以同时开启asynchronous dumps 和 AOF


  231. appendonly no


  232. # AOF文件名称 (默认: "appendonly.aof")

  233. # appendfilename appendonly.aof


  234. # Redis支持三种同步AOF文件的策略:

  235. #

  236. # no: 不进行同步,系统去操作 . Faster.

  237. # always:

  238. always表示每次有写操作都进行同步. Slow, Safest.

  239. # everysec: 表示对写操作进行累积,每秒同步一次.

  240. Compromise.

  241. #

  242. # 默认是"everysec",按照速度和安全折中这是最好的。

  243. #

  244. 如果想让Redis能更高效的运行,你也可以设置为"no",让操作系统决定什么时候去执行

  245. #

  246. 或者相反想让数据更安全你也可以设置为"always"

  247. #

  248. # 如果不确定就用 "everysec".


  249. # appendfsync always

  250. appendfsync everysec

  251. # appendfsync no


  252. # AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作

  253. #

  254. 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理

  255. #

  256. #

  257. 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite

  258. #

  259. # This means that while

  260. another child is saving the durability of Redis is

  261. # the same as "appendfsync

  262. none", that in pratical terms means that it is

  263. # possible to lost up to 30

  264. seconds of log in the worst scenario (with the

  265. # default Linux

  266. settings).

  267. #

  268. # If you have latency problems turn this to "yes". Otherwise

  269. leave it as

  270. # "no" that is the safest pick from the point of view of

  271. durability.

  272. no-appendfsync-on-rewrite no


  273. # Automatic rewrite of the append only file.

  274. # AOF 自动重写

  275. #

  276. 当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写

  277. #

  278. #

  279. 它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)

  280. #

  281. #

  282. 基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动

  283. #

  284. 同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况

  285. # 设置 percentage

  286. 为0就关闭这个特性


  287. auto-aof-rewrite-percentage 100

  288. auto-aof-rewrite-min-size 64mb


  289. ################################## SLOW LOG

  290. ###################################


  291. # Redis Slow Log 记录超过特定执行时间的命令。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执行时间

  292. #

  293. #

  294. 可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),

  295. #

  296. 另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除


  297. # 下面的时间以微妙微单位,因此1000000代表一分钟。

  298. #

  299. 注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录

  300. slowlog-log-slower-than 10000


  301. # 对日志长度没有限制,只是要注意它会消耗内存

  302. # 可以通过 SLOWLOG RESET

  303. 回收被慢日志消耗的内存

  304. slowlog-max-len 1024


  305. ################################ VM ###############################


  306. ### WARNING! Virtual Memory is deprecated in Redis 2.4

  307. ### The use of

  308. Virtual Memory is strongly discouraged.


  309. # Virtual Memory allows Redis to work with datasets bigger than the

  310. actual

  311. # amount of RAM needed to hold the whole dataset in memory.

  312. # In

  313. order to do so very used keys are taken in memory while the other keys

  314. # are

  315. swapped into a swap file, similarly to what operating systems do

  316. # with

  317. memory pages.

  318. #

  319. # To enable VM just set 'vm-enabled' to yes, and set the

  320. following three

  321. # VM parameters accordingly to your needs.


  322. vm-enabled no

  323. # vm-enabled yes


  324. # This is the path of the Redis swap file. As you can guess, swap

  325. files

  326. # can't be shared by different Redis instances, so make sure to use a

  327. swap

  328. # file for every redis process you are running. Redis will complain if

  329. the

  330. # swap file is already in use.

  331. #

  332. # The best kind of storage for the

  333. Redis swap file (that's accessed at random)

  334. # is a Solid State Disk

  335. (SSD).

  336. #

  337. # *** WARNING *** if you are using a shared hosting the default

  338. of putting

  339. # the swap file under /tmp is not secure. Create a dir with access

  340. granted

  341. # only to Redis user and configure Redis to create the swap file

  342. there.

  343. vm-swap-file /tmp/redis.swap


  344. # vm-max-memory configures the VM to use at max the specified amount

  345. of

  346. # RAM. Everything that deos not fit will be swapped on disk *if* possible,

  347. that

  348. # is, if there is still enough contiguous space in the swap

  349. file.

  350. #

  351. # With vm-max-memory 0 the system will swap everything it can. Not

  352. a good

  353. # default, just specify the max amount of RAM you can in bytes, but

  354. it's

  355. # better to leave some margin. For instance specify an amount of

  356. RAM

  357. # that's more or less between 60 and 80% of your free

  358. RAM.

  359. vm-max-memory 0


  360. # Redis swap files is split into pages. An object can be saved using

  361. multiple

  362. # contiguous pages, but pages can't be shared between different

  363. objects.

  364. # So if your page is too big, small objects swapped out on disk will

  365. waste

  366. # a lot of space. If you page is too small, there is less space in the

  367. swap

  368. # file (assuming you configured the same number of total swap file

  369. pages).

  370. #

  371. # If you use a lot of small objects, use a page size of 64 or 32

  372. bytes.

  373. # If you use a lot of big objects, use a bigger page size.

  374. # If

  375. unsure, use the default :)

  376. vm-page-size 32


  377. # Number of total memory pages in the swap file.

  378. # Given that the page

  379. table (a bitmap of free/used pages) is taken in memory,

  380. # every 8 pages on

  381. disk will consume 1 byte of RAM.

  382. #

  383. # The total swap size is vm-page-size *

  384. vm-pages

  385. #

  386. # With the default of 32-bytes memory pages and 134217728 pages

  387. Redis will

  388. # use a 4 GB swap file, that will use 16 MB of RAM for the page

  389. table.

  390. #

  391. # It's better to use the smallest acceptable value for your

  392. application,

  393. # but the default is large in order to work in most

  394. conditions.

  395. vm-pages 134217728


  396. # Max number of VM I/O threads running at the same time.

  397. # This threads

  398. are used to read/write data from/to swap file, since they

  399. # also encode and

  400. decode objects from disk to memory or the reverse, a bigger

  401. # number of

  402. threads can help with big objects even if they can't help with

  403. # I/O itself

  404. as the physical device may not be able to couple with many

  405. # reads/writes

  406. operations at the same time.

  407. #

  408. # The special value of 0 turn off threaded

  409. I/O and enables the blocking

  410. # Virtual Memory

  411. implementation.

  412. vm-max-threads 4


  413. ############################### ADVANCED CONFIG

  414. ###############################


  415. # 当hash中包含超过指定元素个数并且最大的元素没有超过临界时,

  416. #

  417. hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值

  418. # Redis

  419. Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,

  420. #

  421. 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value

  422. redisObject的encoding为zipmap,

  423. #

  424. 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

  425. hash-max-zipmap-entries

  426. 512

  427. hash-max-zipmap-value 64


  428. # list数据类型多少节点以下会采用去指针的紧凑存储格式。

  429. #

  430. list数据类型节点值大小小于多少字节会采用紧凑存储格式。

  431. list-max-ziplist-entries

  432. 512

  433. list-max-ziplist-value 64


  434. # set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

  435. set-max-intset-entries

  436. 512


  437. # zsort数据类型多少节点以下会采用去指针的紧凑存储格式。

  438. #

  439. zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。

  440. zset-max-ziplist-entries

  441. 128

  442. zset-max-ziplist-value 64


  443. # Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用

  444. #

  445. #

  446. 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。

  447. #

  448. #

  449. 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存

  450. activerehashing yes


  451. ################################## INCLUDES

  452. ###################################


  453. # 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

  454. #

  455. include /path/to/local.conf

  456. # include /path/to/other.conf