【发布时间】:2012-02-19 02:43:52
【问题描述】:
我在 redis 中存储了一堆实时数据。我在所有键上设置了 14400 秒(4 小时)的 TTL。我已将 maxmemory 设置为 10G,目前内存中的空间不足以容纳 4 小时的数据,而且我没有使用虚拟内存,因此 redis 在数据过期之前将其逐出。
我同意 redis 驱逐数据,但我希望它首先驱逐最旧的数据。因此,即使我没有完整的 4 小时数据,至少我可以拥有一定范围的数据(3 小时、2 小时等),其中没有间隙。我试图通过设置maxmemory-policy=volatile-ttl 来实现这一点,认为最旧的键将首先被驱逐,因为它们都具有相同的 TTL,但它不是那样工作的。看来 redis 有点武断地驱逐数据,所以我的数据最终出现了空白。例如,今天 2012-01-25T13:00 的数据在 2012-01-25T12:00 的数据之前被驱逐。
是否可以将 redis 配置为始终先驱逐旧数据?
这是我的 redis.cnf 文件中的相关行。如果您想查看更多配置,请告诉我:
maxmemory 10gb
maxmemory-policy volatile-ttl
vm-enabled no
【问题讨论】: