redis.conf配置文件参数详解

# Redis configuration file example.

########################################## GENERAL ########################################

daemonize yes    #是否开启在后台运行redis,默认为no,不开启

pidfile /var/run/redis/redis.pid   #redis在后台运行时,默认pid文件的存放路径和文件名

port 6379    #redis运行监听端口号,默认6379

tcp-backlog 511    #listen队列的长度,这个跟系统本身的

bind 127.0.0.1    #绑定IP地址

unixsocket /tmp/redis.sock    #unix指定监听socket

unixsocketperm 755    #当指定监听为socket时,可以指定其权限为755

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

tcp-keepalive 0    #TCP keepalive.如果是非零值,当失去链接时,会使用SO_KEEPALIVE发送TCP ACKs到客户端。这个参数有两个作用:1.检测断点;2.从网络中间设备来看,就是保持链接。在Linux上,设定的时间就是发送ACKs的周期。注意:达到双倍的设定时间才会关闭链接。在其他内核上,周期依赖于内核设置。一个比较合理的值为60s

loglevel notice    #指定日志级别,debug用于开发/测试;verbose没debug那么详细;notice适用于生产线上,warning只记录非常重要的信息

logfile /var/log/redis/redis.log    #日志文件名,以及路径

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

###################################### SNAPSHOTTING#####################################

#save 900 1     #15分钟内有至少1个键被更改则进行快照
#save 300 10      #5分钟内有至少10个键被更改则进行快照
#save 60 10000    #一分钟内有至少10000个键被更改则进行快照
save ""       #表示禁用RDB持久化

stop-writes-on-bgsave-error yes    #表示写入磁盘时出现错误时,是否停止写入,yes,表示停止,no表示继续。

rdbcompression yes    #表示是否要压缩RDB

rdbchecksum yes    #表示是否进行数据校验

dbfilename dump.rdb    #默认RDB持久化备份文件名

dir /var/lib/redis/    #定义RDB存放路径

slaveof <masterip> <masterport>    #主从复制,当本机是slave时配置

masterauth <master-password>    #当主机需要密码验证的时候配置

slave-serve-stale-data yes    #当slave和master丢失链接,或正处于同步过程中,是否响应客户端请求,设置为yes表示响应,设置为no,直接返回"SYNC with master in progress"(正在和主服务器同步中)

slave-read-only yes    #设置slave是否为只读
repl-diskless-sync no    #disk较慢,并且网络较快的时候,可以用diskless
repl-diskless-sync-delay 5    #设置成0的话,传输开始asap

repl-disable-tcp-nodelay no    #SYNC完毕后,在slave的socket里关闭TCP_NODELAY;如果是yes,reids发送少量的TCP包给slave,但可能导致最高40ms的数据延迟;如果是no,那可能在复制的时候,会消耗少量带宽;默认我们是为了低延迟优化而设置成no,如果主从之间有很多网络跳跃,那设置成yes吧		

repl-backlog-size 100mb    #值越大,salve可以丢失的时间就越长。

repl-backlog-ttl 3600    #多久释放backlog,当确认master不再需要slave的时候,多久释放。0是永远不释放。

slave-priority 100    #当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master.而配置成0,永远不会被选举。(必须≥0)。默认是100	

requirepass foobared    #设置客户端连接密码,因为Redis响应速度可以达到每秒100w次,所以密码要特别复杂

rename-command CONFIG ""    #命令重新命名,或者禁用;重命名命令为空字符串可以禁用一些危险命,令比如:FLUSHALL删除所有数据,需要注意的是,写入AOF文件或传送给slave的命令别名也许会引起一些问题

maxclients 10000    #设置最多链接客户端数量,默认为10000;实际可以接受的请求数目为设置值减去32,这32是Redis为内部文件描述符保留的							
maxmemory <bytes>    #设置最大使用内存数量,在把Redis当作LRU缓存时特别有用。设置的值要比系统能使用的值要小,因为当启用删除算法时,slave输出缓存也要占用内存
达到最大内存限制时,使用何种删除算法
#volatile-lru    ->  使用LRU算法移除带有过期标致的key
#allkeys-lru     ->  使用LRU算法移除任何key
#volatile-random ->  随机移除一个带有过期标致的key
#allkeys-random  ->  随机移除一个key
#volatile-ttl    ->  移除最近要过期的key

#noeviction ->      不删除key,当有写请求时,返回错误

maxmemory-policy volatile-lru	#默认设置为volatile-lru

maxmemory-samples	3    #LRU和minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存),随意你可以选择样本大小进行检测。Redis默认的会选择3个样本进行检测

appendonly no   #默认情况下,redis没有开启AOF方式的持久化,开启AOF持久化需要把no变为yes

appendfilename "appendonly.aof"    AOF的保存名称,默认为appendonly.aof

# Redis supports three different modes:
redis支持三种AOF文件持久化策略:

# no: don't fsync, just let the OS flush the data when it wants. Faster.
#表示由操作系统决定何时写入。性能最好,但可靠性最低

# always: fsync after every write to the append only log. Slow, Safest.
表示每次都写入磁盘。性能最差,比上面的安全一些

