暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis(2)-配置文件参考

原创 stevenux 2020-02-16
1252
################################## 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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论