JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Redis 6.2配置文件全解析:轻松优化缓存性能!

wys521 2024-11-10 13:18:46 精选教程 25 ℃ 0 评论

转发学习篇,本文只是做了一些格式转换,底部有版权声明

Redis-6.2.11配置文件基础介绍

1.bind 127.0.0.1

bind: 127.0.0.1,代表只能接受本机的访问请求。后面的::1是ipv6的地址。

在不写的bind情况下,代表无限制接受任何ip地址的访问。

生产环境肯定要配置上应用服务器的地址,服务器是需要远程访问的。

例:将来应用所在的服务器的ip地址是:17.55.63.32 这里就需要更改为bind 17.55.63.32

2.保护模式:protected-mode

protected-mode yes

开启了protected-mode(保护模式),那么在没有设定bind ip且没有设密码的情况下,也只接受本机的响应。

如果学习时想要方便,让哪里都可以访问,可以注释掉bind配置,并且把保护模式改成no。

3.端口号配置-Port

port 6379

redis默认端口6379就是在这里配置的。

多实例时,就是在这里修改每个实例的端口。

4.tcp半连接队列长度配置 tcp-backlog

tcp-backlog 511

设置tcp的backlog,backlog是一个连接队列,队列总和=未完成三次握手队列 + 已经完成三次握手队列。

在高并发环境下一般需要一个高backlog值来避免慢客户端连接问题。

因为Linux内核会将这个值减小到/proc/sys/net/core/somaxconn的值(128)。

所以需要确认增大/proc/sys/net/core/somaxconn和/proc/sys/net/ipv4/tcp_max_syn_backlog(128)

两个值来达到想要的效果。

5.超时关闭-timeout

timeout 0

它可以决定一个空闲的客户端维持多少秒会关闭,0表示关闭该功能。即永不关闭。

默认的配置也是0。

6. tcp心跳检测 tcp-keepalive

tcp-keepalive 300

对访问客户端的一种心跳检测,每个n秒检测一次。

单位为秒,如果设置为0,则不会进行Keepalive检测,建议设置成60。

7.通用配置general

7.1 :是否配置为守护进程 daemonize yes

daemonize yes

配置是否为守护进程,默认值为no。

让redis成为守护进程,意味着redis可以后台运行,所以一般都会把它设置为yes。

但是,如果redis是服务脚本启动的,那么不管该参数为什么,redis都会运行成为一个守护进程。

7.2 pid文件位置配置-pidfile

pidfile /opt/redis/redis_6379.pid

配置存放pid文件的位置,每个实例会产生一个不同的pid文件。

7.3 日志级别配置 loglevel

loglevel notice

指定日志记录级别,redis总共支持四个级别:

debug:能设置的最高的日志级别,打印所有信息,包括debug信息。

verbose:打印除了debug日志之外的所有日志。

notice:打印除了debug和verbose级别的所有日志。

warning:仅打印非常重要的信息。

默认的日志级别为为notice。

四个级别根据使用阶段来选择,生产环境选择notice 或者warning。

7.4 日志文件输出路径配置

logfile /opt/redis-6.2.11/log

该路径默认为空。可以根据自己需要把日志文件输出到指定位置。

7.5 数据库数量配置-databases

database 16

设定redis中库的数量,默认数量是16,这也是大家众所周知的数量。

7.6 是否总是显示logo

always-show-logo no

默认是值是no。

8.密码配置 requirepass

在命令中设置密码,只是临时的。重启redis服务器,密码就还原了。

永久设置,需要再配置文件中进行设置。

把下面注释解开,把foobared修改成自己相要的密码即可。

requirepass aaaa

注意:

1.由于redis非常快,外部用户可以尝试150k次密码/s,建议使用一个复杂度非常高的密码;

2.如果主机受密码保护(使用“requirepass”配置下面的指令)之前,可以告诉复制副本进行身份验证启动复制同步过程,否则主机将拒绝复制请求

3.requirepas与ACL LOAD命令中的aclfile选项不兼容,这将导致requirepas被忽略

9.客户端最大连接数-maxclients

maxclients 10000

设置redis同时可以与多少个客户端进行连接

默认maxclients就是10000。如果达到了此限制,redis则会拒绝新的连接请求。

并且向这些连接请求方发出max number of clients reached以作回应。

10.内存管理

10.1、 redis最大内存配置-maxmemory

