45

在 redis 中有一个SETEX命令允许我设置一个过期的密钥,是否有这个命令的多集版本也有一个 TTL?

和命令都没有这样的选项MSETMSETNX

4

4 回答 4

13

我也在寻找这种手术。我什么也没找到,所以我用 MULTI/EXEC 做到了:

MULTI
expire key1
expire key2
expire key3
EXEC
于 2013-12-18T13:47:08.517 回答
2

它有一个问题可以追溯到 2012 年。对于那些想知道为什么不实施它的人。

不幸的是,我们不会添加更多可以在多个键上工作的命令,因为它们本质上很难分发。相反,为每个要过期的密钥显式调用 EXPIRE 更容易分发(如果需要,您可以将每个命令路由到不同的服务器)。如果您想以原子方式 EXPIRE 键,您可以将多个调用包装在一个 MULTI/EXEC 块中。


顺便说一句,如果不需要事务,请尝试使用管道而不是更好MULTI/EXEC性能

流水线不仅仅是一种减少与往返时间相关的延迟成本的方法,它实际上大大提高了您在给定 Redis 服务器中每秒可以执行的操作数量。

于 2021-12-08T05:41:49.067 回答
0
EVAL "<multi_ttl_script>" N key1 key2 ... value1 ttl1 value2 ttl2 ...
于 2014-01-07T01:01:44.640 回答
0

很遗憾,我们无法使用 mset 设置过期时间,这是针对使用 nodejs 和 redis lib 的人的解决方案:

// expires the key at next mid-night
let now = moment()
let endOfDay = moment().endOf('day')
let timeToLiveInSeconds = endOfDay.diff(now, 'seconds')

redisClient.expire(keyName, timeToLiveInSeconds)

我希望它有帮助

于 2019-09-13T20:55:14.123 回答