Redis 2.8 配置文件说明

来源:互联网 发布:linux for qq2016安装 编辑:程序博客网 时间:2024/06/07 20:50


[plain] view plain copy
print?
  1. Redis 2.8 配置文件说明  
  2.   
  3. # Redis 配置文件示例  
  4.    
  5. # 注意单位: 当需要配置内存大小时, 可能需要指定像1k,5GB,4M等常见格式  
  6. #  
  7. # 1k => 1000 bytes  
  8. # 1kb => 1024 bytes  
  9. # 1m => 1000000 bytes  
  10. # 1mb => 1024*1024 bytes  
  11. # 1g => 1000000000 bytes  
  12. # 1gb => 1024*1024*1024 bytes  
  13. #  
  14. # 单位是对大小写不敏感的 1GB 1Gb 1gB 是相同的。  
  15.    
  16. ################################## 引入 ###################################  
  17.    
  18. # 可以在这里包含一个或多个其他的配置文件。如果你有一个适用于所有Redis服务器的标准配置模板  
  19. # 但也需要一些每个服务器自定义的设置,这个功能将很有用。被包含的配置文件也可以包含其他配置文件,  
  20. # 所以需要谨慎的使用这个功能。  
  21. #  
  22. # 注意“inclue”选项不能被admin或Redis哨兵的”CONFIG REWRITE”命令重写。  
  23. # 因为Redis总是使用最后解析的配置行最为配置指令的值, 你最好在这个文件的开头配置includes来  
  24. # 避免它在运行时重写配置。  
  25. # 如果相反你想用includes的配置覆盖原来的配置,你最好在该文件的最后使用include  
  26. #  
  27. # include /path/to/local.conf  
  28. # include /path/to/other.conf  
  29.    
  30. ################################ 常见配置 #####################################  
  31.    
  32. # 默认Rdis不会作为守护进程运行。如果需要的话配置成’yes’  
  33. # 注意配置成守护进程后Redis会将进程号写入文件/var/run/redis.pid  
  34. daemonize no  
  35.    
  36. # 当以守护进程方式运行时,默认Redis会把进程ID写到 /var/run/redis.pid。你可以在这里修改路径。  
  37. pidfile /var/run/redis.pid  
  38.    
  39. # 接受连接的特定端口,默认是6379  
  40. # 如果端口设置为0,Redis就不会监听TCP套接字。  
  41. port 6379  
  42.    
  43. # TCP listen() backlog.  
  44. # 在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核默默地将这个值减小  
  45. # 到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog  
  46. # 两个值来达到想要的效果。  
  47. tcp-backlog 511  
  48.    
  49. # 默认Redis监听服务器上所有可用网络接口的连接。可以用”bind”配置指令跟一个或多个ip地址来实现  
  50. # 监听一个或多个网络接口  
  51. # 示例:  
  52. # bind 192.168.1.100 10.0.0.1  
  53. # bind 127.0.0.1  
  54.    
  55. # 指定用来监听Unix套套接字的路径。没有默认值, 所以在没有指定的情况下Redis不会监听Unix套接字  
  56. # unixsocket /tmp/redis.sock  
  57. # unixsocketperm 755  
  58.    
  59. # 一个客户端空闲多少秒后关闭连接。(0代表禁用,永不关闭)  
  60. timeout 0  
  61.    
  62. # TCP 空闲连接时长  
  63. # 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK,由于以下两个原因这是很有用的:  
  64. # 1)能够检测无响应的对端  
  65. # 2)让该连接中间的网络设备知道这个连接还存活  
  66. #  
  67. # 在Linux上,这个指定的值(单位:秒)就是发送ACK的时间间隔。  
  68. # 注意:要关闭这个连接需要两倍的这个时间值。  
  69. # 在其他内核上这个时间间隔由内核配置决定  
  70. #  
  71. # 这个选项的一个合理值是60秒  
  72. tcp-keepalive 0  
  73.    
  74. # 指定服务器调试等级  
  75. # 可能值:  
  76. # debug (大量信息,对开发/测试有用)  
  77. # verbose (很多精简的有用信息,但是不像debug等级那么多)  
  78. # notice (适量的信息,基本上是你生产环境中需要的)  
  79. # warning (只有很重要/严重的信息会记录下来)  
  80. loglevel notice  
  81.    
  82. # 指明日志文件名。也可以使用”stdout”来强制让Redis把日志信息写到标准输出上。  
  83. # 注意:如果Redis以守护进程方式运行,而设置日志显示到标准输出的话,日志会发送到/dev/null  
  84. logfile ”“  
  85.    
  86. # 要使用系统日志记录器,只要设置 “syslog-enabled” 为 “yes” 就可以了。  
  87. # 然后根据需要设置其他一些syslog参数就可以了。  
  88. # syslog-enabled no  
  89.    
  90. # 指明syslog身份  
  91. # syslog-ident redis  
  92.    
  93. # 指明syslog的设备。必须是user或LOCAL0 ~ LOCAL7之一。  
  94. # syslog-facility local0  
  95.    
  96. # 设置数据库个数。默认数据库是 DB 0,  
  97. # 可以通过select <dbid>  (0 <= dbid <= ‘databases’ - 1 )来为每个连接使用不同的数据库。  
  98. databases 16  
  99.    
  100. ################################ 快照 ################################  
  101. # 在指定秒数和数据变化次数之后把数据库写到磁盘上  
  102. #  格式:  
  103. #   save <seconds> <changes>     
  104. #   注意:你要想不写磁盘的话就把所有 “save” 设置注释掉就行了。  
  105. #  
  106. #   通过添加一条带空字符串参数的save指令也能移除之前所有配置的save指令  
  107. #   像下面的例子:  
  108. #   save ”“   
  109.    
  110. save 900 1              #在900s(15m)之后,至少有1个key发生变化,则快照   
  111. save 300 10             #在300s(5m)之后,至少有10个key发生变化,则快照  
  112. save 60 10000           #在60s(1m)之后,至少有1000个key发生变化,则快照  
  113.    
  114. # 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作  
  115. # 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难。  
  116. #  
  117. # 如果后台保存进程能重新开始工作,Redis将自动允许写操作  
  118. #  
  119. # 然而如果你已经部署了适当的Redis服务器和持久化的监控,你可能想关掉这个功能以便于即使是  
  120. # 硬盘,权限等出问题了Redis也能够像平时一样正常工作,  
  121. stop-writes-on-bgsave-error yes  
  122.    
  123. # 当导出到 .rdb 数据库时是否用LZF压缩字符串对象?  
  124. # 默认设置为 “yes”,因为几乎在任何情况下它都是不错的。  
  125. # 如果你想节省CPU的话你可以把这个设置为 “no”,但是如果你有可压缩的key和value的话,  
  126. # 那数据文件就会更大了。  
  127. rdbcompression yes  
  128.    
  129. # dump时,是否压缩数据,默认为yes   
  130. # 因为版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠但在  
  131. # 生产和加载RDB文件时,这有一个性能消耗(大约10%),所以你可以关掉它来获取最好的性能。  
  132. #  
  133. # 生成的关闭校验的RDB文件有一个0的校验和,它将告诉加载代码跳过检查  
  134. rdbchecksum yes  
  135.    
  136. # 压缩数据的文件名称,默认值为dump.rdb   
  137. dbfilename dump.rdb  
  138.    
  139. # 数据(dump.rdb)文件存放目录,默认值为 ./  
  140. # 数据库会写到这个目录下,文件名就是上面的 “dbfilename” 的值。  
  141. # 累加文件也放这里。  
  142. #   
  143. # 注意你这里指定的必须是目录,不是文件名。  
  144. dir ./  
  145.    
  146. ################################# 主从复制 #################################  
  147. # 主从复制使用,当本机为从服务时,设置主服务的IP及端口  
  148. # 注意,这里是本地从远端复制数据。也就是说,本地可以有不同的数据库文件、绑定不同的IP、监听  
  149. # 不同的端口。  
  150. # slaveof <masterip> <masterport>  
  151.   
  152. #当本机为从服务时,设置主服务的连接密码   
  153. # 如果master设置了密码保护(通过 “requirepass” 选项来配置),那么slave在开始同步之前必须  
  154. # 进行身份验证,否则它的同步请求会被拒绝。  
  155. # masterauth <master-password>  
  156.    
  157. # 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:  
  158. #  
  159. # 1) 如果 slave-serve-stale-data 设置为 “yes” (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。  
  160. # 2) 如果 slave-serve-stale-data 设置为 “no”,slave会回复”正在从master同步(SYNC with master in progress)”来处理各种请求,除了 INFO 和 SLAVEOF 命令。  
  161. #  
  162. slave-serve-stale-data yes  
  163.    
  164. # 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve  
  165. # 的数据在同master同步之后将很容被删除),但是如果客户端由于配置错误在写入时也可能产生一些问题。  
  166. #  
  167. # 从Redis2.6默认所有的slave为只读  
  168. #  
  169. # 注意:只读的slave不是为了暴露给互联网上不可信的客户端而设计的。它只是一个防止实例误用的保护层。  
  170. # 一个只读的slave支持所有的管理命令比如config,debug等。为了限制你可以用’rename-command’来  
  171. # 隐藏所有的管理和危险命令来增强只读slave的安全性  
  172. slave-read-only yes  
  173.    
  174. # slave根据指定的时间间隔向master发送ping请求。  
  175. # 时间间隔可以通过 repl_ping_slave_period 来设置。  
  176. # 默认10秒。  
  177. #  
  178. # repl-ping-slave-period 10  
  179.    
  180. # 以下选项设置同步的超时时间  
  181. #  
  182. # 1)slave在与master SYNC期间有大量数据传输,造成超时  
  183. # 2)在slave角度,master超时,包括数据、ping等  
  184. # 3)在master角度,slave超时,当master发送REPLCONF ACK pings  
  185. #   
  186. # 确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时  
  187. #  
  188. # repl-timeout 60  
  189.    
  190. # 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY ?  
  191. #  
  192. # 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave  
  193. # 上有延迟,Linux内核的默认配置会达到40毫秒  
  194. #  
  195. # 如果你选择了 “no” 数据传输到salve的延迟将会减少但要使用更多的带宽  
  196. #  
  197. # 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,把这个选项设置为“yes”  
  198. # 是个不错的选择。  
  199. repl-disable-tcp-nodelay no  
  200.    
  201. # 设置数据备份的backlog大小。backlog是一个slave在一段时间内断开连接时记录salve数据的缓冲,  
  202. # 所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段  
  203. # 时间内slave丢失的部分数据传送给它。  
  204. #  
  205. # 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长。  
  206. # backlog只分配一次并且至少需要一个slave连接  
  207. # repl-backlog-size 1mb  
  208.    
  209. # 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个  
  210. # slave断开开始计时多少秒后,backlog缓冲将会释放。  
  211. #  
  212. # 0表示永不释放backlog  
  213. #  
  214. # repl-backlog-ttl 3600  
  215.    
  216. # slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来  
  217. # 选择一个slave提升=升为master。  
  218. #  
  219. # 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,  
  220. # 哨兵将挑选优先级最小数字为10的slave。  
  221. #  
  222. # 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被  
  223. # 哨兵挑选提升为master  
  224. #  
  225. # 默认优先级为100  
  226. slave-priority 100  
  227.    
  228. # 如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。  
  229. # N个slave需要是“oneline”状态  
  230. #  
  231. # 延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)  
  232. # 开始计数。  
  233. #  
  234. # 例如至少需要3个延时小于等于10秒的slave用下面的指令:  
  235. #  
  236. # min-slaves-to-write 3  
  237. # min-slaves-max-lag 10  
  238. #  
  239. # 两者之一设置为0将禁用这个功能。  
  240. #  
  241. # 默认 min-slaves-to-write 值是0(该功能禁用)并且 min-slaves-max-lag 值是10。   
  242.    
  243. ################################## 安全 ###################################   
  244. # 要求客户端在处理任何命令时都要验证身份和密码。  
  245. # 这个功能在有你不信任的其它客户端能够访问redis服务器的环境里非常有用。  
  246. #  
  247.    
  248. # 为了向后兼容的话这段应该注释掉。而且大多数人不需要身份验证(例如:它们运行在自己的服务器上)  
  249. #   
  250. # 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要  
  251. # 一个高强度的密码,否则破解太容易了。  
  252. # requirepass foobared  
  253.    
  254. # 命令重命名  
  255. # 在共享环境下,可以为危险命令改变名字。比如,你可以为 CONFIG 改个其他不太容易猜到的名字,  
  256. # 这样内部的工具仍然可以使用,而普通的客户端将不行。  
  257. # 例如:  
  258. # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52  
  259. #  
  260. # 也可以通过改名为空字符串来完全禁用一个命令  
  261. # rename-command CONFIG ”“  
  262. #  
  263. # 请注意:改变命令名字被记录到AOF文件或被传送到从服务器可能产生问题。  
  264.    
  265. ################################### 限制 ####################################   
  266. # 设置最多同时连接的客户端数量。  
  267. # 格式:  
  268. # maxclients 10000  
  269. #      默认这个限制是10000个客户端,然而如果Redis服务器不能配置处理文件的限制数来满足指定的值,  
  270. # 那么最大的客户端连接数就被设置成当前文件限制数减32(因为Redis服务器保留了一些文件描述符作为内部使用)  
  271. # 一旦达到这个限制,Redis会关闭所有新连接并发送错误’max number of clients reached’  
  272.    
  273.    
  274. # 设置最大内存  
  275. # maxmemory <bytes>  
  276. #   
  277. # 不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见下面的配置项:maxmemmory-policy)删除key  
  278. # 如果因为删除策略Redis无法删除key,或者策略设置为 “noeviction”,Redis会回复需要更  
  279. # 多内存的错误信息给命令。例如,SET,LPUSH等等,但是会继续响应像Get这样的只读命令。  
  280. #  
  281. # 在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 “noeviction” 策略)  
  282. # 的时候,这个选项通常事很有用的。  
  283. #  
  284. # 警告:当有多个slave连上达到内存上限的实例时,master为同步slave的输出缓冲区所需  
  285. # 内存不计算在使用内存中。这样当驱逐key时,就不会因网络问题 / 重新同步事件触发驱逐key  
  286. # 的循环,反过来slaves的输出缓冲区充满了key被驱逐的DEL命令,这将触发删除更多的key,  
  287. # 直到这个数据库完全被清空为止  
  288. #   
  289. # 总之…如果你需要附加多个slave,建议你设置一个稍小maxmemory限制,这样系统就会有空闲  
  290. # 的内存作为slave的输出缓存区(但是如果最大内存策略设置为”noeviction”的话就没必要了)  
  291.   
  292. # 最大内存策略:如果达到内存限制了(上面的配置:maxmemory <bytes>),Redis如何选择删除key。  
  293. # maxmemory-policy volatile-lru  
  294. #  
  295. # 你可以在下面五个行为里选:  
  296. # volatile-lru -> 根据LRU算法生成的过期时间来删除。  
  297. # allkeys-lru -> 根据LRU算法删除任何key。  
  298. # volatile-random -> 根据过期设置来随机删除key。   
  299. # allkeys->random -> 无差别随机删。   
  300. # volatile-ttl -> 根据最近过期时间来删除(辅以TTL)   
  301. # noeviction -> 谁也不删,直接在写操作时返回错误。  
  302. #   
  303. # 注意:对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。  
  304. #       目前为止涉及的命令:set setnx setex append  
  305. #       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd  
  306. #       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby  
  307. #       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby  
  308. #       getset mset msetnx exec sort  
  309.   
  310.    
  311. # LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),所以你可以用样本量做检测。  
  312. # 例如:默认Redis会检查3个key然后取最旧的那个,你可以通过下面的配置指令来设置样本的个数。  
  313. # maxmemory-samples 3  
  314.    
  315. ############################## 附加模式  ###############################  
  316. # 是否在每次更新操作后进行日志记录。默认值为no  
  317. # 格式:  
  318. appendonly no             
  319. # 是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no   
  320. # 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程  
  321. # 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。  
  322. #  
  323. # AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)  
  324. # 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis  
  325. # 能只丢失1秒的写操作。  
  326. #  
  327. # AOF和RDB持久化能同时启动并且不会有问题。  
  328. # 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。  
  329. #  
  330. # 请查看 http://redis.io/topics/persistence 来获取更多信息.   
  331.    
  332. # 更新日志文件名,默认值为appendonly.aof   
  333. appendfilename “appendonly.aof”  
  334.   
  335. # 更新日志条件。默认方式是everysec  
  336. # 格式:  
  337. appendfsync everysec  
  338. # always 表示每次更新操作后手动调用fsync()将数据写到appendonly.aof  
  339. # everysec  默认方式,表示每秒同步一次appendonly.aof  
  340. # no 不同步,数据不会持久化  
  341. # fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。  
  342. # 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。  
  343.   
  344.   
  345. #当AOF日志文件即将增长到指定百分比时,redis通过调用BGREWRITEAOF是否自动重写AOF日志文件。   
  346. no-appendfsync-on-rewrite no  
  347. # 如果AOF的同步策略设置成 “always” 或者 “everysec”,并且后台的存储进程(后台存储或写入AOF  
  348. # 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。  
  349. # 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。  
  350. #  
  351. # 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。  
  352. #   
  353. # 这就意味着如果有子进程在进行保存操作,那么Redis就处于”不可同步”的状态。  
  354. # 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)  
  355. #   
  356. # 如果把这个设置成”yes”带来了延迟问题,就保持”no”,这是保存持久数据的最安全的方式。  
  357.   
  358.    
  359. # 自动重写AOF文件  
  360. # 如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。  
  361. #   
  362. # 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)  
  363. #   
  364. # 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。你还需要指定被重写  
  365. # 日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。  
  366. #  
  367. # 指定百分比为0会禁用AOF自动重写特性。   
  368. auto-aof-rewrite-percentage 100  
  369. auto-aof-rewrite-min-size 64mb  
  370.    
  371. ################################ LUA脚本 ###############################  
  372.    
  373. # Lua 脚本的最大执行时间,毫秒为单位  
  374. #  
  375. # 如果达到了最大的执行时间,Redis将要记录在达到最大允许时间之后一个脚本仍然在执行,并且将  
  376. # 开始对查询进行错误响应。  
  377. #  
  378. # 当一个长时间运行的脚本超过了最大执行时间,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 两个  
  379. # 命令可用。第一个可以用于停止一个还没有调用写命名的脚本。第二个是关闭服务器唯一方式,当  
  380. # 写命令已经通过脚本开始执行,并且用户不想等到脚本的自然终止。  
  381. #  
  382. # 设置成0或者负值表示不限制执行时间并且没有任何警告  
  383. lua-time-limit 5000  
  384.    
  385. ################################## 显示日志 ###################################  
  386.    
  387. # Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间,例如:连接客户端,  
  388. # 发送响应数据等,而只计算命令执行的实际时间(这只是线程阻塞而无法同时为其他请求服务的命令执  
  389. # 行阶段)  
  390. #   
  391. # 你可以为慢查询日志配置两个参数:一个指明Redis的超时时间(单位为微秒)来记录超过这个时间的命令  
  392. # 另一个是慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录从队列中移除。  
  393. #  
  394. # 下面的时间单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录  
  395. # 所有命令。  
  396. slowlog-log-slower-than 10000  
  397.    
  398. # 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。  
  399. slowlog-max-len 128  
  400.    
  401. ############################# 事件通知 ##############################   
  402. # Redis 能通知 Pub/Sub 客户端关于键空间发生的事件  
  403. # 这个功能文档位于http://redis.io/topics/keyspace-events  
  404. #  
  405. # 例如:如果键空间事件通知被开启,并且客户端对 0 号数据库的键 foo 执行 DEL 命令时,将通过  
  406. # Pub/Sub发布两条消息:  
  407. # PUBLISH __keyspace@0__:foo del  
  408. # PUBLISH __keyevent@0__:del foo  
  409. #  
  410. # 可以在下表中选择Redis要通知的事件类型。事件类型由单个字符来标识:  
  411. #  
  412. # K    键空间通知,以__keyspace@<db>__为前缀  
  413. # E    键事件通知,以__keysevent@<db>__为前缀  
  414. # g    DEL , EXPIRE , RENAME 等类型无关的通用命令的通知, …  
  415. &nbsp;&nbsp;&nbsp;&nbsp;String命令&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;l&nbsp;&nbsp;&nbsp;&nbsp;List命令&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;Set命令&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;h&nbsp;&nbsp;&nbsp;&nbsp;Hash命令&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;z&nbsp;&nbsp;&nbsp;&nbsp;有序集合命令&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;过期事件(每次key过期时生成)&nbsp;&nbsp;</span></li><li class="alt"><span>#&nbsp;e&nbsp;&nbsp;&nbsp;&nbsp;驱逐事件(当key在内存满了被清除时生成)&nbsp;&nbsp;</span></li><li class=""><span>#&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;glshzxe的别名,因此”AKE”意味着所有的事件  
  416. #  
  417. # notify-keyspace-events 带一个由0到多个字符组成的字符串参数。空字符串意思是通知被禁用。  
  418. #  
  419. # 例子:启用List和通用事件通知:  
  420. # notify-keyspace-events Elg  
  421. #  
  422. # 例子2:为了获取过期key的通知订阅名字为 __keyevent@__:expired 的频道,用以下配置  
  423. # notify-keyspace-events Ex  
  424. #  
  425. # 默认所用的通知被禁用,因为用户通常不需要该特性,并且该特性会有性能损耗。  
  426. # 注意如果你不指定至少K或E之一,不会发送任何事件。  
  427. notify-keyspace-events ”“  
  428.    
  429. ############################### 高级配置 ###############################  
  430.    
  431. # 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的  
  432. # 数据结构来编码。可以通过下面的指令来设定限制  
  433. hash-max-ziplist-entries 512 #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间  
  434. hash-max-ziplist-value 64    #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间  
  435.    
  436. # 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。  
  437. # 这种特殊的方式只有在符合下面限制时才可以用:  
  438. list-max-ziplist-entries 512    #list数据类型多少节点以下会采用去指针的紧凑存储格式  
  439. list-max-ziplist-value 64       #list数据类型节点值大小小于多少字节会采用紧凑存储格式  
  440.    
  441. # set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。  
  442. # 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。  
  443. set-max-intset-entries 512      #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储  
  444.    
  445. # 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。  
  446. # 这种编码只适合长度和元素都小于下面限制的有序集合:  
  447. zset-max-ziplist-entries 128  
  448. zset-max-ziplist-value 64  
  449.    
  450. # 是否启用哈希刷新。默认是yes  
  451. activerehashing yes  
  452. # 每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。  
  453. # redis所用的哈希表实现(见dict.c)采用延迟哈希刷新机制:你对一个哈希表操作越多,哈希刷新  
  454. # 操作就越频繁;反之,如果服务器是空闲的,那么哈希刷新就不会完成,哈希表就会占用更多的一些  
  455. # 内存而已。  
  456. #   
  457. # 默认是每秒钟进行10次哈希表刷新,用来刷新字典,然后尽快释放内存。  
  458. #  
  459. # 建议:  
  460. # 如果你对延迟比较在意,不能够接受Redis时不时的对请求有2毫秒的延迟的话,就用  
  461. # “activerehashing no”,如果不太在意延迟而希望尽快释放内存就设置”activerehashing yes”  
  462.   
  463.    
  464. # 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端,  
  465. # (一个常见的原因是一个发布/订阅客户端消费消息的速度无法赶上生产它们的速度)  
  466. #  
  467. # 可以对三种不同的客户端设置不同的限制:  
  468. # normal -> 正常客户端  
  469. # slave -> slave和 MONITOR 客户端  
  470. # pubsub -> 至少订阅了一个pubsub channel或pattern的客户端  
  471. #  
  472. # 下面是每个client-output-buffer-limit语法:  
  473. # client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds>  
  474.    
  475. # 一旦达到硬限制客户端会立即被断开,或者达到软限制并持续达到指定的秒数(连续的)。  
  476. # 例如,如果硬限制为32兆字节和软限制为16兆字节/10秒,客户端将会立即断开  
  477. # 如果输出缓冲区的大小达到32兆字节,或客户端达到16兆字节并连续超过了限制10秒,就将断开连接。  
  478. #  
  479. # 默认normal客户端不做限制,因为他们在不主动请求时不接收数据(以推的方式),只有异步客户端  
  480. # 可能会出现请求数据的速度比它可以读取的速度快的场景。  
  481. #  
  482. # pubsub和slave客户端会有一个默认值,因为订阅者和slaves以推的方式来接收数据  
  483. #  
  484. # 把硬限制和软限制都设置为0来禁用该功能  
  485. client-output-buffer-limit normal 0 0 0  
  486. client-output-buffer-limit slave 256mb 64mb 60  
  487. client-output-buffer-limit pubsub 32mb 8mb 60  
  488.    
  489. # Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除未被请求过的过期Key等等。  
  490. #  
  491. # 不是所有的任务都以相同的频率执行,但Redis依照指定的“hz”值来执行检查任务。  
  492. #  
  493. # 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key  
  494. # 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理。  
  495. #  
  496. # 范围是1到500之间,但是值超过100通常不是一个好主意。  
  497. # 大多数用户应该使用10这个默认值,只有在非常低的延迟要求时有必要提高到100。  
  498. hz 10  
  499.    
  500. # 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步。为了增量式的  
  501. # 写入硬盘并且避免大的延迟高峰这个指令是非常有用的  
  502. aof-rewrite-incremental-fsync yes  