maxmeory <bytes>

最大可使用内存,即占用物理内存的比例,默认值为0,表示不限制。生产环境中根据需求设定,通常设置在50%以上

建议最好设置,否则,将内存占满,会造成服务器宕机以及部分数据丢失。

这是因为一旦到达内存使用上限,redis将会试图删除已到期或即将到期的Key。

移除规则(数据淘汰策略)可以通过maxmemory-policy来指定。

10.2、 达到最大内存时的移除策略(数据删除策略)-maxmemory-policy

maxmemory-policy noeviction

redis使用的默认策略为noeviction。

可选策略:

检测易失数据(可能会过期的数据集server.db[i].expires )

volatile-lru:挑选最近最少使用的数据淘汰 淘汰最长时间没有使用的数据

volatile-lfu:挑选最近使用次数最少的数据淘汰 淘汰使用次数最少的数据

volatile-ttl:挑选将要过期的数据淘汰

volatile-random:任意选择数据淘汰

检测全库数据(所有数据集server.db[i].dict )

allkeys-lru:挑选最近最少使用的数据淘汰

allkeLyRs-lfu::挑选最近使用次数最少的数据淘汰

allkeys-random:任意选择数据淘汰,相当于随机

放弃数据驱逐 基本不使用这种策略

no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发OOM(Out Of Memory)

10.3、 设置样本数量-maxmemory-samples

maxmemory-samples 5

设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值。

所以可以设置样本的大小,redis默认会检查这么多个key并选择其中LRU的那个。

一般设置3到7的数字,数值越小样本越不准确,但性能消耗越小。默认值5就可以获得很好的效果。

11.、AOF持久化设置

11.1 、开始/关闭AOF-appendonly

appendonly yes

配置文件中默认是关闭aof的,想要开启把no改成yes即可。

11.2、 AOF文件名称-appendfilename

appendfilename "appendonly.aof"

默认的文件名称是appendonly.aof,一般也无需修改这个文件名称。

11.3 、持久化同步策略-appendfsync

appendfsync everysec

主要有三种策略可供选择:

everysec:每秒执行,发送异常时可能会丢失最后一秒的数据。

always:每次写操作执行,数据最安全,但是对性能有影响。

no:不强制刷盘,不主动同步数据,由内核决定什么时候刷盘,数据最不安全,性能最好。

11.4 、后台有保存任务时,暂时停止appendfsync

可以理解为,有数据保存到redis时,暂时停止持久化。默认并没有开启。

no-appendfsync-on-rewrite yes

11.5、 自动重写AOF文件

在AOF文件大小增长到了指定的百分比(相对于上次AOF文件大小的增长量)或者最小体积时。

会自动调用BGREWRITEAOF命令重写AOF文件。

自动重写AOF文件的最小大小是64mb。

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

11.6、 AOF文件末尾截断时的处理策略-aof-load-truncated

默认是true,发生文件截断时,依旧加载文件。

aof-load-truncated yes

11.7、 开启混合持久化-aof-use-rdb-preamble

开启混合持久化,更快的AOF重写和启动时数据恢复。

aof-use-rdb-preamble yes

12、配置LUA脚本最大执行时长-lua-time-limit

lua-time-limit 5000

lua-time-limit配置的单位毫秒,默认是5秒。

当脚本运行时间超过限制后,redis将开始接受其他命令但是不会执行,而是会返回BUSY错误。

13、集群配置

13.1 允许开启集群模式-cluster-enabled

cluster-enabled yes

注意以集群模式启动的redis实例才能作为集群的节点。

13.2 集群配置文件-cluster-config-file

cluster-config-file nodes-6379.conf

这个文件redis会自行创建和维护,我们只需要解开注释即可,文件名一般都无需更改。

13.3 集群节点超时时间-cluster-node-timeout

cluster-node-timeout 15000

单位是毫秒。

在集群模式下,master节点之间会互相发送PING心跳来检测集群master节点的存活状态。

超过配置的时间没有得到响应,则认没有响应的master节点宕机。

13.4 副本有效因子-cluster-replica-validity-factor

cluster-replica-validity-factor 10

该配置用于决定当redis集群中,一个master宕机后,如何选择一个slave节点完成故障转移自动恢复。

较大的值可能允许数据太旧的副本故障切换到主副本,而太小的值可能会阻止群集选择副本。

