全部产品
Search
文档中心

云原生内存数据库Tair:Tair配置参数列表

更新时间:Apr 18, 2024

您可以根据业务场景对云原生内存数据库Tair实例的参数进行调优与自定义配置,已提升Tair实例的性能与安全性。本文介绍各参数的详细说明。

注意事项

  • 若设置参数时报错Parameter is not supported for current version,请升级小版本后重试,具体操作请参见升级小版本

  • 部分参数在提交修改后会自动重启实例(重启过程中实例会发生秒级闪断)。在设置参数时,您需要关注目标参数的重启生效列,更多信息,请参见设置实例参数

重要

不同的引擎版本和架构支持的参数有所区别,本文仅包含Tair实例的参数(包含内存型持久内存型磁盘型),关于Redis社区版实例的参数请参见Redis参数支持

支持的参数及说明

为便于阅读和内容表达,本文的表格约定使用下述注释:

  • ✔️表示在该大版本或架构下,支持该参数。

  • ❌表示在该大版本或架构下,不支持该参数。

说明
  • 为最大程度保障Tair实例的稳定运行,目前仅开放部分参数,若某个参数未在本文中列出,即不支持设置该参数。

  • 关于架构的详细介绍,请参见标准架构集群架构读写分离架构

内存型与持久内存型

参数

说明

实例系列与架构

内存型(兼容Redis 5.0、6.0版本)

持久内存型(兼容Redis 6.0版本)

#no_loose_check-whitelist-always

开启专有网络免密后,是否检查客户端的IP在Tair白名单中。可选值:

  • yes:开启检查。在开启免密访问后,仍需将同一专有网络的客户端IP地址添加至Tair实例的白名单中,才可通过该客户端连接Tair实例。

    若开启免密,但未正确设置白名单时,连接的报错示例:(error) ERR illegal address

  • no:默认值,不检查。在开启免密访问后,无需将同一专有网络的客户端IP地址添加至Tair实例的白名单中,可通过该客户端连接Tair实例。

说明

本地盘版实例支持设置该参数。

标准️️✔️

集群✔️

读写分离✔️

#no_loose_disabled-commands

设置禁用命令,可根据业务需求禁用某些高危命令或高时间复杂度的命令,例如FLUSHALLFLUSHDBKEYSHGETALLEVALEVALSHASCRIPT等。

说明
  • 命令以小写字母的形式填写,多个命令间使用英文逗号(,)分隔。

  • 禁用FLUSHALL命令不会影响控制台中清除数据功能。

  • 为保障Tair实例稳定、高效率地运行,部分命令不支持被禁用,例如CONFIG等,具体命令请参见不支持禁用的命令

标准️️✔️

集群✔️

读写分离✔️

标准️️✔️

集群✔️

读写分离✔️

#no_loose_lua-strict-mode

是否开启Lua脚本严格模式。开启后标准架构实例可以类似集群架构,要求Lua脚本中的数据Key必须由KEYS数组来传递(不能在Lua脚本中动态生成)。开启后Lua脚本可以进行多线程并行加速,提升数倍的性能。可选值:

  • no:默认值,不开启。

  • yes:开启(推荐),使用该功能还需开启txn-isolation-lock参数,关于Lua脚本规范请参见Lua脚本使用规范

说明

本参数仅在Tair内存型(兼容Redis 6.0版本)和磁盘型中支持。

标准️️✔️

集群❌

读写分离❌️

#no_loose_publish-no-wait-result

开启该参数后,会提升Tair实例执行PUBLISH命令的吞吐性能,但PUBLISH命令返回值总是0。

  • no:默认值,不开启。

  • yes:开启。

说明

本参数仅在Tair内存型(兼容Redis 6.0版本)中支持。

标准️️✔️

集群✔️

读写分离✔️

sentinel_compat_enable

在集群架构代理模式或读写分离架构,开启或关闭哨兵(Sentinel)兼容模式,可选值:

  • 1:开启。

  • 0:默认值,关闭。

标准️️❌

集群✔️

读写分离✔️

标准️️❌

集群✔️

读写分离✔️

#no_loose_sentinel-enabled

在标准架构或集群架构直连模式,开启或关闭哨兵(Sentinel)兼容模式,可选值:

  • yes:开启。

  • no:默认值,关闭。

标准️️✔️

集群✔️

读写分离❌

标准️️✔️

集群✔️

读写分离❌

#no_loose_ssl-enabled

开启或关闭SSL加密连接,可选值:

  • yes:开启。

  • no:默认值,关闭。

