*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。