如果设置为0 ,则不管slave与 master 之间断开多久,都认为自己有资格成为master;

13.5 master故障转移时保留的最少副本数-cluster-migration-barrier

cluster-migration-barrier 1

默认值为1(仅当副本的主副本至少保留一个副本时,副本才会迁移)。

要禁用迁移,只需将其设置为非常大的值。可以设置值0,但仅对调试有用,并且在生产中很危险。

13.6 哈希槽全覆盖检查-cluster-require-full-coverage

cluster-require-full-coverage yes

默认值是true(yes),如果希望正在工作的集群的子集继续接受对仍然覆盖的密钥空间部分的查询可以把它设置为no

默认情况下,如果检测到存在查询,Redis群集节点将停止接受查询 至少有一个哈希槽未覆盖(没有可用节点为其提供服务)。

如果集群部分关闭(例如,一系列哈希槽不再覆盖)所有集群最终都变得不可用。一旦再次覆盖所有插槽,它就会自动返回可用状态。

13.7 自动故障转移-cluster-replica-no-failover

cluster-replica-no-failover no

默认值为no,当设置为yes时,此选项可防止副本在主机故障期间尝试故障切换master。

但是,如果被迫这样做,主机仍然可以执行手动故障切换。

13.8 集群宕机时允许节点处理读请求-cluster-allow-reads-when-down

默认值为no。

cluster-allow-reads-when-down no

13.9 对NAT网络或者Docker的支持

集群通告ip

cluster-announce-ip 10.1.1.5

群集通告端口

cluster-announce-port 6379

集群通告总线端口

cluster-announce-bus-port 6380

集群通告tls端口 有的redis版本可能没有此选项

cluster-announce-tls-port 6380

为了使Redis群集在这样的环境中工作每个节点都知道需要其公共地址的配置。这个

以下两个选项用于此范围,分别是:

集群通告ip

集群通告端口

集群通告总线端口

每个都向节点指示其地址、客户端端口和集群消息总线端口。然后将信息发布在总线数据包的报头中以便其他节点能够正确地映射该节点的地址发布信息。

如果未使用上述选项,则正常的Redis群集自动检测将改用。

请注意,重新映射时,总线端口可能不在客户端端口+10000,因此您可以根据需要指定任何端口和总线端口

关于如何重新映射。如果未设置总线端口10000将照常使用。

14.慢日志

慢查询日志功能用于记录执行时间超过给定时长的命令请求。

用户可以通过这个功能产生的日志来监视和优化查询速度

14.1 慢日志记录阈值-slowlog-log-slower-than

命令执行时间超过这个值就会被记录到慢日志中,默认值是10000微秒。

slowlog-log-slower-than 10000

14.2 慢日志文件大小-slowlog-max-len

slowlog-max-len 128

慢日志文件超过这个长度后最旧的记录会被删除,默认值是128条。

15.延迟监控-latency-monitor-threshold

latency-monitor-threshold 0

单位是毫秒,默认情况下,延迟监控是禁用的。

因为如果没有延迟问题,通常不需要延迟监控,而且收集数据会对性能产生影响,

Redis延迟监控子系统在运行时对不同的操作进行采样,以收集与Redis实例可能的延迟源相关的数据

通过LATENCY命令,用户可以获得该信息打印图表并获取报告。

系统仅记录在时间相等或大于通过延迟监视器阈值配置指令指定的毫秒数。当其值设置为零时,延迟监视器将关闭。

默认情况下,延迟监控是禁用的,因为如果您没有延迟问题,则通常不需要延迟监控,并且收集数据会对性能产生影响,虽然很小,但可以在大负载下进行测量。可以在运行时使用以下命令轻松启用延迟监视

CONFIG SET latency monitor threshold<毫秒>

16.事件通知-notify-keyspace-events

默认情况下所有事件通知都是关闭的,因为大多数用户不需要这些特性。

默认情况下,禁用所有通知,因为大多数用户不需要这个特性和这个特性有一些开销。请注意,如果您没有指定K或E中的至少一个,则不会传递任何事件。

“notify keyspace events”将零个或多个字符组成的字符串作为参数。空字符串表示禁用通知。

示例:要从事件名称的角度启用列表和通用事件,请使用:

notify-keyspace-events Elg # 要从事件名称的角度启用列表和通用事件

notify-keyspace-events "" # 禁用通知

17.是否开启gopher协议 gopher-enabled

