Redis(2)-配置文件详解

Redis 配置文件参考

redis-5.0.7 配置文件翻译(有错误欢迎留言指出)

################################## INCLUDES ###################################
################################## 文件包含  ###################################
# include /path/to/local.conf
# include /path/to/other.conf
#
################################## MODULES #####################################
################################## 模块加载 #####################################
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so
#
################################## NETWORK #####################################
################################## 网络配置 #####################################
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# bind 127.0.0.1
bind 0.0.0.0
    # 配置redis接收连接的监听地址,空格分隔多个地址

protected-mode yes
    # redis3.2 之后加入的新特性,默认开启。在没有设置bind IP和密码的时候redis只允许访问
    # 127.0.0.1:6379,远程访问将提示警告信息并拒绝远程访问

port 6379
    # redis-server监听连接的端口,如果配置为0,那么redis不监听TCP socket

tcp-backlog 511
    # TCP协议三次握手的时候redis-server端收到client ack确认号之后的队列个数。在单位时间
    # 内(比如1秒)连接数很多时,需要调高该数值。需要注意是该数值不会超过/proc/sys/net/core/somaxconn
    # 定义的值大小,如果需要调大,那么该内核参数也要调大。

timeout 0
    # 客户端和Redis服务端的连接超时时间,默认是0,表示永不超时。
    # timeout 5 表示客户端闲置5秒后redis会断开该链接

# unixsocket /tmp/redis.sock
# unixsocketperm 700
    # 指定监听的unix套接字,默认不监听unix套接字

tcp-keepalive 300
    # 用于保持TCP会话
    # Redis 3.2.1后的推荐配置为300

################################# GENERAL #####################################
################################# 常规配置 ####################################
daemonize no
    # 认情况下 redis 不作为守护进程运行。当redis作为守护进程运行的时候,其默认将PID文件
    # 写入/var/run/redis.pid 文件。

supervised no
    # 配置是否通过系统的管理服务upstart或者systemd来启动和管理Redis守护进程。
    # CentOS7 及以后都使用systemd
    # 可以配置如下选项:
        # supervised upstart - signal upstart by putting Redis into SIGSTOP mode
        # supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
        # supervised auto    - detect upstart or systemd method based on
        #                      UPSTART_JOB or NOTIFY_SOCKET environment variables

pidfile /var/run/redis_6379.pid
    # PID文件路径,Redis以守护进程启动时使用的PID文件,在启动时创建,在退出时删除。
    # 不指定该文件redis默认会创建在"/var/run/redis.pid"。如果redis无法穿件该PID文件
    # 也不会报错,redis还会正常启动工作

loglevel notice
    # 指定服务器输出日志的详细级别
    # 可以是以下值:
        # debug (很多信息,开发和测试使用)
        # verbose (很多极少使用到的有用信息,不如debug级别详细)
        # notice (细节差不多刚刚好,生产中这样配,懂?)
        # warning (只有很重要/要命的信息被记录输出)

logfile ""
    # 指定日志文件,空字符串表示强制redis输出日志到标准输出
    # 如果你将redis作为服务守护进程启动而未指定日志文件,那么日志将写入设备/dev/null

# syslog-enabled no
    # 该选项配置要不要将redis日志合并到system logger
# syslog-ident redis
    # 指定syslog标识
# syslog-facility local0
    # 指定syslog设备,必须为USER 或 LOCAL0-LOCAL7.

databases 16
    # 设置数据库个数,默认的数据库为DB 0 ,索引为0
    # 可以使用指令:SELECT <dbid>选择某个数据库
    # databases 16 表示数据库DB0-DB15

always-show-logo yes
    # 该配置指令配置是否在前台启动redis时向交互终端的标准输出设备写ASCII
    # 编码的redis logo

################################ SNAPSHOTTING  ################################
################################ RedisDB快照机制 ###############################
# save <seconds> <changes>
    # 将数据库保存在磁盘上,在一段时间内改变的键个数到达一定时间时触发保存
    # 注释save开头的行将停止数据库快照机制
    # save "" 该配置将删除以前配置的所有快照保存点
save 900 1
    # 900秒后如果有1个键(key)改变,就快照该数据库保存到磁盘
