【问题标题】:Using RPUSH with TTL in a single command in Redis在 Redis 的单个命令中使用带有 TTL 的 RPUSH
【发布时间】:2019-01-27 13:01:29
【问题描述】:
我正在尝试在 Redis 的列表中推送一个条目,并且还想在每次有新条目进入时更新列表的 TTL。我可以通过简单地调用 EXPIRE“my-list”ttl 来做到这一点雷迪斯。由于我的应用程序正在接收大量流量,因此我想减少对 redis 的调用次数。
我可以在 Redis 的推送操作期间设置我的 TTL,即 RPUSH "mylist" I1 I2...IN ex "TTL",redis 是否支持此命令时间功能。我可以看到它确实支持 String 数据结构。
【问题讨论】:
标签:
redis
spring-data-redis
lettuce
【解决方案1】:
Redis 没有专门的命令来推送和使 List 过期,尽管正如您所提到的,它确实有类似 String 数据类型的命令。
您应对这一挑战的方式是从现有的“命令”中编写自己的“命令”。但是,您可以使用 EVAL documentation page 中解释的 Lua 脚本,而不是让您的应用程序调用这些命令。
Lua 脚本被缓存并在服务器上自动运行。下面的一个可能会对您的情况有所帮助 - 它希望获得键名、推送的元素和到期值:
local reply = redis.call('RPUSH', KEYS[1], ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return reply