gopher-enabled no

默认这个配置是被注释了的,而且默认值也是不开启。一般也不会开启。

18.高级设置

18.1 设置Hash底层数据结构由ziplist转为hashtable的阈值

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

由于hash类型的数据结构主要有两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

意思就是当一个Hash类型的key包含的实体数量超过了hash-max-ziplist-entries的值或者某个实体的大小超过了hash-max-ziplist-value的值(单位字节),那么底层编码就会升级成hashtable。

18.2 设置List底层数据结构quicklist中单个ziplist的大小

list-max-ziplist-size -2

redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。

在配置文件中它可以有五个选项:

-5:最大大小为64Kb,不推荐作为正常情况下的负载

-4:最大大小为32Kb,不推荐

-3:最大大小为16Kb,大概可能估计好像不是很推荐(原话:probably not recommended)

-2:最大大小为8Kb,推荐(原话:good)

-1:最大大小为4Kb,推荐(原话:good)

默认值是-2。

18.3设置如何继续压缩List中ziplist

list-compress-depth 0

ziplist还可以继续进行压缩。可以如下设置它的值:

0:代表不压缩,默认值

1:两端各一个节点不压缩

2:两端各两个节点不压缩

...:依次类推。。。

18.4 设置set底层intset升级为hashtable的阈值

set-max-insert-entries 512

单位是字节。

在一种情况下,集合有一种特殊的编码:当一个集合组成时这些字符串恰好是基数为10的64位有符号整数范围内的整数。设置以使用此特殊的内存节省编码.

18.5 ZSet底层数据结构由ziplist转为skiplist的阈值

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

单位是字节.

与哈希和列表类似,排序集也经过特殊编码,以节省大量空间。仅当长度和排序集的元素低于以下限制

18.6 设置HyperLogLog底层稀疏矩阵转为稠密矩阵的阈值

hll-sparse-max-bytes 3000

HyperLogLog当在计数比较小时会使用稀疏矩阵来存储,只有当计数达到阈值时,才会转为稠密矩阵。超过16000的值是完全无用的,因为这种情况下使用稠密矩阵更加节省内存。注释中给出的建议值是3000。这样以便在不降低太多PFADD速度的情况下获取空间有效编码的好处。稀疏编码的PFADD的时间复杂度为O(N)。当更少考虑CPU占用时更多考虑内存占用时,这个值可以升到10000左右。

建议的值为~3000,以便在不降低太多PFADD(稀疏编码为O(N))的情况下获得空间效率编码的好处。当CPU不是问题,但空间是问题,并且数据集由许多基数在0-15000范围内的HyperLogLogs组成时,该值可以提高到约10000。

18.7 自定义Stream宏节点大小

stream-node-max-bytes 4096

stream-node-max-entries 100

stream-node-max-bytes选项修改Stream中每个宏节点能够占用的最大内存。

stream-node-max-entries参数指定每个宏节点中可存储条目的最大数量。

18.8 是否开启Rehash

activerehashing yes

redis在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。

当有非常严格的实时性需要时,不能够接受redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。

如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。

18.9 客户端输出缓存控制

下面的三种客户端说明:

normal:一般客户端包含监控客户端

replica:副本客户端(slave)

pubsub:客户端至少订阅了一个pubsub通道或模式

客户端输出缓冲区限制指令语法:

client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

一旦达到hard limit限制或者达到soft limit之后又过了soft seconds秒,那么客户端会立即被断开连接。

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit replica 256m 64mb 60

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

18.10 配置客户端query buffer大小

每个Client都有一个query buffer(查询缓存区或输入缓存区), 它用于保存客户端的发送命令。

客户端query buffer大小不能超过该项配置的值。

clien-query-buffer-limit 1gb

18.11 Redis协议批量请求单个字符串限制

proto-max-bulk-len 512mb

proto-max-bulk-len默认值是512mb。

18.12 执行任务频率

redis会调用一个内部函数来执行许多后台任务,比如在超时时关闭客户端连接,清除从未被请求过的过期key等。

redis会根据指定的hz值检查要执行的任务。它范围在1到500之间,但是不超过100。

大部分情况下应该使用缺省值10,只有在需要非常低延迟的环境中才应该将值提高到100。

hz 10

18.13 动态任务执行频率

dynamic-hz yes

根据客户端连接的数量动态的调整hz的值。

