# 通常该情况会发生在运行Redis的操作系统crash,尤其是没有使用data=ordered选项的ext4文件系统中(注:不会在Redis crash或abort但操作系统正常工作的场景中发生)。
# 当出现这种情况时,Redis可能会报错退出,或尽可能多的载入数据(默认情况)。
# 同时,开始在aof文件上执行truncate操作。下面的参数将控制这种行为:
# 如该参数被设置为yes,那么该被truncate的AOF文件会继续被加载,且Redis会启动服务后将该事件以日志的形式告知用户。
# 否则,如果该选项被设置为no,那么Redis将报错中断并拒绝启动服务。该参数被设置为no时,需要用户在重启动Redis服务前,使用redis-check-aof工具修复AOF文件。
# 注:如果AOF前后完整但是中间被截断,那么Redis还是会报错并退出。该参数主要用# 于Redis尝试从AOF文件中读取更多数据,但没有更多数据存在的场景。
aof-load-truncated yes
################## LUA SCRIPTING #####################
# 以毫秒为单位限定lua脚本的最大执行时间.
#
# 当lua脚本在超出最大允许执行时间之后,redis会记录下这个脚本到日志中,
#并且会向这个请求返回error的错误。
# 仅当 SCRIPT KILL 和 SHUTDOWN NOSAVE 命令可用时,
# 一个运行时间超过最大限定时间的脚本才会继续执行。
# SCRIPT KILL用来停止一个没有调用写入命令的脚本,
# 当用户不想等待脚本的自然中止但脚本又在进行写操作时,
# 采用 SHUTDOWN NOSAVE 是解决这个问题的唯一办法,可以立即停掉整个脚本。
#
# 设置为0 或者一个负数来取消时间限定.
lua-time-limit 5000
################### SLOW LOG #######################
# slow log(慢日志)用来记录执行时间超过指定值的查询。
# 执行时间不包含 I/O操作,比如和客户端交互,发送应答等等,
# 仅是执行命令的真实时间(仅是线程因为执行这个命令而锁定且无法处理其他请求的阶段���。
# 你可以使用两个参数来配置 slow log,一个是以微秒为单位的命令执行时间值,
# 另一个是slow log 的长度(即记录的最大数量)。
# 当一个新的命令被记录到slow log的时候,最旧的一条记录将会被移除。
#
# 下面的值将会被解释为微秒为单位,所以 1,000,000 微秒为 1秒
#
# 将这个值设置为一个负数,将关闭掉slow log ,如果设置为0,则记录所有的命令
# (默认是10毫秒)。
slowlog-log-slower-than 10000
# 因为这会消耗内存,因此实际上并不是限制到这个长度.
# 可以使用 SLOWLOG RESET来回收占用的内存
slowlog-max-len 128
############### LATENCY MONITOR ####################
# redis延迟监控子系统的示例与操作系统收集的redis实例相关的数据不同
#
# 通过LATENCY命令,可以为用户打印出相关信息的图形和报告
#
# 这个系统只会记录运行时间超出指定时间值的命令,如果设置为0,这个监控将会被关闭
#
# 默认的情况下,延迟监控是关闭,因为如果你没有延迟的问题大部分情况下不需要,
# 并且收集数据的行为会对性能造成影响,虽然这个影响很小可以在大负荷下工作。
#
# 延迟监控可以使用如下命令来打开:
# "CONFIG SET latency-monitor-threshold <milliseconds>".
latency-monitor-threshold 0
################## EVENT NOTIFICATION ####################
# redis可以在key 空间中采用发布/订阅模式来通知事件的发生。
#
# 这个功能的文档可以查看
#
# 对于一个实例,如果键空间事件通知是启用状态,当一个客户端执行在一个
# 存储在Database 0名为"foo"的key的DEL(删除)操作时,
# 有如下两条信息将会通过发布订阅系统产生
#
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# 以下是可选的redis事件通知,每个类别的事件可以由一个字符进行描述
#
# K Keyspace events, published with __keyspace@<db>__ prefix.
# E Keyevent events, published with __keyevent@<db>__ prefix.
# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
# $ String commands
# l List commands
# s Set commands
# h Hash commands
# z Sorted set commands
# x Expired events (events generated every time a key expires)
# e Evicted events (events generated when a key is evicted for maxmemory)
# A Alias for g$lshzxe, so that the "AKE" string means all the events.
#
# The "notify-keyspace-events" takes as argument a string that is composed
# by zero or multiple characters. The empty string means that notifications
# are disabled at all.
# 例1: 启用 list 和 generic 事件,
# notify-keyspace-events Elg
#
# 例子2 : 要想订阅通道名为__keyevent@0__:expired 上expired keys的事件:
# notify-keyspace-events Ex
#
# 默认不启用所有通知,因为大部分的用户无需这些功能,而且这些功能会带来一些开销
#
# 如果你没有指定K 或者E,没有事件会被传递。
notify-keyspace-events ""
################### ADVANCED CONFIG ###################
# 创建空白哈希表时,程序默认使用REDIS_ENCODING_ZIPLIST 编码,当以下任何一个条件被满足时,程序将编码从切换为REDIS_ENCODING_HT。
# 哈希表中某个键或某个值的长度大于 server.hash_max_ziplist_value (默认值为 64)。
# 压缩列表中的节点数量大于server.hash_max_ziplist_entries (默认值为 512 )。
#
# ziplist是一个解决空间的紧凑的数据存储结构,但是当数据超过阈值时,将采用原生的数据存储结构
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 与哈希表类似。
list-max-ziplist-entries 512
list-max-ziplist-value 64
# 设置特殊编码的唯一情况:
# 当一个set仅仅由一个基数为10最大位数为64位的有符号整形的字符串构成的时候。
#
# 以下配置设置了set的限制大小,当小于这个值时将会使用一个更紧凑的数据结构来
# 保存以期减少内存占用
set-max-intset-entries 512
# 与hash和list类似。zsort也采用如下的配置来选择是否进行特殊编码来节省空间。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# HyperLogLog 稀疏表示字节限制
# 这个限制包含了16个字节的头部,当一个HyperLogLog使用sparse representation
# 超过了这个显示,它就会转换到dense representation上。
hll-sparse-max-bytes 3000
# active rehashing使用CPU时间的每100毫秒中的1毫秒来进行rehashing工作
# 来rehash redis的主hash表(rehash的时候在代码种引入记时来保证)。
# lazy rehashing:逐步hash,每一次添加查找删除进行一次rehash的步骤,惰性hash