Redis无论有没有设置expire,他都会遵循redis的配置好的删除机制,在配置文件里设置:
redis最大内存不足”时,数据清除策略,默认为”volatile-lru”。
volatile-lru ->对”过期集合”中的数据采取LRU(近期最少使用)算法.如果对key使用”expire”指令指定了过期时间,那么此key将会被添加到”过期集合”中。将已经过期/LRU的数据优先移除.如果”过期集合”中全部移除仍不能满足内存需求,将OOM.
allkeys-lru ->对所有的数据,采用LRU算法
volatile-random ->对”过期集合”中的数据采取”随即选取”算法,并移除选中的K-V,直到”内存足够”为止. 如果如果”过期集合”中全部移除全部移除仍不能满足,将OOM
allkeys-random ->对所有的数据,采取”随机选取”算法,并移除选中的K-V,直到”内存足够”为止
volatile-ttl ->对”过期集合”中的数据采取TTL算法(最小存活时间),移除即将过期的数据.
noeviction ->不做任何干扰操作,直接返回OOM异常
另外,如果数据的过期不会对”应用系统”带来异常,且系统中write操作比较密集,建议采取”allkeys-lru”。
由以上可以看出,对没设置expire的数据,产生影响的是allkeys-lru机制,allkeys-random。
所以redis没设置expire的数据是否会删除,是由你自己选择的删除机制决定的。
在Redis服务器占用内存达到maxmemory的情况下,当再想增加内存占用时,会按maxmemory-policy机制将老的数据删除。这里简单说一下volatile-lru,Redis会按LRU算法删除设置了过期时间但还没有过期的key,而对于没有设置过期时间的key,Redis是永远保留的。当然,如果你不想删除没有过期的key,那可以使用noeviction机制
原文:https://segmentfault.com/q/1010000004490914
LRU:http://www.jb51.net/article/68260.htm
本文介绍了Redis在内存管理方面的机制,特别是当内存达到上限时如何选择不同的数据清除策略,如volatile-lru、allkeys-lru等,并解释了这些策略如何应用于有过期时间及未设置过期时间的键。
173万+

被折叠的 条评论
为什么被折叠?