当有更多的客户端连接时,会临时以hz设置基准提高该hz的值。默认开启。

18.14 AOF重写时执行fsync策略

aof-rewrite-incremental-fsync yes

当redis重写AOF文件时,如果启用了以下选项,则该文件将每生成32MB的数据进行fsync同步。

这对于以更增量的方式将文件提交到磁盘并避免较大的延迟峰值非常有用。

18.15 保存RDB文件时执行fsync策略

rdb-save-incremental-fsync yes

当redis保存RDB文件时,如果启用以下选项,则每生成32 MB的数据,文件就会同步一次。

这对于以更增量的方式将文件提交到磁盘并避免较大的延迟峰值非常有用。

18.16 LFU设置

lfu-log-factor 10

lfu-decay-time 1

默认的lfu对数因子为10。这是一个表,说明频率计数器如何随着不同对数因子的不同访问次数而变化:

通过运行以下命令获得上表:

redis-benchmark -n 1000000 incr foo

redis-cli object freq foo

计数器初始值为5,以便给新对象累积命中的机会。

计数器衰减时间是密钥计数器除以2(如果其值小于10,则递减)所必须经过的时间(以分钟为单位)。

lfu衰减时间的默认值为1。特殊值0表示每次扫描计数器时,计数器都会衰减。

19.碎片整理

默认情况下,此功能被禁用,并且仅当编译redis以使用随redis源代码提供的emalloc副本时。

此功能才有效。这是Linux版本的默认设置。

如果没有碎片问题,则无需启用此功能。

一旦遇到内存碎片,可以在需要时使用命令CONFIG SET activedefrag yes启用此功能。

配置参数能够微调碎片整理过程的行为。如果你不确定它们是什么意思,最好不要改变默认值

19.1 开启活动碎片整理

activedefrag no

19.2 启动活动碎片整理的最小内存碎片阈值

active-defrag-ignore-bytes 100mb

19.3 启动活动碎片整理的最小内存碎片百分比

active-defrag-threshold-lower 10

19.4 尝试释放的最大百分比

active-defrag-threshold-upper 100

19.5 最少CPU使用率

active-defrag-cycle-min 1

19.6 最大CPU使用率

active-defrag-cycle-max 25

19.7 最大扫描量

#将从中处理的set/hash/zset/list字段的最大数量

active-defrag-max-scan-fields 1000

19.8 是否使用后台线程

jemalloc-bg-thread yes

20.在redis-cli客户端中查看Redis的配置信息

语法格式:

redis 127.0.0.1:6379> CONFIG GET 配置名称

例:获取日志等级的配置

redis 127.0.0.1:6379> CONFIG GET loglevel

输出结果:

1) "loglevel"

2) "notice"

通过*可以查案所有配置项

redis 127.0.0.1:6379> CONFIG GET *

1) "dbfilename"

2) "dump.rdb"

3) "requirepass"

4) "masterauth"

5) "cluster-announce-ip"

6) "unixsocket"

7) "logfile"

8) "pidfile"

9) "slave-announce-ip"

10) "replica-announce-ip&

21.其他配置选项

21.1 根据设定秒数与写入操作保存数据

Redis将在给定的秒数和给定的对DB的写入操作数都发生时保存DB

3600秒后,如果至少更换了一个key

save 3600 1

300秒后,如果至少更换了10个key

save 300 10

30秒后 ,如果至少更换了10000个key

save 60 10000

21.2 stop-writes-on-bgsave-error

默认情况下,如果启用RDB快照,Redis将停止接受写入(至少一个保存点)和最新的后台保存失败。这会让用户意识到(以一种强硬的方式)数据没有正确地保存在磁盘上,否则很可能没有人注意到,会发生一些灾难。如果后台保存过程再次开始工作,Redis将自动允许再次写入。但是,如果您设置了正确的Redis服务器监控和持久性,您可能希望禁用此功能,以便Redis即使磁盘、权限等出现问题,也可以继续照常工作。

stop-writes-on-bgsave-error yes

21.3 rdbcompression

转储.rdb数据库时使用LZF压缩字符串对象?默认情况下,压缩是启用的,因为它几乎总是成功的。如果您想在保存子项中保存一些CPU,请将其设置为“否”,但如果您有可压缩的值或键,则数据集可能会更大。

rdbcompression yes

21.4 rdbchecksum

由于RDB的版本5,CRC64校验和放在文件末尾。

