我可以在Redis中设置全局TTL吗?

35

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

我搜索了一下,但没有发现任何线索。所以似乎无法做到?

谢谢。

3个回答

29
不,Redis没有全局/默认的TTL概念,是的,您必须独立为每个键设置它。但是,根据您的要求和您试图完成的任务,可能会有其他实现目标的方法。换句话说,您为什么需要它?
例如,如果您想将Redis用作缓存,并且不必担心删除“旧”项,您可以通过将`maxmemory_policy`设置为`allkey-lru`来轻松实现。这将在Redis内存耗尽时逐出最近未使用的键。
编辑:有关更多信息,请参见下面@arganzheng和@Kristján的有用链接,以及redis.conf配置文件中的内联文档。

4
如果您要设置一个键(key),您可以同时设置TTL:请查看set命令
另一方面,您可以通过编写脚本来完成此操作(例如在Linux上 - 60秒)。
for k in `redis-cli --raw keys '*'` ; do redis expire $k 60;done

7
"keys" 在生产环境中是很糟糕的,因为它会同步锁定数据库。只有微不足道的小型数据库可以使用它。如果你想迭代访问键,请使用 SCAN。 此选项的另一个问题是它将刷新所有键的 TTL,因此除非您确保运行脚本的频率比所需TTL更少,否则所有键将永远存在。如果您想管理 Web 会话(例如应该在30天后过期),则只能每31天运行一次脚本... - Jon Watte

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接