save 300 10
    # 300秒后如果有10个键(key)改变,就快照该数据库保存到磁盘
save 60 10000
    # 60秒后如果有10000个键(key)改变,就快照该数据库保存到磁盘

stop-writes-on-bgsave-error no
    # 配置后台保存(快照)出错时是否禁用 redis 写入操作
    # 默认情况下,如果redis开启了RDB快照机制(至少有一个保存点)并且最近一次的后台快照操作
    # 失败,就会禁用写操作。如果后台的保存进程又开始正常工作,那么redis又会允许写入操作
    # 如果已经通过其他机制良好的配置了redis数据持久策略,那么可以将该选项配置为no。这使得
    # redis在硬盘出问题或者遇到权限问题时任然能正常工作。

rdbcompression yes
    # 该配置项决定持久化数据到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
    # 保存.rdb文件时使用LZF压缩字符串对象
    # 不压缩可以从保存进程得到一些CPU性能,但是推荐yes

rdbchecksum yes
    # 该配置决定是否使用CRC64校验RDB文件,默认使用
    # 版本5的RDB数据库文件末尾存放了该CRC64校验值,使用校验会使得RDB文件更不容易
    # 损坏,但是校验会在保存和加载RDB文件时损失10%的性能,如果最求最大化性能,可
    # 以设置为no禁用。
    # checksum 禁用时创建的RDB文件有一个为0的checksum值,告知加载代码跳过检查

dbfilename dump.rdb
    # 快照保存的文件名

dir ./
    # 快照文件保存路径,必须是文件夹路径,非文件路径
    # AOF文件也会被保存到此路径

################################# REPLICATION #################################
################################# 主从复制配置 #################################
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
# 1. Redis的主从复制是异步的,也可以将Master配置为当与其连接的从库少于一定数量时
#    停止接受写操作命令
# 2. Redis的从库可以在连接断开的一定时间内执行和主库的部分重同步,这个行为需要合适
#    的backlog大小配置
# 3. 主从的复制是自动进行的。

# replicaof <masterip> <masterport>
    # 该指令将该Redis实例变为配置的IP和端口指向的库的从库

# masterauth <master-password>
    # 设置连接密码

replica-serve-stale-data yes
    # 该配置决定从库和主库断开连接后,从库应对请求的行为:
    # "yes" 表示,从库继续接受客户端请求,这可能会返给客户端一些过时数据
    # "no" 表示,除了INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,
    #               SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,
    #               COMMAND, POST, HOST: and LATENCY等命令会响应外,其它的请求都回应一个
    #               错误"SYNC with master in progress"

replica-read-only yes
    # 该选项设置从库是否只读

repl-diskless-sync no
# -------------------------------------------------------
# WARNING: DISKLESS REPLICATION IS EXPERIMENTAL CURRENTLY
# 注意:无盘复制目前处于试验阶段
# -------------------------------------------------------
    # 该选择配置复制时同步(SYNC)的策略:写disk或者写socket
    # 新的从库或者处于重新连接的从库无法继续进行主从复制,只会收到数据差异信息。此时
    # 从库需要和主库做全量同步。主库redis会将内存中dump出新的RDB文件,并发送该从库。
    # 有两种方式发送:
        # 1) Disk-backed(yes): Redis master 创建一个新的进程将RDB文件写入到磁盘。之后
        #    Redis主进程以增量方式传输该从库。
        # 2) Diskless(no): Redis master 创建一个新进程直接dump RDB到slave的socket,不经
        #    过主进程,不经过硬盘
    # 基于硬盘的话,RDB文件创建后,一旦创建完毕,可以同时服务更多的slave,但是基于socket
    # 的话, 新slave连接到master之后得逐个同步数据。在较慢并且网络较快的时候,可以用
    # diskless(yes),否则使用磁盘(no)`

repl-diskless-sync-delay 5
    # 复制的延迟时间,设置0为关闭,在延迟时间内连接的新客户端,会一起通过disk方式同步数据,
    # 但是一旦复制开始还没有结束之前,master节点不会再接收新slave的复制请求,直到下一次
    # 同步开始。

# repl-ping-replica-period 10
    # 该选项使得slave根据master指定的时间进行周期性的PING监测

