赞
踩
Redis的过期策略是:定期删除+惰性删除
策略 | 含义 |
---|---|
noeviction | 不进行内存淘汰的策略。当内存不足以容纳新写入数据时,新写入操作会报错。 |
allkeys-lru(常用) | 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。 |
allkeys-random | 当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。 |
volatile-lru | 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。 |
volatile-random | 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。 |
volatile-ttl | 当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。 |
获取当前内存淘汰策略:config get maxmemory-policy
获取Redis能使用的最大内存大小:config get maxmemory
设置内存淘汰策略:config set maxmemory-policy allkeys-lru
maxmemory-policy allkeys-lru
设置Redis最大占用内存大小:config maxmemory 100mb 设置内存大小为100mb
淘汰算法:最近最少使用算法
class LRUCache { private int cap; private Map<Integer, Integer> map = new LinkedHashMap<>(); public LRUCache(int capacity) { this.cap = capacity; } public int get(int key) { if (map.containsKey(key)) { int val = map.get(key); map.remove(key); map.put(key,val); return val; } return -1; } public void put(int key, int value) { if (map.containsKey(key)) { map.remove(key); }else if (map.size() == cap){ Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator(); iterator.next(); iterator.remove(); } map.put(key,value); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。