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

Sag*_*rma 2 redis lettuce spring-data-redis

我正在尝试将一个条目推送到 Redis 中的列表中,并且还想在每次新条目进入时更新列表的 TTL。我可以使用 Redis 简单地调用 EXPIRE“my-list”ttl 来做到这一点。由于我的应用程序接收的流量很大,因此我想减少对 redis 的调用次数。

我可以在Redis中的推送操作期间设置我的TTL吗,即RPUSH“mylist”I1 I2...IN ex“TTL”,redis是否支持此命令功能的时间。我可以看到它确实支持字符串数据结构。

Ita*_*ber 6

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

您应对此挑战的方法是根据现有命令编写您自己的“命令”。但是,您可以使用 Lua 脚本(如EVAL文档页面中所述),而不是让您的应用程序调用这些命令。

Lua 脚本在服务器上缓存并自动运行。如下所示的一种可能会对您的情况有所帮助 - 它期望获取键名称、推送的元素和到期值:

local reply = redis.call('RPUSH', KEYS[1], ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return reply
Run Code Online (Sandbox Code Playgroud)