# repl-timeout 60
    # 该复制超时配置指令设置以下情况的超时(必须大于repl-ping-replica-period):
    # 1) 从库角度,在SYNC时(同步期间)的批量文件传输I/O超时
    # 2) 从库角度,主库超时(数据传输超时,ping超时)
    # 3) 主库角度,从库的复制超时(REPLCONF ACK pings).

repl-disable-tcp-nodelay no
    # 在socket的复制同步模式下是否在slave套接字发送SYNC之后禁用 TCP_NODELAY
        # "yes" redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据
        # 的时延。Linux内核默认配置情况下最多40毫秒的延时。
        # "no" 从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下追求最小延迟
        # 设置为no,但在高负载情况下或者在主从站距离比较远的情况下,把它切换为yes更好。

# repl-backlog-size 1mb
    # 设置复制的backlog大小,backlog是在从库断开连接后累加复制数据的缓冲,所以在某个从库
    # 断开连接重新连接后,通常只需部分同步,而不需要完全同步。
    # backlog越大,允许从库断开连接的实际越长而不会丢失数据(重连后进行部分同步)

# repl-backlog-ttl 3600
    # 该选项配置master在多久时间内没有slave连接就清空backlog缓冲
    # 计时从最后一个slave断开开始,值为0表示不释放buffer

replica-priority 100
    # 当master不可用,Sentinel会根据slave的优先级选举一个master,最低的优先级的slave会
    # 被选为master 。而配置成0,永远不会被选举

# min-replicas-to-write 3
# min-replicas-max-lag 10
    # 上面两个配置项表示:存在至少3个活动的从库连接并且从库的延迟小于或等于10秒,就让主库
    # master停止接收写请求,将写请求给从库处理。设置为0则不启用该功能。

# replica-announce-ip 5.5.5.5
# replica-announce-port 1234


################################## SECURITY ###################################
################################## 安全配置 ###################################
# requirepass foobared
    # 配置redis客户端连接密码,需要客户端连接后在处理其他命令前先执行UTH <PASSWORD>

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
    # 重命名命令,可以避免将危险的命令暴露给外部,也可保证安全性。
    # rename-command CONFIG "" 表示禁用CONFIG指令

################################### CLIENTS ####################################
# maxclients 10000
    # 设置同时允许连接的客户端的最大数目

############################## MEMORY MANAGEMENT ################################
############################## 内存管理配置       ################################
# maxmemory <bytes>
    # 配置Redis的内存使用上限,redis最大内存,单位为字节,8G内存配置时指定的数值
    # 为:8*1024*1024*1024(Byte),需要注意的是slave的输出缓冲区是不计算在maxmemory内的。
    # Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期
    # 的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读
    # 取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区。


# maxmemory-policy noeviction
    # 当内存达到maxmemory指定的值时,Redis选择移除什么来释放内存
        # volatile-lru    -> 使用接近LRU的算法回收设置有过期时间的KEY。
        # allkeys-lru     -> 使用接近LRU的算法回收任何KEY。
        # volatile-lfu    -> 使用接近LFU的算法回收设置有过期时间的KEY。
        # allkeys-lfu     -> Evict any key using approximated LFU.
        # volatile-random -> 随机移除设置有过期时间的KEY。
        # allkeys-random  -> 随机移除任何KEY。
        # volatile-ttl    -> 移除即将过期的KEY。(minor TTL)
        # noeviction      -> 不移除任何KEY,只对读操作返回一个错误。
            # LRU means Least Recently Used-最近最少使用算法
            # LFU means Least Frequently Used-最近最频繁使用算法

# maxmemory-samples 5
    # 由于LRU, LFU and volatile-ttl等算法都是使用近似随机的算法实现的,所以不是很
    # 准确。该选项用来在性能和准确性上做平衡。默认Redis会检查5个KEY然后选择一个最近
    # 最少使用的KEY释放。简单的说就是算法取样的大小。
    # 取3个快不准,取5个差不多,取10个准不快 (懂我意思吗?)

# replica-ignore-maxmemory yes
    # Redis 5开始,从库会忽略最大的内存配置项。KEY的回收由master库发送DEL指令到从库
    # 完成,就如同master回收自己的KEY一样。