Redis 2.8 配置文件说明
# Redis 配置文件示例# 注意单位: 当需要配置内存大小时, 可能需要指定像1k,5GB,4M等常见格式## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1024 bytes## 单位是对大小写不敏感的 1GB 1Gb 1gB 是相同的。################################## 引入 #################################### 可以在这里包含一个或多个其他的配置文件。如果你有一个适用于所有Redis服务器的标准配置模板# 但也需要一些每个服务器自定义的设置,这个功能将很有用。被包含的配置文件也可以包含其他配置文件,# 所以需要谨慎的使用这个功能。## 注意“inclue”选项不能被admin或Redis哨兵的"CONFIG REWRITE"命令重写。# 因为Redis总是使用最后解析的配置行最为配置指令的值, 你最好在这个文件的开头配置includes来# 避免它在运行时重写配置。# 如果相反你想用includes的配置覆盖原来的配置,你最好在该文件的最后使用include## include /path/to/local.conf# include /path/to/other.conf################################ 常见配置 ###################################### 默认Rdis不会作为守护进程运行。如果需要的话配置成'yes'# 注意配置成守护进程后Redis会将进程号写入文件/var/run/redis.piddaemonize no# 当以守护进程方式运行时,默认Redis会把进程ID写到 /var/run/redis.pid。你可以在这里修改路径。pidfile /var/run/redis.pid# 接受连接的特定端口,默认是6379# 如果端口设置为0,Redis就不会监听TCP套接字。port 6379# TCP listen() backlog.# 在高并发环境下你需要一个高backlog值来避免慢客户端连接问题。注意Linux内核默默地将这个值减小# 到/proc/sys/net/core/somaxconn的值,所以需要确认增大somaxconn和tcp_max_syn_backlog# 两个值来达到想要的效果。tcp-backlog 511# 默认Redis监听服务器上所有可用网络接口的连接。可以用"bind"配置指令跟一个或多个ip地址来实现# 监听一个或多个网络接口# 示例:# bind 192.168.1.100 10.0.0.1# bind 127.0.0.1# 指定用来监听Unix套套接字的路径。没有默认值, 所以在没有指定的情况下Redis不会监听Unix套接字# unixsocket /tmp/redis.sock# unixsocketperm 755# 一个客户端空闲多少秒后关闭连接。(0代表禁用,永不关闭)timeout 0# TCP 空闲连接时长# 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK,由于以下两个原因这是很有用的:# 1)能够检测无响应的对端# 2)让该连接中间的网络设备知道这个连接还存活## 在Linux上,这个指定的值(单位:秒)就是发送ACK的时间间隔。# 注意:要关闭这个连接需要两倍的这个时间值。# 在其他内核上这个时间间隔由内核配置决定## 这个选项的一个合理值是60秒tcp-keepalive 0# 指定服务器调试等级# 可能值:# debug (大量信息,对开发/测试有用)# verbose (很多精简的有用信息,但是不像debug等级那么多)# notice (适量的信息,基本上是你生产环境中需要的)# warning (只有很重要/严重的信息会记录下来)loglevel notice# 指明日志文件名。也可以使用"stdout"来强制让Redis把日志信息写到标准输出上。# 注意:如果Redis以守护进程方式运行,而设置日志显示到标准输出的话,日志会发送到/dev/nulllogfile ""# 要使用系统日志记录器,只要设置 "syslog-enabled" 为 "yes" 就可以了。# 然后根据需要设置其他一些syslog参数就可以了。# syslog-enabled no# 指明syslog身份# syslog-ident redis# 指明syslog的设备。必须是user或LOCAL0 ~ LOCAL7之一。# syslog-facility local0# 设置数据库个数。默认数据库是 DB 0,# 可以通过select <dbid> (0 <= dbid <= 'databases' - 1 )来为每个连接使用不同的数据库。databases 16################################ 快照 ################################# 在指定秒数和数据变化次数之后把数据库写到磁盘上# 格式:# save <seconds> <changes> # 注意:你要想不写磁盘的话就把所有 "save" 设置注释掉就行了。## 通过添加一条带空字符串参数的save指令也能移除之前所有配置的save指令# 像下面的例子:# save "" save 900 1 #在900s(15m)之后,至少有1个key发生变化,则快照 save 300 10 #在300s(5m)之后,至少有10个key发生变化,则快照save 60 10000 #在60s(1m)之后,至少有1000个key发生变化,则快照# 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作# 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难。## 如果后台保存进程能重新开始工作,Redis将自动允许写操作## 然而如果你已经部署了适当的Redis服务器和持久化的监控,你可能想关掉这个功能以便于即使是# 硬盘,权限等出问题了Redis也能够像平时一样正常工作,stop-writes-on-bgsave-error yes# 当导出到 .rdb 数据库时是否用LZF压缩字符串对象?# 默认设置为 "yes",因为几乎在任何情况下它都是不错的。# 如果你想节省CPU的话你可以把这个设置为 "no",但是如果你有可压缩的key和value的话,# 那数据文件就会更大了。rdbcompression yes# dump时,是否压缩数据,默认为yes # 因为版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠但在# 生产和加载RDB文件时,这有一个性能消耗(大约10%),所以你可以关掉它来获取最好的性能。## 生成的关闭校验的RDB文件有一个0的校验和,它将告诉加载代码跳过检查rdbchecksum yes# 压缩数据的文件名称,默认值为dump.rdb dbfilename dump.rdb# 数据(dump.rdb)文件存放目录,默认值为 ./# 数据库会写到这个目录下,文件名就是上面的 "dbfilename" 的值。# 累加文件也放这里。# # 注意你这里指定的必须是目录,不是文件名。dir ./################################# 主从复制 ################################## 主从复制使用,当本机为从服务时,设置主服务的IP及端口# 注意,这里是本地从远端复制数据。也就是说,本地可以有不同的数据库文件、绑定不同的IP、监听# 不同的端口。# slaveof <masterip> <masterport>#当本机为从服务时,设置主服务的连接密码 # 如果master设置了密码保护(通过 "requirepass" 选项来配置),那么slave在开始同步之前必须# 进行身份验证,否则它的同步请求会被拒绝。# masterauth <master-password># 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:## 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。# 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。#slave-serve-stale-data yes# 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve# 的数据在同master同步之后将很容被删除),但是如果客户端由于配置错误在写入时也可能产生一些问题。## 从Redis2.6默认所有的slave为只读## 注意:只读的slave不是为了暴露给互联网上不可信的客户端而设计的。它只是一个防止实例误用的保护层。# 一个只读的slave支持所有的管理命令比如config,debug等。为了限制你可以用'rename-command'来# 隐藏所有的管理和危险命令来增强只读slave的安全性slave-read-only yes# slave根据指定的时间间隔向master发送ping请求。# 时间间隔可以通过 repl_ping_slave_period 来设置。# 默认10秒。## repl-ping-slave-period 10# 以下选项设置同步的超时时间## 1)slave在与master SYNC期间有大量数据传输,造成超时# 2)在slave角度,master超时,包括数据、ping等# 3)在master角度,slave超时,当master发送REPLCONF ACK pings# # 确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时## repl-timeout 60# 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY ?## 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave# 上有延迟,Linux内核的默认配置会达到40毫秒## 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽## 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,把这个选项设置为“yes”# 是个不错的选择。repl-disable-tcp-nodelay no# 设置数据备份的backlog大小。backlog是一个slave在一段时间内断开连接时记录salve数据的缓冲,# 所以一个slave在重新连接时,不必要全量的同步,而是一个增量同步就足够了,将在断开连接的这段# 时间内slave丢失的部分数据传送给它。## 同步的backlog越大,slave能够进行增量同步并且允许断开连接的时间就越长。# backlog只分配一次并且至少需要一个slave连接# repl-backlog-size 1mb# 当master在一段时间内不再与任何slave连接,backlog将会释放。以下选项配置了从最后一个# slave断开开始计时多少秒后,backlog缓冲将会释放。## 0表示永不释放backlog## repl-backlog-ttl 3600# slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来# 选择一个slave提升=升为master。## 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,100,25,# 哨兵将挑选优先级最小数字为10的slave。## 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被# 哨兵挑选提升为master## 默认优先级为100slave-priority 100# 如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。# N个slave需要是“oneline”状态## 延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)# 开始计数。## 例如至少需要3个延时小于等于10秒的slave用下面的指令:## min-slaves-to-write 3# min-slaves-max-lag 10## 两者之一设置为0将禁用这个功能。## 默认 min-slaves-to-write 值是0(该功能禁用)并且 min-slaves-max-lag 值是10。 ################################## 安全 ################################### # 要求客户端在处理任何命令时都要验证身份和密码。# 这个功能在有你不信任的其它客户端能够访问redis服务器的环境里非常有用。## 为了向后兼容的话这段应该注释掉。而且大多数人不需要身份验证(例如:它们运行在自己的服务器上)# # 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要# 一个高强度的密码,否则破解太容易了。# requirepass foobared# 命令重命名# 在共享环境下,可以为危险命令改变名字。比如,你可以为 CONFIG 改个其他不太容易猜到的名字,# 这样内部的工具仍然可以使用,而普通的客户端将不行。# 例如:# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52## 也可以通过改名为空字符串来完全禁用一个命令# rename-command CONFIG ""## 请注意:改变命令名字被记录到AOF文件或被传送到从服务器可能产生问题。################################### 限制 #################################### # 设置最多同时连接的客户端数量。# 格式:# maxclients 10000# 默认这个限制是10000个客户端,然而如果Redis服务器不能配置处理文件的限制数来满足指定的值,# 那么最大的客户端连接数就被设置成当前文件限制数减32(因为Redis服务器保留了一些文件描述符作为内部使用)# 一旦达到这个限制,Redis会关闭所有新连接并发送错误'max number of clients reached'# 设置最大内存# maxmemory <bytes># # 不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见下面的配置项:maxmemmory-policy)删除key# 如果因为删除策略Redis无法删除key,或者策略设置为 "noeviction",Redis会回复需要更# 多内存的错误信息给命令。例如,SET,LPUSH等等,但是会继续响应像Get这样的只读命令。## 在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)# 的时候,这个选项通常事很有用的。## 警告:当有多个slave连上达到内存上限的实例时,master为同步slave的输出缓冲区所需# 内存不计算在使用内存中。这样当驱逐key时,就不会因网络问题 / 重新同步事件触发驱逐key# 的循环,反过来slaves的输出缓冲区充满了key被驱逐的DEL命令,这将触发删除更多的key,# 直到这个数据库完全被清空为止# # 总之...如果你需要附加多个slave,建议你设置一个稍小maxmemory限制,这样系统就会有空闲# 的内存作为slave的输出缓存区(但是如果最大内存策略设置为"noeviction"的话就没必要了)# 最大内存策略:如果达到内存限制了(上面的配置:maxmemory <bytes>),Redis如何选择删除key。# maxmemory-policy volatile-lru## 你可以在下面五个行为里选:# volatile-lru -> 根据LRU算法生成的过期时间来删除。# allkeys-lru -> 根据LRU算法删除任何key。# volatile-random -> 根据过期设置来随机删除key。 # allkeys->random -> 无差别随机删。 # volatile-ttl -> 根据最近过期时间来删除(辅以TTL) # noeviction -> 谁也不删,直接在写操作时返回错误。# # 注意:对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。# 目前为止涉及的命令:set setnx setex append# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby# getset mset msetnx exec sort# LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),所以你可以用样本量做检测。# 例如:默认Redis会检查3个key然后取最旧的那个,你可以通过下面的配置指令来设置样本的个数。# maxmemory-samples 3############################## 附加模式 ################################ 是否在每次更新操作后进行日志记录。默认值为no# 格式:appendonly no # 是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no # 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程# 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。## AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置)# 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis# 能只丢失1秒的写操作。## AOF和RDB持久化能同时启动并且不会有问题。# 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。## 请查看 http://redis.io/topics/persistence 来获取更多信息. # 更新日志文件名,默认值为appendonly.aof appendfilename "appendonly.aof"# 更新日志条件。默认方式是everysec# 格式:appendfsync everysec# always 表示每次更新操作后手动调用fsync()将数据写到appendonly.aof# everysec 默认方式,表示每秒同步一次appendonly.aof# no 不同步,数据不会持久化# fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。# 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。#当AOF日志文件即将增长到指定百分比时,redis通过调用BGREWRITEAOF是否自动重写AOF日志文件。 no-appendfsync-on-rewrite no# 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF# 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。# 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。## 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。# # 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。# 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)# # 如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。# 自动重写AOF文件# 如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。# # 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)# # 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。你还需要指定被重写# 日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。## 指定百分比为0会禁用AOF自动重写特性。 auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb################################ LUA脚本 ################################ Lua 脚本的最大执行时间,毫秒为单位## 如果达到了最大的执行时间,Redis将要记录在达到最大允许时间之后一个脚本仍然在执行,并且将# 开始对查询进行错误响应。## 当一个长时间运行的脚本超过了最大执行时间,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 两个# 命令可用。第一个可以用于停止一个还没有调用写命名的脚本。第二个是关闭服务器唯一方式,当# 写命令已经通过脚本开始执行,并且用户不想等到脚本的自然终止。## 设置成0或者负值表示不限制执行时间并且没有任何警告lua-time-limit 5000################################## 显示日志 #################################### Redis慢查询日志可以记录超过指定时间的查询。运行时间不包括各种I/O时间,例如:连接客户端,# 发送响应数据等,而只计算命令执行的实际时间(这只是线程阻塞而无法同时为其他请求服务的命令执# 行阶段)# # 你可以为慢查询日志配置两个参数:一个指明Redis的超时时间(单位为微秒)来记录超过这个时间的命令# 另一个是慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录从队列中移除。## 下面的时间单位是微秒,所以1000000就是1秒。注意,负数时间会禁用慢查询日志,而0则会强制记录# 所有命令。slowlog-log-slower-than 10000# 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。slowlog-max-len 128############################# 事件通知 ############################## # Redis 能通知 Pub/Sub 客户端关于键空间发生的事件# 这个功能文档位于http://redis.io/topics/keyspace-events## 例如:如果键空间事件通知被开启,并且客户端对 0 号数据库的键 foo 执行 DEL 命令时,将通过# Pub/Sub发布两条消息:# PUBLISH __keyspace@0__:foo del# PUBLISH __keyevent@0__:del foo## 可以在下表中选择Redis要通知的事件类型。事件类型由单个字符来标识:## K 键空间通知,以__keyspace@<db>__为前缀# E 键事件通知,以__keysevent@<db>__为前缀# g DEL , EXPIRE , RENAME 等类型无关的通用命令的通知, ...# $ String命令# l List命令# s Set命令# h Hash命令# z 有序集合命令# x 过期事件(每次key过期时生成)# e 驱逐事件(当key在内存满了被清除时生成)# A g$lshzxe的别名,因此”AKE”意味着所有的事件## notify-keyspace-events 带一个由0到多个字符组成的字符串参数。空字符串意思是通知被禁用。## 例子:启用List和通用事件通知:# notify-keyspace-events Elg## 例子2:为了获取过期key的通知订阅名字为 __keyevent@__:expired 的频道,用以下配置# notify-keyspace-events Ex## 默认所用的通知被禁用,因为用户通常不需要该特性,并且该特性会有性能损耗。# 注意如果你不指定至少K或E之一,不会发送任何事件。notify-keyspace-events ""############################### 高级配置 ################################ 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的# 数据结构来编码。可以通过下面的指令来设定限制hash-max-ziplist-entries 512 #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间hash-max-ziplist-value 64 #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间# 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。# 这种特殊的方式只有在符合下面限制时才可以用:list-max-ziplist-entries 512 #list数据类型多少节点以下会采用去指针的紧凑存储格式list-max-ziplist-value 64 #list数据类型节点值大小小于多少字节会采用紧凑存储格式# set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。# 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。set-max-intset-entries 512 #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储# 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。# 这种编码只适合长度和元素都小于下面限制的有序集合:zset-max-ziplist-entries 128zset-max-ziplist-value 64# 是否启用哈希刷新。默认是yesactiverehashing yes# 每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表)。# redis所用的哈希表实现(见dict.c)采用延迟哈希刷新机制:你对一个哈希表操作越多,哈希刷新# 操作就越频繁;反之,如果服务器是空闲的,那么哈希刷新就不会完成,哈希表就会占用更多的一些# 内存而已。# # 默认是每秒钟进行10次哈希表刷新,用来刷新字典,然后尽快释放内存。## 建议:# 如果你对延迟比较在意,不能够接受Redis时不时的对请求有2毫秒的延迟的话,就用# "activerehashing no",如果不太在意延迟而希望尽快释放内存就设置"activerehashing yes"# 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端,# (一个常见的原因是一个发布/订阅客户端消费消息的速度无法赶上生产它们的速度)## 可以对三种不同的客户端设置不同的限制:# normal -> 正常客户端# slave -> slave和 MONITOR 客户端# pubsub -> 至少订阅了一个pubsub channel或pattern的客户端## 下面是每个client-output-buffer-limit语法:# client-output-buffer-limit <class><hard limit> <soft limit> <soft seconds># 一旦达到硬限制客户端会立即被断开,或者达到软限制并持续达到指定的秒数(连续的)。# 例如,如果硬限制为32兆字节和软限制为16兆字节/10秒,客户端将会立即断开# 如果输出缓冲区的大小达到32兆字节,或客户端达到16兆字节并连续超过了限制10秒,就将断开连接。## 默认normal客户端不做限制,因为他们在不主动请求时不接收数据(以推的方式),只有异步客户端# 可能会出现请求数据的速度比它可以读取的速度快的场景。## pubsub和slave客户端会有一个默认值,因为订阅者和slaves以推的方式来接收数据## 把硬限制和软限制都设置为0来禁用该功能client-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60# Redis调用内部函数来执行许多后台任务,如关闭客户端超时的连接,清除未被请求过的过期Key等等。## 不是所有的任务都以相同的频率执行,但Redis依照指定的“hz”值来执行检查任务。## 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key# 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理。## 范围是1到500之间,但是值超过100通常不是一个好主意。# 大多数用户应该使用10这个默认值,只有在非常低的延迟要求时有必要提高到100。hz 10# 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步。为了增量式的# 写入硬盘并且避免大的延迟高峰这个指令是非常有用的aof-rewrite-incremental-fsync yes

原创粉丝点击