Redis 淘汰策略

Scroll Down

noeviction : 返回错误,当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但是DEL和几个例外)

allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放

volatile-lur:尝试回收使用最少的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放

allkeys-random:回收随机的键使得新添加的数据有空间存放。

volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键

volatile-ttl:回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放

如果没有键满⾜回收的前提条件的话,策略volatile-lru, volatile-random以及volatile-ttl就和noeviction 差不多了。

其实在⼤家熟悉的LinkedHashMap中也实现了Lru算法的,实现如下:
final Map<Long,TimeInfoHolder> timeoutInfoHandlers =
	Collections.synchronizedMap(new HashMap<Long,TimeoutInfoHolder>(100,0.75,true){
	@Override
	protected boolean removeEldstEntry(Map.Entry eldest){
	return size()>100;
}
	
});

当容量超过100时,开始执⾏LRU策略:将最近最少未使⽤的 TimeoutInfoHolder 对象 evict 掉。