Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 将Redis配置为仅保留过去一天的密钥_Configuration_Redis - Fatal编程技术网

Configuration 将Redis配置为仅保留过去一天的密钥

Configuration 将Redis配置为仅保留过去一天的密钥,configuration,redis,Configuration,Redis,我让一个应用程序将密钥写入Redis,而不指定密钥的过期时间。无法更改应用程序,但我想将Redis配置为在过去24小时内仅保留密钥,并删除旧密钥 如何?要在24小时后使密钥过期,您需要显式地为每个密钥设置TTL。要在24小时后使密钥过期,您需要显式地为每个密钥设置TTL。好了,没有办法配置Redis只在过去24小时内保留密钥并删除旧密钥,正如您所说的,至少您设置了TTL,但是有一个技巧你可以做到 我假设您不能更改您告诉我们的应用程序中的任何内容。。。因此,您需要创建一个脚本/命令/应用程序,它每

我让一个应用程序将密钥写入Redis,而不指定密钥的过期时间。无法更改应用程序,但我想将Redis配置为在过去24小时内仅保留密钥,并删除旧密钥


如何?

要在24小时后使密钥过期,您需要显式地为每个密钥设置TTL。

要在24小时后使密钥过期,您需要显式地为每个密钥设置TTL。

好了,没有办法配置Redis只在过去24小时内保留密钥并删除旧密钥,正如您所说的,至少您设置了TTL,但是有一个技巧你可以做到

我假设您不能更改您告诉我们的应用程序中的任何内容。。。因此,您需要创建一个脚本/命令/应用程序,它每隔一个小的时间间隔(比如1分钟)连接到Redis服务器。时间间隔将取决于您在Redis中假设的平均键数

应用程序很简单,只需迭代所有键并使用三个命令:

  • KEYS*->以获取完整的密钥列表
  • TTL keyName->了解密钥是否已指定过期时间。如果没有,它将返回-1
  • 过期keyName 86400->如果密钥未分配TTL,则设置24小时的TTL
因此,第一次运行该命令时,Redis中的所有当前键将花费24小时的TTL,在此时间之后,它们将被删除。第二次执行命令时,将仅为第一次执行命令时不存在的新密钥分配24小时TTL,依此类推

您必须考虑到,如果密钥数量庞大,大约有几百万个,您可能会遇到一些内存和性能问题,因此在这种情况下,我建议使用通配符检索密钥,以按组获取密钥,如密钥a*或密钥1*,这取决于您对密钥名称使用的模式。在这里,您可以为每个组创建一个永不停止并不断迭代的守护进程


在生产环境中,不建议使用带有大量密钥的KEYS命令,但您可以使用我以前建议的这种解决方法。

AFAIK没有办法将Redis配置为仅在过去24小时内保留密钥并删除旧密钥,正如您所说,至少您设置了一个TTL,但有一个技巧您可以做到

我假设您不能更改您告诉我们的应用程序中的任何内容。。。因此,您需要创建一个脚本/命令/应用程序,它每隔一个小的时间间隔(比如1分钟)连接到Redis服务器。时间间隔将取决于您在Redis中假设的平均键数

应用程序很简单,只需迭代所有键并使用三个命令:

  • KEYS*->以获取完整的密钥列表
  • TTL keyName->了解密钥是否已指定过期时间。如果没有,它将返回-1
  • 过期keyName 86400->如果密钥未分配TTL,则设置24小时的TTL
因此,第一次运行该命令时,Redis中的所有当前键将花费24小时的TTL,在此时间之后,它们将被删除。第二次执行命令时,将仅为第一次执行命令时不存在的新密钥分配24小时TTL,依此类推

您必须考虑到,如果密钥数量庞大,大约有几百万个,您可能会遇到一些内存和性能问题,因此在这种情况下,我建议使用通配符检索密钥,以按组获取密钥,如密钥a*或密钥1*,这取决于您对密钥名称使用的模式。在这里,您可以为每个组创建一个永不停止并不断迭代的守护进程

在生产环境中不建议使用带有大量密钥的KEYS命令,但您可以使用我以前建议的这种解决方法