【Redis笔记】第2篇:redis.conf基本配置项说明(二)

2014-11-24 17:09:21 · 作者: · 浏览: 1
axmemory务必要配置一个合理的值(与用户可以为Redis提供的最大物理内存相比),以避免Redis实际使用的内存达到阈值后发生所有的key被完全删除的情况发生!

3) maxmemory-policy

配置Redis的淘汰策略,默认为volatile-lru。目前支持6种策略:

a. volatile-lru => remove the key with an expire set using an LRU algorithm;

b. allkeys-lru -> remove any key accordingly to the LRU algorithm

c. volatile-random -> remove a random key with an expire set

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

e. volatile-ttl -> remove the key with the nearest expire time (minor TTL)

f. noeviction -> don't expire at all, just return an error on write operations

4) maxmemory-samples

配置key淘汰算法运行时的采样数,默认为3。之所以存在这个配置项,是由于redis为节省内存,采用了近似的淘汰算法,这个配置项可以用来调节淘汰算法的精度:当需要淘汰key时(如内存达到阈值),Redis会在符合淘汰条件(由maxmemory-policy指定)的key set中,随机采样n个key并将其中符合LRU的那个key删掉。默认情况下n取3,如果要提高淘汰算法的精度,n可以调大(代价是增加CPU运算时间)。

6. SlowLog配置

Redis可以记录处理时间超过某个阈值的慢查询,这里的处理时间不包括I/O操作(如与客户端会话的读/写时间等)。

注意:由于Redis Server是单线程实现,因此若其中某个查询命令导致阻塞,会影响到后续的客户端请求,因此,线上环境最好开启慢查询记录以便追踪问题。

1) slowlog-log-slower-than

指定慢查询的阈值,单位:微秒。处理时间超过该值的查询命令,会被记录到日志中。

2) slowlog-max-len

配置slowlog记录的最大条数,大小无限制,但会消耗更多内存。默认128。

7. Advanced配置

1) 内部数据结构优化的阈值配置

可以配置相应的阈值,Redis据此判断其内部实现时是否优化相关的数据结构。例如:

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

上面的配置指定当ziplist中的key个数不大于512且最大的value不大于64字节时,Redis会用一种特殊的更节省内存的数据结构来存储这些k-v数据。

类似的配置还包括list、set、zset等数据类型。

2) activerehashing

配置Redis是否主动rehashing,默认yes,意味着Redis每秒会有10次自动rehashing的动作(每100ms会触发一次),以便尽可能优化内存使用。

注意:Redis采取的是lazy rehashing策略,即越是被频繁访问的hash table,Redis针对该表的rehashing也会越频繁;相反,若某个hash table处于idle状态,则针对它的rehashing永远不会被真正执行。

3) output buffer

output buffer是Redis为client分配的缓冲区(这里的"client"可能是真正的client,也可能是slave或monitor),若为某个客户端分配的output buffer超过了预留大小,Redis可能会根据配置策略关闭与该端的连接。

例如,若Redis被用作message queue,订购消息的consumer处理速度跟不上发布消息的producer时,就会发生对应的output buffer超限的情况。

该配置项格式如下:

client-output-buffer-limit

:目前支持3种客户端:1) normal => normal clients; 2) slave clients and MONITOR clients; 3) pubsub => clients subcribed to at least one pubsub channel or pattern

:若output buffer大小超过该值,Redis会立即关闭与对应client的连接

:若output buffer大小超过soft limit且这种情况的持续时间超过soft seconds,则Redis会关闭与对应client的连接。

默认的配置如下:

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

8. INCLUDES配置

当机器不只存在1个Redis实例时,这里可以实现每个Redis实例的"个性化"配置,此时,可以将这些实例的共有配置写到redis.conf中,而个性化的配置写到由include配置路径指定的文件中。

配置格式:include /path/to/local.conf

【参考资料】

1. redis.conf (redis v2.6.14)

2. redis github issue: maxmemory + evicting policy + slaves = death