说明

本地盘版实例支持设置该参数

标准️️❌

集群✔️

读写分离✔️

#no_loose_statistics-cmds

本组参数为云原生内存数据库Tair可观测性能力的一部分,设置后还需要配合审计日志才会生效,统计周期为5秒/次。

  • #no_loose_statistics-cmds:设置要统计的命令,统计这些命令的来源IP地址和频率,默认为空,即不统计。多个命令以英文逗号(,)分隔。

  • #no_loose_statistics-ip-enable:设置是否开启IP地址统计,即记录建连的IP地址,可选值为yes(开启),no(默认值,关闭)。

  • #no_loose_statistics-keys:设置要统计的Key,统计这些Key的来源IP地址和频率,默认为空,即不统计。多个Key以英文逗号(,)分隔。

说明
  • 为避免影响性能,#no_loose_statistics-cmds#no_loose_statistics-keys参数中设置的值不宜设置过多,并确保仅在故障排查或运维需要时开启。

  • 从您可以通过日志服务控制台下载审计日志(下载方法参见下载审计日志),然后通过关键字过滤所需信息:

    • type值为7:表示IP地址的QPS统计信息。

    • type值为8:表示IP地址建连统计信息。

    • type值为9:表示Key统计信息。

    • type值为10:表示命令统计信息。

标准️️❌

集群✔️

读写分离✔️

#no_loose_statistics-ip-enable

标准️️❌

集群✔️

读写分离✔️

#no_loose_statistics-keys

标准️️❌

集群✔️

读写分离✔️

#no_loose_tls-min-version

设置实例支持的TLS最低版本,可选值:

  • TLSv1,默认值。

  • TLSv1.1

  • TLSv1.2

标准️️❌

集群✔️

读写分离✔️

active-expire-effort

设置清理过期Key任务的主动性。增加该值可以使引擎更加主动地清理已过期的Key,减少已过期Key占用的内存空间,但同时会使CPU使用率与延迟上升。取值范围为1~10,默认值为1。

说明

本参数仅在Tair持久内存型支持。

标准️️✔️

集群✔️️️️️

读写分离✔️

appendfsync

AOF(AppendOnly File)持久化功能的fsync频率,仅在appendonly参数开启时生效,默认为everysec,不支持修改。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

appendonly

开启或关闭主节点的AOF持久化功能,可选值:

  • yes:默认值,开启AOF持久化。

  • no:关闭AOF持久化。

    说明

    RDB(Redis database)持久化功能默认为每天一次,更多信息请参见自动或手动备份

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

client-output-buffer-limit pubsub

限制对发布订阅客户端的输出缓冲,参数值格式为<hard limit> <soft limit> <soft seconds>,默认值为33554432 8388608 60

  • <hard limit>:当某客户端的输出缓冲区占用内存达到或超过hard limit的限制时,断开该客户端的连接。hard limit值的单位为Byte。

  • <soft limit><soft seconds>:当某客户端的输出缓冲区占用内存达到或超过soft limit的限制,且该状态持续时间大于等于soft seconds限定的秒数,断开该客户端的连接。soft limit值的单位为Byte,soft seconds值的单位为秒。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

cluster_compat_enable

在集群架构代理模式或读写分离架构,开启或关闭原生Redis cluster语法兼容,可选值:

  • 0:关闭。

  • 1:默认值,开启。

标准️️❌

集群✔️

读写分离✔️

标准️️❌

集群✔️

读写分离✔️

dynamic-hz

开启或关闭动态hz,可选值:

  • yes:默认值,开启。

  • no:关闭。

标准️️✔️

集群✔️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

hash-max-ziplist-entries

哈希对象同时满足以下两个条件时, 使用ziplist编码。

  • 哈希对象保存的键值对数量小于hash-max-ziplist-entries的值。

  • 哈希对象保存的所有键值对的键和值的字符串长度的字节数都小于hash-max-ziplist-value的值。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

hash-max-ziplist-value

hz

设置Tair后台任务执行频率,例如清除过期键任务。取值范围为1~500,默认值为10,即每秒执行10次。

说明

该值越大,CPU资源消耗越多,但在过期键较多的情况下清理频率也更高,同时Tair能够更精确地处理超时。建议取值不要超过100。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

lazyfree-lazy-eviction

是否开启基于lazyfree的驱逐功能,可选值:

  • yes:开启。

  • no:默认值,不开启。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

lazyfree-lazy-expire

是否开启基于lazyfree的过期Key删除功能,可选值:

  • yes:默认值,开启。

  • no:不开启。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

