【问题标题】:Can I set global TTL in redis?我可以在redis中设置全局TTL吗?
【发布时间】:2014-10-26 09:40:37
【问题描述】:

我可以在redis中设置全局TTL吗?而不是每次设置键时都设置TTL。

我用谷歌搜索,但找不到任何线索。所以好像做不到?

谢谢。

【问题讨论】:

    标签: redis


    【解决方案1】:

    不,Redis 没有全局/默认 TTL 的概念,是的,您必须为每个键单独设置它。但是,根据您的要求和您正在尝试做的事情,可能还有其他方法可以实现您的目标。换句话说,你为什么需要它?

    例如,如果您想将 Redis 用作缓存而不担心必须删除“旧”项,则只需将 maxmemory_policy 设置为 allkey-lru 即可。每当 Redis 的内存耗尽时,这将驱逐最近最少使用的键。

    编辑:有关更多信息,请参阅下面来自 @arganzheng 和 @Kristján 的 cmets 中的有用链接,以及 redis.conf 配置文件中的内联文档。

    【讨论】:

      【解决方案2】:

      如果你在设置一个key,你可以同时设置TTL: look at the set command

      另一方面,您可以通过编写脚本来完成此操作(在 linux 上,例如 - 60 秒):

      for k in `redis-cli --raw keys '*'` ; do redis expire $k 60;done
      

      【讨论】:

      • "keys" 在生产环境中很糟糕,因为它会同步锁定数据库。只有微不足道的小型数据库才能摆脱这种情况。如果要遍历键,请使用 SCAN。此选项的另一个问题是它实际上会刷新所有键的 TTL,因此所有键将永远存在,除非您确保运行脚本的频率低于您想要说的 TTL。例如,如果您想管理 Web 会话,它们应该在 30 天后到期,您只能每 31 天运行一次脚本...
      【解决方案3】:

      虽然不是“纯” Redis 解决方案,但请查看实现此目的的 RedisGears 示例:https://oss.redislabs.com/redisgears/master/examples.html#automatic-expiry

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 2019-11-01
        • 1970-01-01
        • 2018-10-08
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多