Skip to the content.

首页

高性能缓存


BoundedLocalCache

有界本地缓存,底层使用的是ConcurrentHashMap,使用了W-TinyLFU算法,为了更好的应对突发稀疏流量设计。

FrequencySketch

maintenance(Runnable task)

ReadBuffer、WriteBuffer

缓存淘汰策略

新的数据会直接加入window区,之后在维护阶段判断window区如果超出限制,会使用LRU将淘汰出来的数据candidate放入probation区,如果probation区也超出限制,那么也使用LRU选出要淘汰的数据victim,然后通过FrequencySketch统计的频率决定淘汰哪一个。

缓存过期

expireVariableEntries使用WheelTimer多层时间轮实现,expireAfterAccessEntries和expireAfterWriteEntries是使用AccessOrderDeque双端队列实现。

缓存空间动态调整

动态调整window区和main区的比例以使缓存表现最佳的命中率,只有当总请求量达到了FrequencySketch的sampleSize才进行调整,通过本次命中率与上次命中率的差值决定window区增减的大小,且缓存的整体大小不变。