############################# LAZY FREEING ####################################
############################# 删除KEY回收内存的机制-LAZY FREEING ##############
# Redis有两种删除KEY的原语。一个是指令DEL,是一种阻塞删除对象的机制,也就是说使用DEL
# 时server会停止处理新的命令,以同步的方式来回收与删除的对象相关的内存。
# 另一种非阻塞删除对象的原语如:FLUSHALL和FLUSHDB指令的UNLINK(非阻塞删除)和ASYNC。
# 这些指令会使用一个新的线程在后台回收内存。
# 默认是以阻塞的方式删除对象并回收内存,但是也可以配置为非阻塞的方式。如下:

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

############################## APPEND ONLY MODE ###############################
############################## 数据持久化策略:只追加模式 #######################
# Append Only File是除了RDB数据持久化的另一个方案,比RDB更加可靠。RBD和AOF策略可以
# 同时打开。
appendonly no
appendfilename "appendonly.aof"
    # 是否开启AOF数据持久化特性,指定AOF文件名。

# appendfsync always
appendfsync everysec
# appendfsync no
    # 该配置使用了fsync()系统调用通知OS将输出缓冲的数据立即写到磁盘。某些OS会直接写到
    # 磁盘,但是另一些则只会假模假式的ASAP。
    # no       表示不执行fsync,由操作系统自己决定何时将数据同步到磁盘,速度最快。
    # always   表示每次写入只追加日志都执行fsync,以保证数据同步到磁盘,慢安全。
    # everysec 表示每秒执行一次fsync,可能会导致丢失这1s数据。

no-appendfsync-on-rewrite no
    # 当AOF的fsync策略被设置为always或者everysec时,会有一个后台进程(后台BGSAVE或者
    # BGREWRITEAOF)进行频繁的I/O 操作,在某些Linux版本的内核设置中,这种情况会导致
    # Redis在调用fsync()时被阻塞时间过长。Linux的默认fsync策略是30秒,如果为"yes"可能
    # 丢失30秒数据。
    # 为了缓解以上问题,使用该指令来阻止fsync()被Redis主进程调用(在BGSAVE或者BGREWRITEAOF
    # 进行时)。如果有延迟问题,则可以设置为"yes",否则使用默认的"no"。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
    # 上面选项控制在AOF文件大小增长到一定程度后调用BGREWRITEAOF自动重写AOF日志文件,
    # Redis会记住最近一次重写后AOF文件的大小(如果自Redis重启以来,AOF文件未被重写过,
    # 那么Redis会记住Redis启动时的大小),之后Redis会将该值与当前的AOF文件大小作比较,
    # 如果当前的AOF文件增大幅度超过指令指定的百分比,则触发重写。另外,需要指定一个
    # 允许重写的最小AOF文件大小值,避免在AOF文件很小时频繁重写。
    # 指定一个为0的百分比则禁用该特性。

aof-load-truncated yes
    # 该选项控制在某些原因下AOF文件尾部有数据被截断时Redis的行为
    # 问题:在Redis运行的OS突然崩溃或者挂载EXT4文件系统没有指定data=ordered挂载选项时,
    #       在Redis启动过程中,AOF文件被加载进内存时可能会发现被截断过的AOF文件(数据缺失),
    #       当然,如果Redis自身崩溃或者拒绝启动,但是OS正常运行,那就不会出现此问题。
    # 出现以上情况后,Redis在启动时可以抛出错误并退出或者加载尽可能多的数据(当找到被截断的
    # AOF文件时)。
    # 选项:aof-load-truncated yes 表示Redis会加载一个截断的AOF文件并启动,然后输出一段
    # 日志来通知用户该事件。aof-load-truncated no 表示Redis放弃启动并抛出错误,此时用户
    # 需要使用"redis-check-aof"工具修复AOF文件后才能正常启动Redis。

aof-use-rdb-preamble yes
    # 是否开启Redis4.0新增的RDB-AOF混合持久化格式,当该选项为yes时,AOF文件由两节组成:
    #   [RDB file][AOF tail]
    # 这样可以兼具RDB和AOF特性,快速重写AOF和快速载入AOF文件。在Redis启动载入AOF时
    # 会先载入带有"REDIS"前缀的RDB文件内容,再载入后面的AOF格式文件内容。