lazyfree-lazy-server-del

DEL命令是否基于lazyfree异步删除数据,可选值:

  • yes:默认值,开启。

  • no:不开启。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

lazyfree-lazy-user-del

执行DEL命令时是否基于lazyfree异步删除数据,可选值:

  • yes:默认值,开启。

  • no:不开启。

标准️️✔️

集群✔️️️️️

读写分离✔️

list-compress-depth

列表中两端不被压缩的节点个数,取值范围0~65535。

  • 0:默认值,表示都不压缩。

  • 1~65535:表示list两端各有1~65535个节点不压缩,中间的节点压缩。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

list-max-ziplist-entries

链表对象同时满足以下两个条件时, 使用ziplist编码。

  • 链表集合对象保存的元素数量小于list-max-ziplist-entries的值。

  • 链表对象保存的所有元素的字符串长度的字节数都小于list-max-ziplist-value的值。

list-max-ziplist-value

list-max-ziplist-size

  • 取正值表示按照数据项个数来限定每个quicklist节点上的ziplist长度。例如,当该参数配置为5时,每个quicklist节点的ziplist最多包含5个数据项。

  • 取负值表示按照占用字节数来限定每个quicklist节点上的ziplist长度,可选值:

    • -5:每个quicklist节点上的ziplist大小不能超过64 Kb。

    • -4:每个quicklist节点上的ziplist大小不能超过32 Kb。

    • -3:每个quicklist节点上的ziplist大小不能超过16 Kb。

    • -2:默认值,每个quicklist节点上的ziplist大小不能超过8 Kb。

    • -1:每个quicklist节点上的ziplist大小不能超过4 Kb。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

maxmemory-policy

数据逐出策略。当Tair实例内存不足,使用量达到Maxmemory时,会触发数据逐出,您可以选择不同的数据逐出策略。取值如下:

说明
  • TairMaxmemory默认为实例的规格大小,且不支持修改。例如购买的实例规格为2 GB,则该实例的Maxmemory为2 GB。

  • 在集群架构中,当单个数据节点达到Maxmemory时(即使此时的总内存使用率未到达上限),该数据节点也会触发数据逐出。您需要处理数据倾斜的问题,更多信息请参见如何处理Tair集群数据倾斜

  • LRU表示最近最少使用的。LFU表示最不常用的。LRU、LFU和volatile-ttl都是使用近似随机算法实现的。

  • volatile-lru(默认):从已设置过期时间(Expire)的Key中,删除最近最少使用的Key(LRU算法),且不会考虑Key是否已经过期。

  • volatile-lfu:从已设置过期时间(Expire)的Key中,删除最不常用的Key(LFU算法)。

  • volatile-random:从已设置过期时间(Expire)的Key中,随机删除一些Key。

  • volatile-ttl:从已设置过期时间(Expire)的Key中,根据存活时间(TTL)从小到大排序进行删除。

  • allkeys-lru:从所有Key中,删除最近最少使用的Key(LRU算法)。

  • allkeys-lfu:从所有Key中,删除最不常用的Key(LFU算法)。

  • allkeys-random:从所有Key中,随机删除一些Key。

  • noeviction:不删除任何Key,当内存达到上限时,将无法写入新数据,数据库会返回错误信息。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

max_session_processing

单个连接允许堆积的最大请求数。代理节点转发客户端的请求给数据节点,但是未收到数据节点的回复,此时该请求即处于堆积状态。该参数主要用于限制代理节点前后端处理能力差异导致的请求堆积,避免内存上涨的问题。

标准️️❌

集群✔️

读写分离✔️

notify-keyspace-events

notify-keyspace-events的参数值可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知。该参数将针对整个实例(所有DB)启用通知,启用后会额外消耗CPU,更多信息请参见Redis keyspace notifications

  • K:键空间通知,所有通知以__keyspace@<db>__为前缀。

  • E:键事件通知,所有通知以__keyevent@<db>__为前缀。

  • gDELEXPIRERENAME等类型无关的通用命令的通知。

  • $:字符串命令的通知,会发送关于字符串的创建、修改、删除等操作的通知。

  • l:列表命令的通知。

  • s:集合命令的通知。

  • h:哈希命令的通知。

  • z:有序集合命令的通知。

  • x:过期事件,不一定在键过期时发送,而是在过期键被删除时发送。

  • e:驱逐(evict)事件,每当有键因为maxmemory政策而被删除时发送。

  • A:参数g$lshzxe的别名,表示监听上述所有事件,设置示例为AKE

