*Redis MSETEX 命令

MSETEX 原子性地设置多个 key-value 对,并同时设置所有键的过期时间(秒)。


*语法

MSETEX seconds key value [key value ...]

*参数说明

参数 类型 必填 说明
seconds Integer 所有键的过期时间(秒)
key String 键名
value String / Bytes 键值

*返回值

  • OK:全部设置成功
  • Error:参数错误(如参数数量不成对)

*时间复杂度

O(N),N 为设置的 key-value 对数量


*示例

*基本用法

> MSETEX 3600 key1 "value1" key2 "value2"
OK
> TTL key1
(integer) 3598
> TTL key2
(integer) 3597

*批量设置会话

> MSETEX 1800 session:user:1001 "active" session:user:1002 "active" session:user:1003 "active"
OK

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不成对(缺少 key 或 value) 确保每个 key 都有对应的 value
ERR value is not an integer or out of range seconds 不是整数 传入有效的整数秒数

*最佳实践

  • 适合批量设置具有相同过期时间的缓存数据
  • 原子操作,所有键同时设置,避免部分成功
  • 注意 key 数量不宜过多,建议一次不超过 1000 个
  • 大 value 超过 1MB 时考虑拆分
  • 可替代多次 SET + EXPIRE 调用,减少网络往返

*FAQ

Q1: MSETEX 和 MSET 有什么区别? A: MSETEX 额外设置所有键的统一过期时间,MSET 不设置过期。

Q2: 如果某个 key 已存在会怎样? A: 会被覆盖,无论类型,且应用新的过期时间。

Q3: 所有键必须使用相同的过期时间吗? A: 是的,MSETEX 只接受一个 seconds 参数。不同过期时间需分别使用 SET EX。

Q4: 支持毫秒级过期吗? A: MSETEX 只支持秒。需要毫秒可用 PSETEX(单个键)或分别设置 PX。