################################ LUA SCRIPTING  ###############################
lua-time-limit 5000
    # 限制lua脚本的执行时间,单位为毫秒(milliseconds)。如果脚本运行到达最大的执行时间
    # 限制,则Redis会记录一条日志并返回给查询语句一个错误。
    # 当一个脚本超过了最大执行时间限制。则只有SCRIPT KILL和SHUTDOWN NOSAVE两条命名可以使用。
    # 第一个可以结束没有调写命令的脚本。
    # 要是脚本已经调用了写命令,则只能用第二个命令关闭Redis服务。

################################ REDIS CLUSTER ###############################
################################ Redis 集群配置 ###############################
# Redis实例不能为Redis集群的节点,除非作为节点启动。为了以集群节点启动Redis实例,可以
# 取消下面的集群配置,并进行相关配置。

# cluster-enabled yes
    # 使用集群

# cluster-config-file nodes-6379.conf
    # 每个集群节点都有一个集群配置文件。该配置文件由节点自己生成和更新,不能手动更改。
    # 每个集群节点都需要一个单独的不同的配置文件。确保运行在同一个系统的Redis节点实例
    # 的配置文件名不同。

# cluster-node-timeout 15000
    # 集群中的节点最长的不可达时间,超过该时间不可达表示该节点死了,死了,死了...

# cluster-replica-validity-factor 10
    # Master出故障后死了,在进行故障转移的时候,全部slave node都会请求申请为master node,
    # 但是有某slave(最低优先级)可能与master断开连接一段时间了,导致数据过于陈旧,这样的
    # slave不应该被提升为master。该参数用来判断slave的数据新旧程度(与Master数据的一致程度)。
    # 该选项的值越大代表可以允许数据更旧的slave在故障转移中转换为master,防止亦然。
    # 默认是10

# cluster-migration-barrier 1
    # "集群迁移屏障"---在Redis集群中,某个主节点发生故障时至少需要有一定数量的正常工作的
    # slave节点,此时Redis集群的复制实例(slave)才会转移为Master。该数量就叫"集群迁移屏障"
    # 该值反映了在Redis集群中你想要你的每个Master有几个slave。

# cluster-require-full-coverage yes
    # 集群处理请求需要槽位全部覆盖(可用),如果一个主库宕机且没有备库就会出现集群槽位不全,
    # "yes" redis集群槽位验证不全就不再对外提供服务。"no" 可以继续使用但是会出现查询数据
    # 查不到的情况(因为有数据丢失)。不建议打开该配置,这样会造成分区的时候,小分区的master
    # 一直在接受写请求,而造成很长时间数据不一致。

# cluster-replica-no-failover no
    # 该选项配置是否开启正常的集群故障迁移,yes为禁止故障迁移

########################## CLUSTER DOCKER/NAT support  ########################
########################## 集群对Docker/NAT的支持       ########################

# 在一些特定的部署情况下,Redis集群的节点地址发现会失效,原因是进行了NAT地址转换或者
# 进行了端口转发(典型的场景是Docker和其他的容器部署时)。

# 为了让Redis能够在这些环境下正常工作,使得每个节点知道自己的公共地址的静态配置就需要
# 提供。下面的两个选项就是提供这种配置的:
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port
#
# 上面的配置分别指出该节点的地址,客户端端口和集群消息总线的端口。该消息被发布在
# 总线报文的头部,以便以其它节点能够正确的映射发布该消息的节点的地址。
#
# 如果上面的配置未使用,那么常规的Redis集群的自动检测将会被使用。
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

################################## SLOW LOG ###################################
################################## 慢日志   ###################################
# Redis慢日志系统用来记录超过指定的执行时间的查询操作。该执行时间不包括I/O操作(如与客户端
# 的交流信息、发送响应给客户端),仅只执行命令的时间(该情况下只执行命令相关的线程被阻塞无法
# 提供其它请求的服务)。

# 下面的两个选项用来配置慢日志:

slowlog-log-slower-than 10000  # (10000 微秒 = 10 毫秒 = 0.1秒)
    # 指定执行时间超过多久的查询可以被日志记录,以微妙(microseconds)为单位。配置一个
    # 负的整数禁用慢日志,配置0表示日志将记录每一个命令。
    # 单位:1000000 microsec(微妙) = 1000 millisec(毫秒) = 1 sec(秒)

