tracking-table-max-keys
tracking-table-max-keys
是 Redis 中的一个配置选项,它与 Key Tracking 功能有关。Key Tracking 是 Redis 6.0 引入的一项功能,用于追踪哪些键在被客户端操作时发生了变化。
tracking-table-max-keys
的作用:该配置项用于限制 Redis 在执行 key tracking 时,最多可以跟踪的键的数量。如果设置的值过小,Redis 会停止跟踪新的键,并丢弃旧的键。相反,如果设置得较大,则可能会占用更多的内存。
详细解释:
Key Tracking 是 Redis 中用于监控键变更的一种机制,可以帮助开发者知道哪些键被修改、删除或访问。通常,key tracking 被用于一些应用场景,比如 Redis Streams、Redis Pub/Sub,或者为了对 Redis 数据库进行某种类型的变更追踪。
tracking-table-max-keys
控制的是最大可以追踪的键数。Redis 会为每个追踪的键分配内存,如果有太多的键被追踪,它可能会消耗过多的内存,影响性能。因此,Redis 会根据此配置项来限制最多可以追踪的键的数量。配置项的作用:
如果设置
tracking-table-max-keys
为一个较小的值,Redis 将只会追踪前 N 个键。当新的键被追踪时,Redis 会丢弃旧的键。这个参数对于内存管理非常重要,尤其是当 Redis 中的数据量很大时,设置适当的值可以避免内存过度消耗。如果设置为
0
,表示 不限制追踪的键的数量,这将允许 Redis 追踪无限数量的键。示例:
假设你在配置文件中设置了:
iniCopy Code
tracking-table-max-keys 10000
这表示 Redis 最多只能追踪 10,000 个键。如果有超过 10,000 个键需要被追踪,Redis 会停止追踪新的键,并丢弃最旧的那些键。
默认值:
- 默认情况下,Redis 将
tracking-table-max-keys
设置为 10000。使用场景:
高流量场景:如果你的 Redis 实例需要处理大量的键,并且启用了 key tracking,那么合理配置
tracking-table-max-keys
可以帮助你更好地管理内存使用。资源有限的环境:如果你在内存有限的环境中运行 Redis,适当地限制追踪的键数目可以避免 Redis 占用过多内存。
总结:
tracking-table-max-keys
用于限制 Redis 可以追踪的最大键数。- 通过合理配置该参数,可以在保证功能的同时,避免 Redis 使用过多内存。
- 适用于需要 key tracking 的场景,特别是在大数据量、高并发的环境中。
在
redis.conf
配置文件中,Redis 提供了多个配置选项来控制过期策略的行为,特别是在如何处理过期键、如何执行定期删除、如何调整内存管理等方面。下面是与过期策略相关的一些重要配置项:1.
timeout
这个配置项指定了客户端与 Redis 服务器之间的连接超时时间。如果超时,则会关闭连接。虽然它并不直接控制过期键,但它对客户端的连接生命周期有影响。
timeout 0
0
:表示不设置超时时间(即无连接超时)。- 默认值:
0
。2.
active-expire-effort
此配置项控制 Redis 在定期删除过期键时的“努力程度”,即 Redis 每次扫描的过期键数量。
active-expire-effort 1
- 默认值:
1
,表示每次扫描 1 个键。- 设置较高的值:增加扫描更多的键,Redis 更频繁地进行过期键的清理。
- 适用场景:如果需要更频繁地清理过期键,可以增加这个值。
3.
hz
hz
代表 Redis 事件处理的频率,控制 Redis 在后台执行任务的频率,包括定期删除过期键、清理内存等。更高的hz
值意味着 Redis 会更频繁地检查和处理过期键。hz 10
- 默认值:
10
,表示每秒 10 次事件处理。- 增大此值可以使 Redis 更快速地扫描过期键,但会消耗更多的 CPU 资源。
4.
maxmemory-policy
此配置项决定了在 Redis 内存达到上限时,Redis 应该如何处理键的删除。虽然它不专门用于过期策略,但当 Redis 达到最大内存限制时,它会根据该策略决定删除哪些键。
maxmemory-policy noeviction
noeviction
:当内存满时,拒绝写入操作(不删除任何键)。allkeys-lru
:在所有键中使用 LRU(最近最少使用)算法删除过期键或未使用的键。volatile-lru
:仅对设置了过期时间的键使用 LRU 策略。allkeys-random
:随机删除键。volatile-random
:随机删除设置了过期时间的键。volatile-ttl
:删除最接近过期的键。5.
notify-keyspace-events
此配置项控制键过期事件通知的发布。你可以启用键过期事件的通知机制,当键过期时,Redis 会通过发布/订阅的方式将事件通知给客户端。
notify-keyspace-events Ex
E
:表示发布事件。x
:表示键过期事件。
notify-keyspace-events
配置项允许你订阅键空间事件(如键的过期、删除等),例如,你可以设置Ex
来监听过期事件。
- 常用配置:
K
:键空间事件。E
:键事件。g
:所有过期事件。x
:表示过期键事件。例:
notify-keyspace-events "Ex"
会通知所有过期事件。6.
maxmemory
这个配置项决定了 Redis 在内存使用达到最大值时的行为。当 Redis 达到这个内存限制时,它会根据
maxmemory-policy
配置删除一些键。这个选项和过期键的处理无关,但当内存不足时,会影响 Redis 是否会删除过期键或使用其他回收策略。maxmemory 0
0
表示不设置内存限制。- 如果设置了内存限制,Redis 会根据
maxmemory-policy
删除键来释放内存。7.
appendonly
和appendfsync
这两个配置项控制 Redis 的 AOF(追加文件)持久化方式。虽然它们不直接控制过期键的删除,但它们会影响 Redis 数据的持久化过程,特别是当删除过期键时,它们会影响 AOF 文件的内容。
appendonly yes appendfsync everysec
appendonly
:启用 AOF 持久化。appendfsync
:控制 AOF 文件的同步策略。everysec
表示每秒一次同步。8.
save
这个配置项决定了 Redis 执行 RDB 快照的频率。虽然它不直接与过期策略有关,但在某些情况下,过期键的删除可能会影响 RDB 文件的内容。
save 900 1
- 表示每 900 秒(15 分钟)如果有 1 个键被修改,则进行一次 RDB 快照。
9.
databases
此配置项指定 Redis 支持的数据库数量。虽然它不直接影响过期策略,但它决定了 Redis 中可以存储多少个逻辑数据库。在每个数据库中,Redis 会独立管理其键的过期时间。
databases 16
- 默认值:
16
。10.
lua-time-limit
此配置项设置了 Redis 执行 Lua 脚本时的最大执行时间。虽然与过期策略无关,但如果在 Lua 脚本中处理过期键,这个设置会影响脚本的执行行为。
lua-time-limit 5000
- 默认值:
5000
毫秒,即 5 秒。总结:
Redis 的过期策略通过多个配置选项来控制,主要涉及如何定期删除过期键、控制内存回收策略、以及如何发布过期键事件等。关键配置项如
active-expire-effort
、hz
、maxmemory-policy
和notify-keyspace-events
等,帮助用户根据应用场景优化 Redis 的内存管理和过期策略。