阅读完以上的内容 , 是否感觉似曾相似?实际上LFU counter计算过程就是对访问次数进行了数值归一化 , 将数据访问次数映射成热度值(counter) , 数值的范围也从[0,+∞)映射到另一个维度的[0,255] 。
3.3.2 LFU Counter分析
仅从代码层面分析研究Redis LFU算法实现会比较抽象且枯燥 , 无法直观的呈现counter递增概率的算法效果 , 以及counter数值与访问次数的关系 。
在lfu_log_factor为默认值10的场景下 , 利用Python/ target=_blank class=infotextkey>Python实现Redis LFU算法流程 , 绘制出LFU counter递增概率曲线图:

文章插图
可以清晰的观察到 , 当LFU counter数值超过LFU_INIT_VAL之后 , 曲线出现了垂直下降 , 递增概率陡降到0.2%左右 , 随后在底部形成一个较为缓慢的衰减曲线 , 直至counter数值达到255则递增概率归于0 , 贴合3.3.1章节分析的理论 。
保持Redis系统配置默认值的情况下 , 对同一个数据持续的访问 , 并采集此数据的LFU counter数值 , 绘制出LFU counter数值曲线图:

文章插图
随着访问次数的不断增加 , LFU counter数值曲线呈现出爬坡式的递增 , 形态趋近于根号曲线 , 由此推测出以下观点:
- 在访问次数相同的情况下 , counter数值不是固定的 , 大概率在一个范围内波动;
- 在同一个时间段内 , 数据之间访问次数相差上千次 , 才可以通过counter数值区分出哪些数据更热 , 而“温”数据之间可能很难区分热度 。
如果业务数据的访问较为均匀 , OPS或CPU利用率一般不会出现周期性的陡升或陡降 , 数据没有体现出相对的“冷热”特性 , 即建议采用LRU算法 , 可以满足一般的运维需求 。
相反 , 业务具备很强时效性 , 在活动推广或大促期间 , 业务某些数据会突然成为热点数据 , 监控上呈现出OPS或CPU利用率的大幅波动 , 为了能抓取热点数据便于后期的分析或优化 , 建议一定要配置成LFU算法 。
在Used_memory接近Maxmemory的情况下 , Redis一直都采用随机的方式筛选数据 , 且筛选的个数极其有限 , 所以 , LFU算法无法展现出较大的优势 , 也可能会淘汰掉比较热的数据 。
推荐阅读
- 聊聊Excel解析:如何处理百万行EXCEL文件?
- Redis五种基本数据类型详解:用途及操作
- 人民日报转发张颂文演讲!措辞犀利,每句话深入观众内心!
- 逆水寒手游究竟好不好玩,逆水寒手游深度解析
- MySQL面试常见问题解析:掌握这10个问题,事半功倍!
- 爬虫解析HTML动态JS,技术应用揭秘
- 深入理解Shiro反序列化原理
- 安娜李的性解放,一部深入探讨自我价值和性观念的电影
- 十二星座6月运势解析:白羊、金牛、双子、巨蟹、狮子、处女座
- 金牌面试官:企业提升招聘效能的六个技巧解析