slowlog-max-len 128
    # 指定慢日志的记录文件大小,该值无上限。过大吃内存,使用 SLOWLOG RESET 清除慢日志文件。

################################ LATENCY MONITOR ##############################
################################ 延迟监控        ##############################
latency-monitor-threshold 0
    # 该选项用于配置Redis的延迟监控系统,该系统会在Redis运行时取样不同的操作。该配置
    # 主要配合慢日志系统使用,当"slowlog-log-slower-than 0"时,即记录任何命令的日志时,
    # 延迟监控会自动禁用。建议不开启。

############################# EVENT NOTIFICATION ##############################
############################# 事件通知           ##############################
# Redis可以通知Pub/Sub客户端(发布/订阅客户端)关于在键空间(key space)发生的事件。
#
# 例如:如果keyspace事件通知开启情况下,某个客户端在DB0上的"foo"键上执行了一个DEL命令
# 那么两条消息将会通过发布/订阅机制发布出来:
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
# 可以用单个字符表示需要记录和发布什么操作:
#  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.

# 如: notify-keyspace-events Elg 表示使能列表和常规的命令事件通知
# 输入的参数中至少要有一个 K 或者 E,否则的话,不管其余的参数是什么,都不会有任何通知被分发。

notify-keyspace-events ""

############################### ADVANCED CONFIG ###############################
############################### 高级配置        ###############################
hash-max-ziplist-entries 512
    # hash类型的数据结构在编码上可以使用ziplist和hashtable
    # ziplist的特点就是文件存储(或者内存存储)所需的空间较小,在内容较小时,性能和hashtable
    # 几乎一样。因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度
    # 达到阀值,将会被重构为hashtable。这个参数指的是ziplist中允许存储的最大条目个数,默认
    # 为512。

hash-max-ziplist-value 64
    # ziplist数据结构中允许每个条目的value值最大字节数,默认为64,建议为1024

list-max-ziplist-size -2
    # 在Redis中为了节约内存空间,list列表也使用了特殊的编码方式。
    # 该配置项的值当取正时,表示按照列表中数据项个数来限定每个内部列表节点长度。当该
    # 参数配置成100时,表示每个列表节点的list最多包含100个数据项。
    # 当取负值的时候,表示按照占用字节数来限定每个列表节点上的列表长度。这时,它只能
    # 取-1到-5这五个值,每个值含义如下:
        # -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。(注:1kb => 1024 bytes)
        # -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
        # -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
        # -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2或-1是Redis推荐值)
        # -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。

list-compress-depth 0
    # Redis的列表是可以被压缩后再存入内存的,该配置项规定quicklist双向链表两端不被压缩的
    # 节点个数(压缩深度)。
        # 0: 表示不压缩ziplist列表。
        # 1: 深度为1表示在第一个ziplist后才压缩quicklist中的ziplist列表。
        #    也就是说这里的头和尾都未压缩: [head]->node->node->...->node->[tail]
        #    实际上[head]和[tail]永远不会被压缩,这是为了能够快速执行PUSH/POP操作。
        # 2: [head]->[next]->node->node->...->node->[prev]->[tail]
        #    此时表示只压缩 head 或 head->next 或 tail->prev 或 tail,压缩它们之间的其它
        #    节点。
        # 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
        # 以此类推...

set-max-intset-entries 512
    # Redis的集合类型在其内容(字符串)恰巧为不超过64比特大小范围内保存的十进制数时,其
    # 使用了一种特殊的编码方式。该配置表示数据量小于等于512时使用intset集合,大于512
    # 时使用set集合

zset-max-ziplist-entries 128 # ziplist长度
zset-max-ziplist-value 64 # 有序集合的元素个数
    # 同样,在Redis中有序集合也使用特殊的编码方式以节省内存空间,当ziplist的长度和有序集合
    # 中的元素小于上面的配置值时才使用该编码。

hll-sparse-max-bytes 3000
    # 该值划分HyperLogLog使用的数据结构,该配置表示当HyperLogLog的大小小于或等于3000时使用
    # 稀疏(sparce)数据结构,超过该值使用密集(dence)的数据结构。推荐的值为3000。

