加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

巧妙设计多级缓存,为数据库减负

发布时间:2018-08-22 23:47:23 所属栏目:编程 来源:DBAplus社群
导读:技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 作者介绍 王梓晨,物流研发部架构师,GIS技术部负责人,2012年加入京东,多年一线团队大促备战经验,负责物流研发一些部门的架构工作,专注于低延迟系统设计与海量数据处理。目前负

即先进先出,淘汰最早进来的缓存数据,一个标准的队列。

巧妙设计多级缓存,为数据库减负

以队列为基本数据结构,从队首进入新数据,从队尾淘汰。

LRU(Least RecentlyUsed)

即最近最少使用,淘汰最近不使用的缓存数据。如果数据最近被访问过,则不淘汰。

巧妙设计多级缓存,为数据库减负

和FIFO不同的是,需要对链表做基本模型,读写的时间复杂度是O(1),写入新数据进入头部,链表满了数据从尾部淘汰;

最近时间被访问的数据移动到头部,实现算法有很多,如hashmap+双向链表等等;

问题在于若是偶发性某些key被最近频繁访问,而非常态,则数据受到污染。

LFU(Least Frequently used)

即最近使用次数最少的数据被淘汰,注意和LRU的区别在于LRU的淘汰规则是基于访问时间。

巧妙设计多级缓存,为数据库减负

LFU中的每个数据块都有一个引用计数,数据块按照引用计数排序,若是恰好具有相同引用计数的数据块则按照时间排序;

因为新加入的数据访问次数为1,所以插入到队列尾部;

队列中的数据被新访问后,引用计数增加,队列重新排序;

当需要淘汰数据时,将已经排序的列表最后的数据块删除;

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读