在 Redis 的单个命令中使用带 TTL 的 RPUSH

Using RPUSH with TTL in a single command in Redis

我试图在 Redis 的列表中推送一个条目,并且还想在每次有新条目进入时更新列表的 TTL。我可以通过调用 EXPIRE "my-list" 来做到这一点ttl 使用 Redis。由于我的应用程序正在接收大量流量,我想减少对 redis 的调用次数。

我可以在 Redis 的推送操作期间设置我的 TTL,即 RPUSH "mylist" I1 I2...IN ex "TTL",redis 是否支持这次命令功能。我可以看到它确实支持 String 数据结构。

Redis 没有专门的命令来推送和过期列表,尽管正如您所提到的,它确实有类似字符串数据类型的命令。

您应对这一挑战的方法是根据现有的“命令”编写您自己的“命令”。但是,您可以使用 Lua 脚本,而不是让您的应用程序调用这些命令,如 EVAL documentation page.

中所述

Lua 脚本被缓存并 运行 在服务器上自动执行。像下面这样的一个可能对你的情况有帮助——它期望得到键名、推送的元素和到期值:

local reply = redis.call('RPUSH', KEYS[1], ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return reply