# everysec: fsync only one time every second. Compromise.
表示每秒执行一次写入。折中方案,推荐
appendfsync everysec    #AOF持久化方案,选择everysec,每秒执行一次写入

no-appendfsync-on-rewrite no    #设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入。

auto-aof-rewrite-percentage 100		#指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次aof文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite。

auto-aof-rewrite-min-size 64mb		指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite。

# AOF自动重写(合并命令,减少日志大小)
# 当AOF日志大小增加到一个特定比率,Redis调用BGREWRITEAOF自动重写日志文件
# 原理:Redis会记录上次重写后AOF文件的文件大小。
# 如果刚启动,则记录启动时AOF大小
# 这个基本大小会用来和当前大小比较。如果当前大小比特定比率大,就会触发重写。
# 你也需要指定一个AOF需要被重写的最小值,这样会避免达到了比率。
# 但是AOF文件还很小的情况下重写AOF文件,设置为0禁用自动重写

aof-load-truncated yes    #AOF文件可能在尾部是不完整的(上次系统关闭有问题,尤其是mount、ext4文件系统时没有加上data=ordered选项,只会发生在os崩溃时,redis自己死不会不完整。)那redis重启时load进内存的时候就有问题了。发生的时候,可以选择reids启动报错,或者load尽量多正常的数据。如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。如果是no,用户必须手动reids-check-aof修复AOF文件才可以。

lua-time-limit 5000    #Lua脚本的最大执行时间,单位毫秒,超时后会报错,并且计入日志;当一个脚本运行时间超过了最大执行时间,只有SCRIPT KILL和 SHUTDOWN NOSAVE两个命令可以使用;SCRIPT KILL用于停止没有调用写命令的脚本。SHUTDOWN NOSAVE是唯一的一个,在脚本的写命令正在执行用户又不想等待脚本正常结束的情况下,关闭服务器的方法。以下选项设置为0或负数就会取消脚本执行时间限制
slowlog-log-slower-than 10000		#Redis慢查询日志记录超过设定时间的查询,且只记录执行命令的时间,不记录I/O操作,比如:和客户端交互,发送回复等;时间单位为微妙,1000000微妙 = 1 秒;设置为负数会禁用慢查询日志,设置为0会记录所有查询命令

slowlog-max-len 128    #日志长度没有限制,但是会消耗内存。超过日志长度后,最旧的记录会被移除,使用SLOWLOG RESET命令可以回收内存

latency-monitor-threshold 0    #用LATENCY打印redis实例在跑命令时的耗时图表,只记录大于等于下边设置的值的操作。0的话,就是关闭监视。可以动态开启,直接运行CONFIG SET latency-
monitor-threshold

notify-keyspace-events ""    #可以通知pub/sub客户端关于key空间的变化。
# 比如如果开着开关。一个client进行了DEL操作在“foo”key上在database0上。两个消息将会发布通过 pub/sub
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
# 大部分人不需要这个功能,并且还需要一定开销,所以默认关闭。 
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 当有少量条目的时候,哈希使用高效内存数据结构。最大的条目也不能超过设定的阈值。


#和哈希编码一样,少量列表也以特殊方式编码节省内存。“少量”设定如下:
list-max-ziplist-entries 512
list-max-ziplist-value 64
# 集合只在以下情况下使用特殊编码来节省内存
# -->集合全部由64位带符号10进制整数构成的字符串组成
# 下面的选项设置这个特殊集合的大小。
set-max-intset-entries 512
# 当有序集合的长度和元素设定为以下数字时,又特殊编码节省内存
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000    HyperLogLog不懂。大于16000完全不可接受!当CPU很顶得住的话,给10000可以。默认给3000.
activerehashing yes    #哈希刷新使用每100个CPU毫秒中的1毫秒来帮助刷新主哈希表(顶级键值映射表);Redis哈希表使用延迟刷新机制,越多操作,越多刷新.如果服务器空闲,刷新操作就不会进行,更多内存会被哈希表占用默认每秒进行10次主字典刷新,释放内存。如果你有硬性延迟需求,偶尔2毫秒的延迟无法忍受的话。设置为no,否则设置为yes
#客户端输出缓存限制强迫断开读取速度比较慢的客户端
#有三种类型的限制
#normal -> 正常的客户端包括监控客户端
#slave -> 从客户端
# pubsub -> 客户端至少订阅了一个频道或者模式
	# 客户端输出缓存限制语法如下(时间单位:秒)

# client-output-buffer-limit <类别> <强制限制> <软性限制> <软性时间>
# 达到强制限制缓存大小,立刻断开链接。
# 达到软性限制,仍然会有软性时间大小的链接时间
# 默认正常客户端无限制,只有请求后,异步客户端数据请求速度快于它能读取数据的速度
# 订阅模式和主从客户端又默认限制,因为它们都接受推送。
# 强制限制和软性限制都可以设置为0来禁用这个特性
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

hz 10
# 设置Redis后台任务执行频率,比如清除过期键任务。
# 设置范围为1到500,默认为10.越大CPU消耗越大,延迟越小。
# 建议不要超过100

aof-rewrite-incremental-fsync yes
# 当子进程重写AOF文件,以下选项开启时,AOF文件会每产生32M数据同步一次。
# 这有助于更快写入文件到磁盘避免延迟