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 掉。