| 限定符和类型 | 方法和说明 |
|---|---|
ICache<K,V> |
expire(K key,
long timeInMills)
设置过期时间
(1)如果 key 不存在,则什么都不做。
|
ICache<K,V> |
expireAt(K key,
long timeInMills)
在指定的时间过期
|
clear, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, entrySet, equals, forEach, get, getOrDefault, hashCode, isEmpty, keySet, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size, valuesICache<K,V> expire(K key, long timeInMills)
Map.get(Object) 获取
Map.values() 获取所有值
Map.entrySet() 获取所有明细
【数据的不一致性】
调用其他方法,可能得到的不是使用者的预期结果,因为此时的 expire 信息可能没有被及时更新。
比如
Map.isEmpty() 是否为空
Map.size() 当前大小
同时会导致以 size() 作为过期条件的问题。
解决方案:考虑添加 refresh 等方法,暂时不做一致性的考虑。
对于实际的使用,我们更关心 K/V 的信息。
(2)定时删除
启动一个定时任务。每次随机选择指定大小的 key 进行是否过期判断。
类似于 redis,为了简化,可以考虑设定超时时间,频率与超时时间成反比。
其他拓展性考虑:
后期考虑提供原子性操作,保证事务性。暂时不做考虑。
此处默认使用 TTL 作为比较的基准,暂时不想支持 LastAccessTime 的淘汰策略。会增加复杂度。
如果增加 lastAccessTime 过期,本方法可以不做修改。key - keytimeInMills - 毫秒时间Copyright © 2020. All rights reserved.