重要

输入的参数中至少包含KE, 否则不会有任何通知被分发。

例如您希望订阅过期事件,您可以在参数设置中将该参数设置为Ex。设置参数后,在客户端执行对应的订阅命令:PSUBSCRIBE __keyevent@0__*,表示订阅DB0的键事件通知。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

pena_rename_move_compatible_enabled

是否启用MOVE和RENAME系列命令兼容模式,相关命令的时间复杂度为O(n),不同于原生Redis的O(1),若执行对象为大Key则耗时会较长,可选值:

  • no:默认值,不开启。

  • yes:开启,可执行上述相关命令,语法与原生Redis相同。

说明

本参数仅在Tair持久内存型1.2.4及以上版本中支持。

标准️️✔️

集群✔️️️️️

读写分离✔️

ptod_enabled

在集群架构代理模式或读写分离架构,是否将客户端的IP地址通过代理节点透传到数据节点,可选值:

  • 0:默认值,不透传客户端的IP地址。

  • 1:透传客户端IP地址。

标准️️❌

集群✔️

读写分离✔️

标准️️❌

集群✔️

读写分离✔️

query_cache_enabled

是否启用代理查询缓存功能,具体使用方法,请参见通过Proxy Query Cache优化热点Key问题,该参数取值:

  • 0:不启用,默认值。

  • 1:启用。

重要

由于代理节点中缓存的热点Key的键值对信息在有效时间内不会更新,在启用该功能前,您需要确认业务上是否允许数据在缓存有效时间内的 最终一致性

标准️️❌

集群✔️

读写分离❌

query_cache_expire

缓存数据的有效时间,单位为毫秒,取值:100~60000,默认值为1000

  • 若缓存的数据在有效期内被修改,修改后的数据不会同步至缓存中,即相同的读请求会获取到缓存中的脏数据,直至缓存失效。

  • 您需要根据具体的业务场景和对脏数据的容忍度谨慎评估该参数的值,该值设置过小会降低缓存的命中率,设置过大会导致客户端在较长的时间内读取到的是脏数据。

标准️️❌

集群✔️

读写分离❌

query_cache_mode

代理查询缓存的工作模式,取值:

  • 0:只缓存数据分片推送的热点Key,默认值。

  • 1:缓存所有Key并进行根据最近最少使用算法LRU(Least Recently Used)进行淘汰。

重要

由于代理节点的缓存空间有限(代理节点每个线程100 MB),若设置该参数的值为1,代理节点将按照LRU算法淘汰Key,可能降低缓存的命中率,从而引起整体性能的下降。

标准️️❌

集群✔️

读写分离❌

readonly_lua_route_ronode_enable

开启或关闭只读副本的Lua执行模式,可选值:

  • 0:默认值,关闭Lua执行模式,只读副本不支持Lua,Lua命令会由主节点处理。

  • 1:开启Lua执行模式,仅包含读操作的Lua会被转发到只读副本处理。

标准️️❌

集群❌️

读写分离✔️

read_request_only_ronode_whenrwsplit_enable

开启或关闭只读账号请求定向转发,可选值:

  • 0:默认值,关闭定向转发,只读账号的请求将按照权重分配到各节点,包括主节点。

  • 1:开启定向转发,只读账号的请求将定向转发到只读副本,不会转发到主节点。

标准️️❌

集群✔️️️️️

读写分离✔️

rt_threshold_ms

代理服务器中的慢日志阈值,单位为毫秒(ms)。若代理服务器处理一个请求的时间超过该阈值,则会生成一条慢日志。

说明

计时方式:从代理服务器向数据节点发出请求开始,到代理服务器收到响应结束。

标准️️❌

集群✔️️️️️

读写分离✔️

标准️️❌

集群✔️️️️️

读写分离✔️

script_check_enable

在集群架构代理模式或读写分离架构,Proxy对Lua脚本的检测项,具体检查项请参见Proxy对Lua的检测项,可选值:

  • 0:不检查。若执行Lua的Tair账号权限为只读时, 仍会开启检查。

  • 1:默认值,检查。

标准️️❌

集群✔️️️️️

读写分离✔️

set-max-intset-entries

当Set集合内的数据符合以下条件时,会使用intset编码。

  • 当集合内所有数据都是字符对象。

  • 都是基数为10的整数,范围为64位有符号整数。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

slowlog-log-slower-than

慢日志的阈值,慢日志将记录执行时间超过该阈值的命令。单位为ms,默认值为20000(即20毫秒),取值范围10000~10000000。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

