【发布时间】:2016-11-06 18:37:48
【问题描述】:
有没有办法在 redis 密钥过期时自动将其从一个地方移动到另一个地方?有一些方法可以在客户端通过收到 redis 过期通知的通知来执行此操作,但是如果在触发通知时没有客户端正在运行,则该事件将被错过。
但是,如果有办法在服务器上执行此操作(可能通过 LUA 脚本),那么它可以是原子的,并且密钥在到期前存在于一个地方,而在到期后存在于另一个地方。
【问题讨论】:
有没有办法在 redis 密钥过期时自动将其从一个地方移动到另一个地方?有一些方法可以在客户端通过收到 redis 过期通知的通知来执行此操作,但是如果在触发通知时没有客户端正在运行,则该事件将被错过。
但是,如果有办法在服务器上执行此操作(可能通过 LUA 脚本),那么它可以是原子的,并且密钥在到期前存在于一个地方,而在到期后存在于另一个地方。
【问题讨论】:
密钥过期时不会触发过期密钥空间通知。不保证会如您所料... (see Timing of expired events)
- 当密钥被命令访问并发现已过期时。
- 通过后台系统在后台以增量方式查找过期密钥,以便还能够收集从未过期的密钥 访问。
恕我直言,我相信您应该采用另一种方法。使用一些外部任务调度程序并自动启动任务以在过期密钥过期前几秒钟或几分钟移动过期密钥。我知道您将使用ttl 命令检查目标键是否仍然存在。
对我来说,密钥过期是一种自动释放内存的好方法,但您不应该使用它来根据过期事件生成操作,因为它对于此类用例不可靠。
【讨论】:
Lua 脚本不能由键空间通知触发。 您必须在客户端执行此操作。
【讨论】: