集合中的元素有许多并行请求。存在比缓存槽更多的元素。所有并行请求都在稍微不同的时间请求集合中的所有元素。元素是不可变的,并且具有唯一的名称。
如果缓存大小小于集合中元素的数量(就像现在一样),则缓存未命中是一个问题。我预测缓存抖动是由对不同元素的请求的均匀分布引起的。缓存当前使用LRU。我还没有测试过其他cache algorithms。通过对大多数人的思考,我预测也会发生颠簸。
此方案有哪些好的缓存算法选项?
这是一个Web应用程序,它是时间上的细微差别所在。许多用户在接近同一时间请求相同的元素集合。
答案 0 :(得分:0)
您如何知道LRU不是一种有效的缓存算法?您是否保留有关缓存利用率(点击,未命中等)的统计信息?
选择缓存算法主要是在请求之前选择最接近元素需求的算法。在摘要中,您通常希望元素按请求和驱逐时间排序。完美的缓存本质上意味着你有一个oracle,它确切地知道需要什么以及什么时候。
所以问题实际上是,什么描述了缓存中需要元素的方式,或者在给定时间内f(x)
最接近需要的内容?对于LRU,f(x) = t
t
是上次访问时间,MRU f(x) = 1/t
或f(x) = -t
,LFU f(x) = n
其中n
是访问次数,等...
根据您的描述,可能需要在短时间内再次访问所访问的元素集合,因此我认为使用LRU并按集合进行分组应该已经相当有效。