主要目的-济南python培训负责整理
解决LRU算法“缓存污染”的问题。
核心思想
“最近使用过1次”的判断标准扩展为“最近使用过K次”.
命中率
LRU-K降低了“缓存污染”带来的问题,命中率比LRU要高。
1)数据第一次被访问,加入到访问历史记录表(简称记录表);在记录表中对应的K单元中设置最后访问时间=new(),且设置访问次数为1;
2)如果数据访问次数没有达到K次,则访问次数+1.最后访问时间与当前时间间隔超过预设的值(如30秒),访问次数清0并加1;
3)当数据访问计数超过(>=)K次后,则访问次数+1.将数据保存到LRU缓存队列中,缓存队列重新按照时间排序;

4)LRU缓存队列中数据被再次访问后,重新排序;
5)LRU缓存队列需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据。
子模块LRU存储模型:
类似ConcurrentHashMap,大致由二维数组+链表+访问队列三部分组成
Segment数组每个节点都包含一个访问队列,通过这个队列来实现lru算法;
访问队列是一个环状双向链表,LRU算法由访问队列实现
3、缓存框架
3.1、系统数据存储组成
3.2、数据查询流程
先从本地缓存取,本地缓存没有从redis取(同时更新本地缓存),redis没有从DB取(同时更新Redis)。
1)先计算该数据获取总次数
2)未达到K访问记录时直接从redis取数据
3)达到K次访问记录时,从本地缓存取,本地缓存不存在时从redis获取数据(同时放入本地缓存中)
以上就是济南python培训给大家做的内容详解,更多关于python的学习,请继续关注济南python培训