我正在用java实现缓存,但我有最后一个需要解决的问题:如何处理元素的删除?
元素存储在磁盘上,每个元素都有一个有效期(然后是到期日期),还有一个大小,我的缓存显然有一个最大大小和可以存储的最大元素数。
我想象了三种执行元素删除的方法:
关于第三点,使用此策略缓存将继续存储过期元素。显然,当需要其中一个时,执行控制以检查元素是否仍然有效。
你怎么看?管理缓存时的常见行为是什么?还有其他解决方案吗?P.S。我正在为Android开发这个缓存,但我认为这不是那么重要。
答案 0 :(得分:0)
基本上,您必须知道缓存元素的使用频率以及使用顺序。缓存必须与操作系统相同才能将最佳数据保存在内存中。
Hava看看这些策略并选择你需要的策略:http://en.wikipedia.org/wiki/Page_replacement_algorithm
一个好的提示是LRU(最近最少使用)。但就像所有这些策略一样,它有一些缺点。这可能不适合您的使用情况。
LRU的实施技巧:
使用PriorityQueue存储除地图之外的元素。使用全局计数器保持更新,每次使用其中一个元素时,该计数器都会递增,并使用全局计数器的当前值重新插入PriorityQueue中的相应元素。
如果需要从队列中删除项目,则只需从队列中删除第一个或最后一个元素(取决于compareTo(...)方法的实现)。并将其从地图中删除。