在 redis 中有一个SETEX
命令允许我设置一个过期的密钥,是否有这个命令的多集版本也有一个 TTL?
和命令都没有这样的选项MSET
。MSETNX
在 redis 中有一个SETEX
命令允许我设置一个过期的密钥,是否有这个命令的多集版本也有一个 TTL?
和命令都没有这样的选项MSET
。MSETNX
我也在寻找这种手术。我什么也没找到,所以我用 MULTI/EXEC 做到了:
MULTI
expire key1
expire key2
expire key3
EXEC
它有一个问题可以追溯到 2012 年。对于那些想知道为什么不实施它的人。
不幸的是,我们不会添加更多可以在多个键上工作的命令,因为它们本质上很难分发。相反,为每个要过期的密钥显式调用 EXPIRE 更容易分发(如果需要,您可以将每个命令路由到不同的服务器)。如果您想以原子方式 EXPIRE 键,您可以将多个调用包装在一个 MULTI/EXEC 块中。
顺便说一句,如果不需要事务,请尝试使用管道而不是更好MULTI/EXEC
的性能。
流水线不仅仅是一种减少与往返时间相关的延迟成本的方法,它实际上大大提高了您在给定 Redis 服务器中每秒可以执行的操作数量。
EVAL "<multi_ttl_script>" N key1 key2 ... value1 ttl1 value2 ttl2 ...
很遗憾,我们无法使用 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)
我希望它有帮助