Redisson动态增量数据的存储,LRU与LFU的比较
LRU与LFU什么意思
这两个缩略词的意思,网络上搜搜一下,应该都能找到相关的解释。这里做一下简要的说明,
- LRU(least frequently used): 最近最少使用
- LFU(Least Recently Used): 最不经常使用
Redisson对应Class说明
当前使用的文档为3.11.2版本的javadoc。
对应的两个Map为org.redisson.cache
包下的,
LFUCacheMap
LRUCacheMap
以上类均继承或扩展org.redisson.cache.AbstractCacheMap<K,V>
类。
LRUCacheMap
LRU(least recently used) cache,即最近最少使用cache。使用ArrayList存储不断增长的CachedValue,列表的大小固定为当前CPU核数的2倍;每个列表元素是一个LinkedHashSet,其值为CachedValue.。保存key-value值到LRUCacheMap时,根据CachedValue的hashCode对列表取模运算,返回该值要添加到的LinkedHashSet所在的列表中的索引,从而找到要保存到的LinkedHashSet集合。
每次读取key-value值时,都会把该值从相应的LinkedHashSet中取出,然后重新放回尾部。
当m