Open fenixsoft opened 4 years ago
为了解决LFU不便于处理随时间变化的热度变化问题,LFU采用了基于“滑动时间窗”(在“流量控制”中我们会更详细地介绍这种算法)的热度衰减算法
这里应该是:TinyLFU采用了基于“滑动时间窗”的热度衰减算法
@yanyuyouyou
为了解决LFU不便于处理随时间变化的热度变化问题,LFU采用了基于“滑动时间窗”(在“流量控制”中我们会更详细地介绍这种算法)的热度衰减算法
这里应该是:TinyLFU采用了基于“滑动时间窗”的热度衰减算法
感谢指正,已修改。
缓存击穿是仅针对热点数据被自动失效才引发的问题
有没有可能是热点数据首次加载而导致缓存击穿?比如有什么活动之类的
“引用方式:支持将数据设置为软引用或者弱应用”中的“弱应用”应该是“弱引用”吧?
“引用方式:支持将数据设置为软引用或者弱应用”中的“弱应用”应该是“弱引用”吧?
感谢
“只要读取指正不落后于写入指针一整圈”这里是读取指针吧?
另外一个节点访问在短时间类读取到的仍是旧的数据
短时间类内
缓存穿透、缓存击穿、缓存雪崩是不是不应作为缓存风险来讲?毕竟不加缓存的话请求也会直接打到数据库。
“写数据时,先写数据源,然后失效(而不是更新)掉缓存”,写数据时应该先失效缓存,再写数据源,防止写入数据源后还没来得及失效缓存
譬如集群中有八个节点,可以要求每个数据只保存四份副本,此时,缓存的总容量相当于是传统复制模式的一倍
传统八节点八副本,现在副本数可以减半的话,总容量应该是传统复制的两倍吧,或者说比传统模式多出一倍。还是我理解的有问题?
周老师。“很难清楚界定清楚服务端缓存到底算不算与业务逻辑无关,”这里是不是多了一个清楚呢 感觉读着有点别扭
关于LFU淘汰算法,周老师谈到两个问题: 1.第一个是维护成本 2.第二个是热点频次
事实上应该是如下两个问题: 1.新入库项存活时效 2.热点频次
就维护成本来说,对比LRU算法,也需要单独维护一个timestamp(假定我们用unix时间戳代表),每次访问依然需要做同步/异步更新。所以无论是使用引用计数,还是时间戳等其他方式,总是要有一个开销维护。反之,如果不做埋点,我们也无从得知哪个key应该被清除
新入库存活时效问题,这一点周老师没有明确提到,这里的问题是:通常一个新入库的缓存key 它的引用计数会比较小(即使给了一个权重),所以在LFU语境下,存在被很快置出的风险。
引用wikipedia原文: Moreover, new items that just entered the cache are subject to being removed very soon again, because they start with a low counter, even though they might be used very frequently after that.
针对LFU的问题 通常我们会使用LRFU,即两者结合的方式,类比W-TinyLFU
都是面试经常问到的问题,比较有用
https://icyfenix.cn/architect-perspective/general-architecture/diversion-system/cache-middleware.html