slowlog-max-len

慢日志最多保存记录条数,取值范围100~10000,默认值为1024

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

stream-node-max-bytes

Stream中每个宏节点(Macro Node)能够占用的最大内存,取值范围:0~999,999,999,999,999

说明

0表示无限制。

标准️️✔️

集群✔️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

stream-node-max-entries

Stream中每个宏节点中可存储条目的最大数量,取值范围:0~999,999,999,999,999

说明

0表示无限制。

标准️️✔️

集群✔️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

timeout

当客户端的空闲时间达到指定秒数后,Tair会关闭该连接,取值为[0,100000],默认为0(表示不断开任何连接),单位为秒。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

transfer_subscrible_to_psubscrible_enable

开启或关闭SUBSCRIBEPSUBSCRIBE功能,可选值:

  • 0:默认值,表示关闭该功能,二者不转换。

  • 1:开启该功能,代理节点会将SUBSCRIBE转换成PSUBSCRIBE处理。

    说明

    当在Lua中使用了PUB或SUB类命令,导致在订阅的通道无法收到通知时,可以开启该功能。

标准️️❌

集群✔️️️️️

读写分离✔️

zset-max-ziplist-entries

排序集合对象同时满足以下两个条件时, 使用ziplist编码。

  • 排序集合对象保存的所有键值对的键和值的字符串长度的字节数都小于zset-max-ziplist-value的值。

  • 排序集合对象保存的键值对数量小于zset-max-ziplist-entries的值。

标准️️✔️

集群✔️️️️️

读写分离✔️

标准️️✔️

集群✔️️️️️

读写分离✔️

zset-max-ziplist-value

磁盘型

参数

说明

磁盘型(兼容Redis 6.0)

#no_loose_disabled-commands

设置禁用命令,可根据业务需求禁用某些高危命令或高时间复杂度的命令,例如FLUSHALLFLUSHDBKEYSHGETALLEVALEVALSHASCRIPT等。

说明
  • 命令以小写字母的形式填写,多个命令间使用英文逗号(,)分隔。

  • 禁用FLUSHALL命令不会影响控制台中清除数据功能。

  • 为保障Tair实例稳定、高效率地运行,部分命令不支持被禁用,例如CONFIG等,具体命令请参见不支持禁用的命令

标准✔️️

#no_loose_lua-strict-mode

是否开启Lua脚本严格模式。开启后标准架构实例可以类似集群架构,要求Lua脚本中的数据Key必须由KEYS数组来传递(不能在Lua脚本中动态生成)。开启后Lua脚本可以进行多线程并行加速,提升数倍的性能。可选值:

  • no:默认值,不开启。

  • yes:开启(推荐),使用该功能还需开启txn-isolation-lock参数,关于Lua脚本规范请参见Lua脚本使用规范

标准✔️️

latency-monitor-threshold

设置延迟阈值,超过阈值时间的事件会被记录延迟事件,取值范围:0 ~ 10000000,单位为毫秒。

标准✔️

max-write-batch-size

表示执行命令的过程中,在内存中生成磁盘存储格式数据的大小限制,单位为Byte,取值范围:0-1073741824(1 GB),默认为0,表示不设上限。

说明

若数据分布和请求容易生成较大的中间数据,推荐设置成1073741824(即1 GB),防止内存溢出。

标准✔️

slowlog-log-slower-than

慢日志的阈值,慢日志将记录执行时间超过该阈值的命令。单位为ms,默认值为20000(即20毫秒),取值范围10000~10000000。

标准✔️

slowlog-max-len

慢日志最多保存记录条数,取值范围:100~10000,默认值为1024

标准✔️️

scan-background-interval-ms

实例后台主动对Key进行轮询,判断数据的TTL等信息并进行垃圾回收。

  • scan-background-interval-ms:轮询时间间隔,单位为ms,默认为10000(即10s)。

  • batch-scan-count:每次轮询数量,默认为200000,表示默认查询20万个Key。

说明

若您对后台垃圾回收要求较高,您可以适当调小scan-background-interval-ms值。但加大轮询频率也会占用更多的磁盘带宽,为不影响用户请求,不建议大幅提升轮询频率。

标准✔️️

batch-scan-count

标准✔️️

txn-isolation-lock

是否开启事务锁,开启后允许磁盘型实例执行MULTI、EXEC和Lua脚本相关命令,事务锁功能可能会导致性能下降10%,可选值:

  • no:默认值,不开启。

  • yes:开启,可执行上述相关命令,语法与原生Redis相同。

标准✔️️