Redis的TTL与“allkeys-lru”驱逐策略

9
我有一个关于Redis缓存行为的问题,请澄清一下 -
比如说,对于一个键"xyz",如果TTL设置为15分钟。如果在服务器级别上它的驱逐策略设置为"allkeys-lru"。那么过期的项目(由于TTL)是过期还是等到内存满了再过期?
1个回答

16

当内存使用量超过最大值时,逐出策略才会生效。只要你在内存限制内,易失性键(key)将在应过期时过期。

一旦内存满了,LRU算法就会启动,逐出最久未使用的键(key)。在allkeys-lru中,无论一个键(key)是否过期以及TTL是什么,都会被逐出最少使用的项目。在volatile-lru中,只有到期的键(key)才会使用此算法被逐出。


1
好的回答。也许这是一个修辞问题,但如果我所有的键都是易失性的(它们有一个超时时间),那么volatile-lruallkeys-lru策略会产生相同的效果,对吗? - Pere Joan Martorell
Redis如何识别LRU键? - Amin Shojaei
2
如果我没记错的话,@AminShojaei 它会对一堆键进行采样以获取它们的访问时间。 - Not_a_Golfer
如果没有易失性键,会回退到allkeys以运行LRU算法吗? - silva96
@silva96 不会,键将继续累积,直到Redis耗尽内存并开始拒绝存储新键(生成OOM错误)。 - rinogo
这并不完全正确(再也不是了),即使内存没有满,LRU项目也会被驱逐。 请参阅https://www.pankajtanwar.in/blog/how-redis-expires-keys-a-deep-dive-into-how-ttl-works-internally-in-redis - undefined

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