#这使得格式更耐损坏,但在保存和加载RDB文件时,性能会受到影响(约10%),因此您可以禁用它以获得最大性能。在禁用校验和的情况下创建的RDB文件的校验和为零,这将告诉加载代码跳过检查。yes表示不禁用

rdbchecksum yes

21.5 设置转储的DB文件名转储的DB文件名

dbfilename dump.rdb

21.6 replica-serve-stale-data

当复制副本失去与主机的连接时,或者当复制副本仍在进行中,复制副本可以以两种不同的方式运行:1) 如果复制副本服务过时数据设置为“yes”(默认值),则复制副本仍将回复客户端请求,可能会使用过期数据,或者如果这是第一次同步,则数据集可能为空。

2)如果复制副本服务过时数据设置为“no”,则复制副本将对所有命令回复错误“SYNC with master in progress”,以下命令除外:信息、复制、AUTH、PING、关机、复制、角色、配置、订阅、未订阅、PSUBSCRIBE、PUNSUBSCRIBE、PUNSUBSCRIBE、发布、PUBSUB、命令、POST、主机和最新。

replica-serve-stale-data yes

21.7replica-read-only

您可以将复制副本实例配置为接受或不接受写入。写入反对副本实例可能有助于存储一些临时数据(因为在与主副本重新同步后,写入副本上的数据将很容易被删除),但如果客户端由于配置错误而写入副本,也可能会导致问题, 由于Redis 2.6默认情况下副本是只读的。注意:只读副本的设计不会暴露给internet上不受信任的客户端。它只是一个防止误用实例的保护层。默认情况下,只读副本仍会导出所有管理命令,如CONFIG、DEBUG等。在一定程度上,您可以使用“重命名命令”来隐藏所有管理/危险命令,从而提高只读副本的安全性。

replica-read-only yes

21.8 repl-diskless-syn

复制SYNC策略:磁盘或套接字。新复制副本和重新连接无法继续复制过程只是接收差异,需要执行所谓的“完全同步”。RDB文件从主机传输到副本。传输可以通过两种不同的方式进行:

1) 磁盘备份:Redis主机创建一个新进程,将RDB文件写入磁盘。稍后,文件由父进程以增量方式传输到副本。

2) 无磁盘:Redis主机创建了一个新的进程,它可以直接将RDB文件写入副本套接字,而不需要接触磁盘。通过磁盘备份复制,在生成RDB文件时,只要生成RDB的当前子级完成其工作,就可以将更多副本排队并与RDB文件一起使用。使用无盘复制,一旦传输开始,到达的新副本将被排队,并且新的传输将在当前传输终止时开始。当使用无盘复制时,主机在开始传输之前等待一段可配置的时间(以秒为单位),希望多个副本能够到达并并行传输。使用慢速磁盘和快速(大带宽)网络,无盘复制工作得更好 yes表示使用自盘备份

repl-diskless-sync no

21.9 repl-diskless-sync-dela

启用无盘复制时,可以配置延迟服务器等待以生成通过套接字传输RDB的子级复制副本。这一点很重要,因为一旦转移开始,就无法服务 新副本到达,将排队等待下一次RDB传输,因此服务器等待一段时间,以便让更多副本到达。延迟以秒为单位指定,默认情况下为5秒。禁用它完全设置为0秒,传输将尽快开始。

repl-diskless-sync-delay 5

21.10 repl-disable-tcp-nodelay

在SYNC之后禁用复制套接字上的TCP_NODELAY?如果选择“是”,Redis将使用较少数量的TCP数据包将数据发送到副本的带宽更少。但这会增加延迟数据将显示在副本侧,最长为40毫秒使用默认配置的Linux内核。如果选择“否”,数据出现在副本侧的延迟将减少,但复制将使用更多的带宽。默认情况下,我们优化低延迟,但在非常高的流量条件下或者当主副本和副本相隔很远时,将此设置为“是”可能是一个好主意。默认为no,降低延迟

repl-disable-tcp-nodelay no

21.11 replica-priority 设置副本优先级

# 设置副本优先级, 副本优先级是Redis在INFO输出中发布的整数。Redis Sentinel使用它来选择要升级的副本如果主机不再正常工作,则将其转换为主机。优先级低的副本被认为更适合升级,因此例如,如果有三个优先级为10、100、25 Sentinel的副本将选择优先级最低的10。

但是,特殊优先级0将复制副本标记为无法执行 因此,Redis Sentinel永远不会选择优先级为0的副本进行升级。

replica-priority 100

21.12

Redis有两个基元来删除键。一种叫做DEL,是对对象的阻止删除。这意味着服务器停止处理新命令,以便以同步方式回收与对象相关联的所有内存。如果删除的键与一个小对象关联,则执行DEL命令所需的时间非常短,与Redis中的大多数其他O(1)或O(log_N)命令相当。

但是,如果密钥与包含数百万个元素的聚合值相关联,则服务器可以阻塞很长时间(甚至几秒)以完成操作。

上述原因,Redis还提供了非阻塞删除原语

例如UNLINK(非阻塞DEL)和FLUSHOLL和FLUSHDB命令的ASYNC选项。这些命令在恒定时间内执行。另一个线程将以尽可能快的速度递增释放背景中的对象。

FLUSHOLL和FLUSHDB的DEL、UNLINK和ASYNC选项由用户控制。这取决于应用程序的设计,以了解何时使用其中之一是一个好主意。

然而,作为其他操作的副作用,Redis服务器有时必须删除密钥或刷新整个数据库。具体来说,在以下情况下,Redis会独立于用户调用删除对象:

1) 在驱逐时,由于maxmemory和maxmemory策略配置,为了在不超过指定内存限制的情况下为新数据腾出空间。

2) 由于过期:必须从内存中删除具有相关生存时间的密钥(请参阅expire命令)。

3) 因为在可能已经存在的键上存储数据的命令的副作用。例如,RENAME命令可以在替换为另一个密钥内容时删除旧密钥内容。类似地,SUNIONSTORE或SORT with STORE选项可以删除现有密钥。SET命令它本身会删除指定键的任何旧内容,以便用指定的字符串替换它。

4) 在复制期间,当复制副本与执行完全重新同步时 整个数据库的内容被删除,以便加载刚刚传输的RDB文件。

在上述所有情况下,默认情况是以阻塞方式删除对象,就像调用了DEL一样。但是,您可以专门配置每种情况,以便以非阻塞方式释放内存

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

replica-lazy-flush no

Redis有两个基元来删除键。一种叫做DEL,是对对象的阻止删除。这意味着服务器停止处理新命令,以便以同步方式回收与对象相关联的所有内存。如果删除的键与一个小对象关联,则执行DEL命令所需的时间非常短,与Redis中的大多数其他O(1)或O(log_N)命令相当。

但是,如果密钥与包含数百万个元素的聚合值相关联,则服务器可以阻塞很长时间(甚至几秒)以完成操作。

出于上述原因,Redis还提供了非阻塞删除原语

例如UNLINK(非阻塞DEL)和FLUSHOLL和FLUSHDB命令的ASYNC选项。这些命令在恒定时间内执行。另一个线程将以尽可能快的速度递增释放背景中的对象。

FLUSHOLL和FLUSHDB的DEL、UNLINK和ASYNC选项由用户控制。这取决于应用程序的设计,以了解何时使用其中之一是一个好主意。

然而,作为其他操作的副作用,Redis服务器有时必须删除密钥或刷新整个数据库。具体来说,在以下情况下,Redis会独立于用户调用删除对象:

1) 在驱逐时,由于maxmemory和maxmemory策略配置,为了在不超过指定内存限制的情况下为新数据腾出空间。

2) 由于过期:必须从内存中删除具有相关生存时间的密钥(请参阅expire命令)。

3) 因为在可能已经存在的键上存储数据的命令的副作用。例如,RENAME命令可以在替换为另一个密钥内容时删除旧密钥内容。类似地,SUNIONSTORE

或SORT with STORE选项可以删除现有密钥。SET命令

它本身会删除指定键的任何旧内容,以便用指定的字符串替换它。

4) 在复制期间,当复制副本与执行完全重新同步时

整个数据库的内容被删除,以便加载刚刚传输的RDB文件。

在上述所有情况下,默认情况是以阻塞方式删除对象,就像调用了DEL一样。但是,您可以专门配置每种情况,以便以非阻塞方式释放内存

lazyfree-lazy-eviction no

lazyfree-lazy-expire no

lazyfree-lazy-server-del no

replica-lazy-flush no


版权声明:本文为CSDN博主「风在枝头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zld0000/article/details/129519290

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表