stream-node-max-bytes 4096
stream-node-max-entries 100
    # 没看懂

activerehashing yes
    # Redis在每100毫秒时间内1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
    # 用场景中有非常严格的实时性需要时,不能够接受Redis时不时的对请求有2毫秒的延迟的话,no。
    # 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。

# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
# class:normal | replica | pubsub
client-output-buffer-limit normal 0 0 0
    # 该配置项用于对客户端输出缓冲进行限制,可以强迫那些从服务器读取数据非常慢的客户端断开连接,
    # 对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit
    # normal client默认取消限制。normal client包括MONITER client。
client-output-buffer-limit replica 256mb 64mb 60
    # 对于slave client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,
    # 那么服务器就会立即断开客户端连接
client-output-buffer-limit pubsub 32mb 8mb 60
    # 对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服
    # 务器就会立即断开客户端连接。

# client-query-buffer-limit 1gb
    # 客户端的查询缓冲会积累新的命令。该选项配置查询缓冲的大小。

# proto-max-bulk-len 512mb
    # 在Redis协议中,表示单个字符串的元素大小通常被限制在512MB内。

hz 10
    # 该值代表Redis执行任务的频率(Hz),该值为10表示每秒执行10个任务。
    # Redis会调用一个内部函数来执行多个后台任务,如在客户端超时时关闭连接,清除未被使用的
    # 的过期键等。
    # 提高该值会使得Redis在空闲时更消耗CPU资源,但是在同时有大量KEY过期时Redsi响应会更快。
    # 值在1~500之间,使用100可以获得超低的延迟,但是这样的情况极少。

dynamic-hz yes
    # 该选项用于配置hz的值是否跟随连接的客户端个数动态变化,而实际配置的hz值则作为参考基线。
    # 这种情况下,空闲的Redis进程将使用更少的CPU资源,一个高负载的redis也会更快响应。

aof-rewrite-incremental-fsync yes
    # 当一个子进程重写AOF文件时,如果该配置项为yes,则AOF文件将会系统会在AOF文件每产生32MB
    # 时执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。

rdb-save-incremental-fsync yes
    # 同前一选项,针对RDB文件
#
# lfu-log-factor 10
# lfu-decay-time 1

########################### ACTIVE DEFRAGMENTATION #######################
########################### 主动碎片整理            #######################
# WARNING THIS FEATURE IS EXPERIMENTAL.
# 该特性处于测试阶段,但是通过了生产中和压力测试。
#
# What is active defragmentation?
# -------------------------------
#
# Active (online) defragmentation allows a Redis server to compact the
# spaces left between small allocations and deallocations of data in memory,
# thus allowing to reclaim back memory.
#
# Fragmentation is a natural process that happens with every allocator (but
# less so with Jemalloc, fortunately) and certain workloads. Normally a server
# restart is needed in order to lower the fragmentation, or at least to flush
# away all the data and create it again. However thanks to this feature
# implemented by Oran Agra for Redis 4.0 this process can happen at runtime
# in an "hot" way, while the server is running.
#
# Basically when the fragmentation is over a certain level (see the
# configuration options below) Redis will start to create new copies of the
# values in contiguous memory regions by exploiting certain specific Jemalloc
# features (in order to understand if an allocation is causing fragmentation
# and to allocate it in a better place), and at the same time, will release the
# old copies of the data. This process, repeated incrementally for all the keys
# will cause the fragmentation to drop back to normal values.
#
# 重要:
#
# 1. This feature is disabled by default, and only works if you compiled Redis
#    to use the copy of Jemalloc we ship with the source code of Redis.
#    This is the default with Linux builds.
#
# 2. You never need to enable this feature if you don't have fragmentation
#    issues.
#
# 3. Once you experience fragmentation, you can enable this feature when
#    needed with the command "CONFIG SET activedefrag yes".
#

# 配置:
# activedefrag yes
# active-defrag-ignore-bytes 100mb
# active-defrag-threshold-lower 10
# active-defrag-threshold-upper 100
# active-defrag-cycle-min 5
# active-defrag-cycle-max 75
# active-defrag-max-scan-fields 1000
发布了108 篇原创文章 · 获赞 58 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/YouOops/article/details/104293069
今日推荐