CN113076067B - 淘汰缓存数据的方法和装置 - Google Patents

淘汰缓存数据的方法和装置 Download PDF

Info

Publication number
CN113076067B
CN113076067B CN202110412028.6A CN202110412028A CN113076067B CN 113076067 B CN113076067 B CN 113076067B CN 202110412028 A CN202110412028 A CN 202110412028A CN 113076067 B CN113076067 B CN 113076067B
Authority
CN
China
Prior art keywords
data
accessed
candidate
access times
timestamp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110412028.6A
Other languages
English (en)
Other versions
CN113076067A (zh
Inventor
糜鹏程
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202110412028.6A priority Critical patent/CN113076067B/zh
Publication of CN113076067A publication Critical patent/CN113076067A/zh
Application granted granted Critical
Publication of CN113076067B publication Critical patent/CN113076067B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种淘汰缓存数据的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收数据访问请求;若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;若是,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的。该实施方式提高了系统并发性,减少了由于冷数据的偶然访问而引起的热数据被淘汰现象。

Description

淘汰缓存数据的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种淘汰缓存数据的方法和装置。
背景技术
缓存淘汰策略用于决定缓存系统中哪些数据应该被删去。常见算法类型包括LRU和LFU。LRU(Least Recently Used,最近最少使用算法)的目的为在有限的空间已经塞满的情况下,要放入新的内容,则会找到离最近使用时间最远的内容进行淘汰,从而为新内容腾出足够的空间。LFU(Least Frequently Used,最不经常使用算法)使用一个计数器来记录条目被访问的频率。通过使用LFU缓存算法,最低访问数的条目首先被移除。对于LRU算法,可以通过链表或随机采样实现该算法。通过链表实现LRU算法时,每次访问一个数据,就将该数据移动到链表的头部。在淘汰元素的时候,从链表的尾部进行淘汰。但是,冷数据可能由于偶然的访问而被移动到链表头部,从而免于淘汰,同时造成真正的热数据被淘汰。而且,每访问一个数据都需要更新一次链表,并发性能差。通过随机采样实现该算法时,在需要淘汰元素时,随机选取指定数量的数据后,淘汰本地时间戳最小的数据。然而,频繁访问本地时间戳也会影响系统的并发性能,且冷数据可能由于偶然的访问而获得较大的本地时间戳而免于淘汰。
发明内容
有鉴于此,本发明实施例提供一种淘汰缓存数据的方法和装置,能够避免基于链表的实现方式,从而提高系统并发性能;引入本地时间戳,解决频繁调用系统产生时间戳带来的并发性能影响;引入访问次数,在一定程度上减少了由于冷数据的偶然访问而引起的热数据被淘汰现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种淘汰缓存数据的方法,包括:
接收数据访问请求;
若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
若是,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的。
可选地,所述方法还包括根据如下过程更新所述候选淘汰数组中的候选数据:
对所述预设的缓存中的缓存数据进行采样,得到多个采样数据;
确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值;
按照所述分值从小到大的顺序将所述缓存数据和所述候选数据写入所述候选淘汰数组中;
若所述候选淘汰数组已满,且存在剩余的缓存数据和/或候选数据时,则丢弃所述剩余的缓存数据和/或候选数据。
可选地,确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值包括:
对于每一采样数据或候选数据,确定所述采样数据或所述候选数据对应的本地时间戳和访问次数;
根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值。
可选地,根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值包括:
分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;
根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
可选地,所述方法还包括:
在将所述待访问的数据写入所述预设的缓存之后,记录所述待访问数据对应的本地时间戳和访问次数;
若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数;
若所述待访问的数据在所述预设的缓存中,则从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。
可选地,更新所述待访问的数据对应的本地时间戳和访问次数包括:
从预设的本地时间戳缓存单元中获取本地时间戳,将从所述本地时间戳缓存单元中获取的本地时间戳作为所述待访问的数据更新后的本地时间戳。
所述预设的缓存中的每一缓存数据对应的本地时间戳和访问次数保存在时间戳存储器和访问计数器中;
更新所述待访问的数据对应的本地时间戳和访问次数包括:
将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从所述预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳;
将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数。
可选地,所述本地时间戳缓存单元中的本地时间戳根据如下过程生成:按照预设的时间间隔生成本地时间戳。
可选地,根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值包括:
分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;
根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种淘汰缓存数据的装置,包括:
接收模块,用于接收数据访问请求;
确定模块,用于若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
淘汰模块,用于若所述预设的缓存已满,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的。
可选地,所述装置还包括采样模块,用于:对所述预设的缓存中的缓存数据进行采样,得到多个采样数据;确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值;按照所述分值从小到大的顺序将所述缓存数据和所述候选数据写入所述候选淘汰数组中;若所述候选淘汰数组已满,且存在剩余的缓存数据和/或候选数据时,则丢弃所述剩余的缓存数据和/或候选数据。
可选地,所述采样模块还用于:对于每一采样数据或候选数据,确定所述采样数据或所述候选数据对应的本地时间戳和访问次数;根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值。
可选地,所述采样模块还用于:分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
可选地,所述装置还包括记录模块,用于在将所述待访问的数据写入所述预设的缓存之后,记录所述待访问数据对应的本地时间戳和访问次数;
所述淘汰模块还用于:若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数;若所述待访问的数据在所述预设的缓存中,则从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。
可选地,所述淘汰模块还用于从预设的本地时间戳缓存单元中获取本地时间戳,将从所述本地时间戳缓存单元中获取的本地时间戳作为所述待访问的数据更新后的本地时间戳。
可选地,所述预设的缓存中的每一缓存数据对应的本地时间戳和访问次数保存在时间戳存储器和访问计数器中;
所述淘汰模块还用于:
将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从所述预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳;
将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数。
可选地,所述装置还包括时间戳生成模块,用于按照预设的时间间隔生成本地时间戳,并将生成的本地时间戳保存在本地时间戳缓存单元中。
可选地,所述数据访问请求包括待访问的数据的标识;
所述确定模块还用于:确定所述预设的缓存中是否存在所述待访问的数据的标识;若否,则确定所述待访问的数据不在预设的缓存中。
上述发明中的一个实施例具有如下优点或有益效果:通过在缓存已满的情况下,将候选淘汰数组中分值最低的候选数据从缓存中和候选淘汰数组中删除,并将所述待访问的数据写入缓存的方式,其中,候选数据的分值根据本地时间戳和访问次数得到,避免基于链表的实现方式,从而提高系统并发性能;引入本地时间戳,解决频繁调用系统产生时间戳带来的并发性能影响;引入访问次数,在一定程度上减少冷数据由于偶然访问而避免被淘汰的现象;本地时间戳和访问次数的更新,采样只尝试一次的方式,进一步提高了系统性能。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是本发明实施例的淘汰缓存数据的方法的主要流程的示意图;
图2是本发明实施例的淘汰缓存数据的方法的子流程的示意图;
图3是本发明另一实施例的淘汰缓存数据的方法的子流程的示意图;
图4是本发明另一实施例的淘汰缓存数据的方法的主要流程的示意图;
图5是本发明实施例的淘汰缓存数据的装置的主要模块的示意图;
图6是本发明实施例可以应用于其中的示例性系统架构图;
图7是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是本发明实施例的淘汰缓存数据的方法的主要步骤的流程示意图,如图1所示,该方法包括:
步骤S101:接收数据访问请求;所述数据访问请求包括待访问的数据的标识;
步骤S102:确定所述预设的缓存中是否存在所述待访问的数据的标识;
步骤S103:若否,则确定是否存在其他线程在获取所述待访问的数据;
步骤S104:若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
步骤S105:若是,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的;
步骤S106:在将所述待访问的数据写入所述预设的缓存之后,记录所述待访问数据对应的本地时间戳和访问次数;
步骤S107:若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数;
步骤S108:若所述待访问的数据在所述预设的缓存中,则从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。
在本实施例中,预设的缓存可以采用key-value(键值对)结构,key表示缓存数据的标识,value表示缓存数据。
对于步骤S104-S105,可以使用锁的方式或future task的方式确定是否有其他线程在获取待访问的数据。其中,锁是多线程并发共享数据,保证一致性的工具。Future表示一个任务的生命周期,并提供了方法来判断是否已经完成或取消,以及获取任务的结果和取消任务的接口。FutureTask提供了对Future的基本实现,可以调用方法去开始和取消一个计算,可以查询计算是否完成并且获取计算结果。只有当计算完成时才能获取到计算结果,一旦计算完成,计算将不能被重启或者被取消。
在本步骤中,在获取到待访问的数据之后需要将该待访问的数据写入预设的缓存中,以便于下次访问。在写入预设的缓存之前,需要判断该预设的缓存是否已满。若未满,则直接写入该待访问的数据。若已满,则需要淘汰该预设的缓存中的一个缓存数据。该被淘汰的缓存数据是淘汰候选数组中分值最低的候选数据。
候选淘汰数组中的候选数据是通过对预设的缓存中的缓存数据进行采样得到的,是用于缓存溢出时进行淘汰的。该候选淘汰数组可以存放下次进行缓存淘汰时的候选数据的标识,该候选淘汰数组中的候选数据可以按照分值从小到高的顺序排列。该候选淘汰数组的大小可配置。该候选淘汰数组中的候选数据不是一成不变的,是需要更新的。在可选的实施例中,如图2所示,可以根据如下过程更新候选淘汰数组中的候选数据:
步骤S201:对所述预设的缓存中的缓存数据进行采样,得到多个采样数据;
步骤S202:确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值;
步骤S203:按照所述分值从小到大的顺序将所述缓存数据和所述候选数据写入所述候选淘汰数组中;
步骤S204:若所述候选淘汰数组已满,且存在剩余的缓存数据和/或候选数据时,则丢弃所述剩余的缓存数据和/或候选数据。
在步骤S201中,可以采用均匀采样算法对缓存中的缓存数据进行采样,其中,可以按照指定的时间间隔进行采样,该时间间隔和采样的数据量都可配置。
在步骤S202中,可以根据如下过程确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值:对于每一采样数据或候选数据,确定所述采样数据或所述候选数据对应的本地时间戳和访问次数;根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值。
更具体的,可以分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
作为示例,定义候选淘汰数组中的候选数据和采样数据的标识组成x序列{xn},即x表示采样数据或候选数据的标识。假设候选淘汰数组的长度为k,k<n,采样得到的采样数据的数据量为p,p<n,必然有k+p=n。定义x序列中的xn所对应的本地时间戳的值为time(xn),所对应的访问次数为count(xn)。则,根据下式(1)计算归一化的本地时间戳,根据下式(2)计算归一化的访问次数。
其中,norm(time(xn))表示归一化的本地时间戳,norm(count(xn))表示归一化的访问次数。
得到归一化的本地时间戳和归一化的访问次数之后,根据下式(3)确定候选数据或采样数据的分值:
score(xn)=α×norm(time(xn))+(1-α)×norm(count(xn)) (3)
score(xn)表示分值,α是一个可配置的权重,0≤α≤1,其用于调节本地时间戳和访问次数的权重。在本实施例中,本地时间戳越大,访问次数越多证明该数据的重要性越大,即分值越大越重要,需要保留,所以本实施例更新候选淘汰数组中的候选数据时将分值较大者移出,进行保留;在淘汰时则直接淘汰分值最小的候选数据。
在步骤S203-S204中,可以采用插入排序的方式将采样数据和候选数据按照分值从小到大的顺序写入所述候选淘汰数组中。具体的,在获得采样数据之后,可以先判断候选淘汰数组中是否存在与采样数据相同的候选数据,若是,则删除候选淘汰数组中与所述采样数据相同的候选数据,并将候选淘汰数组中的候选数据向前平移,以补充空位。然后,对于每一采样数据,在所述候选淘汰数组中按照从后向前的顺序查找分值低于所述采样数据的第一个候选数据,将所述第一个候选数据作为目标候选数据;确定所述候选淘汰数组是否已满;若否,则将所述采样数据插入所述目标候选数据的后面;若是,则删除所述候选淘汰数组中最后一个候选数据,将所述目标候选数据后面的候选数据向后平移一位,并将所述采样数据插入所述目标候选数据的后面。
在步骤S106中,在将待访问的数据写入预设的缓存中之后,记录该待访问数据对应的本地时间戳和访问次数。具体的,可以将本实施例中保存在预设的缓存中的缓存数据(缓存数据中包括待访问的数据和候选数据)对应的本地时间戳记录在时间戳存储器中,对应的访问次数记录在访问计数器中。其中,时间戳存储器和访问计数器均可以采用key-value结构。
其中,本地时间戳可以从预设的本地时间戳缓存单元中获取。该本地时间戳可以按照预设的时间间隔生成。例如可以设置共享时钟线程,该共享时钟线程按照预设的时间间隔生成本地时间戳。本实施例利用共享时钟线程生成本地时间戳的作用是降低通过系统调用产生时间戳的代价,预设的时间间隔越长,代价越低。
在步骤S107中,若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。其中,在更新本地时间戳和访问次数时,只尝试更新一次,若更新失败则放弃更新。具体的,更新待访问的数据对应的本地时间戳包括:将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从所述预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳,将所述第一时间戳作为所述待访问的数据更新后的本地时间戳。本实施例中利用cas算法(Compare and Swap,比较并交换算法)更新时间戳存储器中的本地时间戳,如果更新失败,则直接放弃更新,这样虽然记录的本地时间戳不精确,但是系统并发性能得到改善,同时也足够支持本实施例的方法。其中,cas算法包含3个参数:内存值V,旧的预期值A,新值B,当且仅当V值等于A值时,将V的值改为B值,如果V值和A值不同,说明已经有其他线程做了更新,则当前线程什么都不做,最后返回当前V的真实值。当多个线程同时使用cas算法同时操作同一个变量时,只有其中一个线程会胜出并成功更新,其余均会失败,失败的线程放弃操作。
更新待访问的数据对应的访问次数包括:将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数,将所述第一访问次数作为所述待访问的数据更新后的访问次数。在本实施例中,访问计数器也是一个key-value结构,value表示访问次数。每次访问都会对相应key的value进行自增。本实施例对value的自增使用cas优化,每个线程对value进行自增操作时如果cas失败则直接放弃自增。这样得到的key的访问次数虽不精确,但是大大提高了系统的并发性能,同时也足够支撑本实施例的方法。
本发明实施例的淘汰缓存数据的方法,通过在缓存已满的情况下,将候选淘汰数组中分值最低的候选数据从缓存中和候选淘汰数组中删除,并将所述待访问的数据写入缓存的方式,其中,候选数据的分值根据本地时间戳和访问次数得到,避免基于链表的实现方式,从而提高系统并发性能;引入本地时间戳,解决频繁调用系统产生时间戳带来的并发性能影响;引入访问次数,在一定程度上减少冷数据由于偶然访问而避免被淘汰的现象;本地时间戳和访问次数的更新,采样只尝试一次的方式,进一步提高了系统性能。
为使本发明实施例的淘汰缓存数据的方法更加清楚,以下述实施例为例进行说明。
在本实施例中依赖如下组件实现该淘汰缓存数据的方法:共享时钟线程、缓存、采样线程、候选淘汰数组、访问计数器及时间戳存储器。下面对每个组件进行说明。
共享时钟线程的作用是按照预设的时间间隔(可配置)生成本地时间戳,并缓存到为该线程分配的存储空间中(即上文的本地时间戳缓存单元),从而供外部使用。如图3所示,在共享时钟线程中维护着一个本地时间戳,并按照配置的时间间隔对该本地时间戳进行更新。当需要获取本地时间戳时,可以直接获取该共享时钟线程所维护的本地时间戳,从而降低对系统的并发压力,降低通过系统调用产生时间戳的代价,更新本地时间戳的时间间隔越长,代价越低。
缓存用于存储数据,其采用key-value结构。Key表示缓存数据的标识,value表示缓存数据。
采样线程用于在指定的时间间隔(可配置)内使用均匀采样算法对缓存中的缓存数据进行采样(采样的数据量可配置)。在本实施例将采样得到的缓存数据记为采样数据。
采样线程的工作流程可以如图2所示。在构造候选淘汰数组的时候是从数组尾端删除,这样每次采样后,都会把高分的key移除数组,留下低分的key等待发生缓存溢出的时候进行淘汰。如上所说,当缓存满了的时候,或需要进行缓存淘汰的时候,会选取分数低(也就是从数组头部移除)。
候选淘汰数组(大小可配置)中存放的为下次缓存溢出进行淘汰时的候选数据的标识。向该候选淘汰数组存放数据的过程为:计算候选淘汰数组中候选数据和采样数据的分值,按照分值从小到大的顺序写入该候选淘汰数组中,直到候选淘汰数组放满为止。分值越低,在该候选淘汰数组中的位置越靠前。剩余的候选数据或采样数据进行舍弃。在进行数据淘汰时,直接淘汰候选淘汰数组中第一个标识对应的缓存数据。
在可选的实施例中,还可以通过定时任务删除候选淘汰数组中前N个标识对应的缓存数据。
访问计数器也采用key-value结构,每次访问缓存数据都需要更新其对应的访问次数,即对value进行自增。在本实施例中,对value的自增使用cas优化,每个线程对value进行自增操作时如果cas失败则直接放弃自增。这样得到的key的访问次数虽不精确,但是大大提高了系统的并发性能,同时也足够支撑算法的运行。
时间戳存储器也是一个key-value结构,每次访问都会从共享时钟线程的缓存中获取当前的本地时间戳,并更新对应key的本地时间戳。同样,在本实施例中也对value的修改使用cas优化。这样记录的本地时间戳将更加不精确,但是系统并发性能将得到改善,同时也足够支撑算法的运行。
图4所示为本实施例的查询数据的流程示意图,如图4所示,包括:
(1)如果key所对应的值(即待访问的数据)在缓存中已经存在,则直接更新时间戳存储器和访问计数器,然后返回key所对应的值。
(2)如果key所对应的值不存在并且已经有其他线程在获取值,则直接等待。在等到其他线程获取的值后,更新时间戳存储器和访问计数器,然后返回key所对应的值。
(3)如果key所对应的值不存在并且没有其他线程在获取值,则调用获取值的方法来获取值。在获取值成功后,如果缓存已满则会清除候选数组中的第一个key(得分最低的key)所对应的各种数据。然后将获取的值放入缓存中,并更新时间错存储器和访问计数器,然后返回key所对应的值。
图5是本发明实施例的淘汰缓存数据的装置500的主要模块的示意图,如图5所示,该装置500包括
接收模块501,用于接收数据访问请求;
确定模块502,用于若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
淘汰模块503,用于若所述预设的缓存已满,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的。
可选地,所述装置还包括采样模块,用于:对所述预设的缓存中的缓存数据进行采样,得到多个采样数据;确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值;按照所述分值从小到大的顺序将所述缓存数据和所述候选数据写入所述候选淘汰数组中;若所述候选淘汰数组已满,且存在剩余的缓存数据和/或候选数据时,则丢弃所述剩余的缓存数据和/或候选数据。
可选地,所述采样模块还用于:对于每一采样数据或候选数据,确定所述采样数据或所述候选数据对应的本地时间戳和访问次数;根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值。
可选地,所述采样模块还用于:分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
可选地,所述装置还包括记录模块,用于在将所述待访问的数据写入所述预设的缓存之后,记录所述待访问数据对应的本地时间戳和访问次数;
所述淘汰模块还用于:若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数;若所述待访问的数据在所述预设的缓存中,则从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。
可选地,所述淘汰模块还用于从预设的本地时间戳缓存单元中获取本地时间戳,将从所述本地时间戳缓存单元中获取的本地时间戳作为所述待访问的数据更新后的本地时间戳。
可选地,所述预设的缓存中的每一缓存数据对应的本地时间戳和访问次数保存在时间戳存储器和访问计数器中;
所述淘汰模块还用于:
将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从所述预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳;
将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数。
可选地,所述装置还包括时间戳生成模块,用于按照预设的时间间隔生成本地时间戳,并将生成的本地时间戳保存在本地时间戳缓存单元中。
可选地,所述数据访问请求包括待访问的数据的标识;
所述确定模块还用于:确定所述预设的缓存中是否存在所述待访问的数据的标识;若否,则确定所述待访问的数据不在预设的缓存中。
本发明实施例的淘汰缓存数据的装置,通过在缓存已满的情况下,将候选淘汰数组中分值最低的候选数据从缓存中和候选淘汰数组中删除,并将所述待访问的数据写入缓存的方式,其中,候选数据的分值根据本地时间戳和访问次数得到,避免基于链表的实现方式,从而提高系统并发性能;引入本地时间戳,解决频繁调用系统产生时间戳带来的并发性能影响;引入访问次数,在一定程度上减少冷数据由于偶然访问而避免被淘汰的现象;本地时间戳和访问次数的更新,采样只尝试一次的方式,进一步提高了系统性能。
上述装置可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
图6示出了可以应用本发明实施例的淘汰缓存数据的方法或淘汰缓存数据的装置的示例性系统架构600。
如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所浏览的购物类网站提供支持的后台管理服务器。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息)反馈给终端设备。
需要说明的是,本发明实施例所提供的淘汰缓存数据的方法一般由服务器605执行,相应地,淘汰缓存数据的装置一般设置于服务器605中。
应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图7,其示出了适于用来实现本发明实施例的终端设备的计算机系统700的结构示意图。图7示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、访问模块、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该单元本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片访问请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
接收数据访问请求;
若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
若是,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的。
本发明实施例的技术方案,通过在缓存已满的情况下,将候选淘汰数组中分值最低的候选数据从缓存中和候选淘汰数组中删除,并将所述待访问的数据写入缓存的方式,其中,候选数据的分值根据本地时间戳和访问次数得到,避免基于链表的实现方式,从而提高系统并发性能;引入本地时间戳,解决频繁调用系统产生时间戳带来的并发性能影响;引入访问次数,在一定程度上减少冷数据由于偶然访问而避免被淘汰的现象;本地时间戳和访问次数的更新,采样只尝试一次的方式,进一步提高了系统性能。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (11)

1.一种淘汰缓存数据的方法,其特征在于,包括:
接收数据访问请求;
若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
若是,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的,且根据采样数据或候选数据对应的本地时间戳和访问次数确定分值;
还包括:所述预设的缓存中的每一缓存数据对应的本地时间戳和访问次数保存在时间戳存储器和访问计数器中;更新所述待访问的数据对应的本地时间戳和访问次数包括:将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳;将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括根据如下过程更新所述候选淘汰数组中的候选数据:
对所述预设的缓存中的缓存数据进行采样,得到多个采样数据;
确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值;
按照所述分值从小到大的顺序将所述缓存数据和所述候选数据写入所述候选淘汰数组中;
若所述候选淘汰数组已满,且存在剩余的缓存数据和/或候选数据时,则丢弃所述剩余的缓存数据和/或候选数据。
3.根据权利要求2所述的方法,其特征在于,确定所述多个采样数据的分值和所述候选淘汰数组中的候选数据的分值包括:
对于每一采样数据或候选数据,确定所述采样数据或所述候选数据对应的本地时间戳和访问次数;
根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值。
4.根据权利要求3所述的方法,其特征在于,根据所述本地时间戳和所述访问次数,确定所述采样数据或所述候选数据对应的分值包括:
分别对所述本地时间戳和所述访问次数进行归一化,得到归一化的本地时间戳和归一化的访问次数;
根据所述归一化的本地时间戳、所述归一化的访问次数和预设的权重,确定所述采样数据或所述候选数据对应的分值。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在将所述待访问的数据写入所述预设的缓存之后,记录所述待访问数据对应的本地时间戳和访问次数;
若所述待访问的数据不在所述预设的缓存中,并且存在其他线程在获取所述待访问的数据,则等待所述其他线程将所述待访问的数据写入所述预设的缓存中,在等到所述其他线程将所述待访问的数据写入所述预设的缓存之后,从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数;
若所述待访问的数据在所述预设的缓存中,则从所述预设的缓存中获取所述待访问的数据,并更新所述待访问的数据对应的本地时间戳和访问次数。
6.根据权利要求5所述的方法,其特征在于,更新所述待访问的数据对应的本地时间戳包括:
从预设的本地时间戳缓存单元中获取本地时间戳,将从所述本地时间戳缓存单元中获取的本地时间戳作为所述待访问的数据更新后的本地时间戳。
7.根据权利要求5所述的方法,其特征在于,所述本地时间戳缓存单元中的本地时间戳根据如下过程生成:
按照预设的时间间隔生成本地时间戳。
8.根据权利要求1所述的方法,其特征在于,所述数据访问请求包括待访问的数据的标识;
所述方法还包括根据如下过程确定所述待访问的数据是否在所述预设的缓存中:确定所述预设的缓存中是否存在所述待访问的数据的标识;若否,则确定所述待访问的数据不在预设的缓存中。
9.一种淘汰缓存数据的装置,其特征在于,包括:
接收模块,用于接收数据访问请求;
确定模块,用于若待访问的数据不在预设的缓存中,并且没有其他线程在获取所述待访问的数据,则调用预设的方法获取所述待访问的数据,并确定所述预设的缓存是否已满;
淘汰模块,用于若所述预设的缓存已满,则确定候选淘汰数组中分值最低的候选数据,将所述分值最低的候选数据从所述预设的缓存中和所述候选淘汰数组中删除,并将所述待访问的数据写入所述预设的缓存;其中,所述候选淘汰数组中的候选数据是从所述预设的缓存中采样得到的,且根据采样数据或候选数据对应的本地时间戳和访问次数确定分值;所述预设的缓存中的每一缓存数据对应的本地时间戳和访问次数保存在时间戳存储器和访问计数器中;
淘汰模块,还用于更新所述待访问的数据对应的本地时间戳和访问次数包括:将所述时间戳存储器中的所述待访问的数据对应的本地时间戳作为第一时间戳;将从预设的本地时间戳缓存单元中获取的本地时间戳作为第二时间戳;将内存中所述待访问的数据对应的本地时间戳作为第三时间戳;确定所述第一时间戳与所述第三时间戳是否相同;若是,则将所述第二时间戳作为所述待访问的数据更新后的本地时间戳;若否,则放弃更新所述待访问的数据对应的本地时间戳;将所述访问计数器中的所述待访问的数据对应的访问次数作为第一访问次数;将所述第一访问次数加1,得到第二访问次数,将内存中所述待访问的数据对应的访问次数作为第三访问次数;确定所述第一访问次数与所述第三访问次数是否相同;若是,则将所述第二访问次数作为所述待访问的数据更新后的访问次数;若否,则放弃更新所述待访问的数据对应的访问次数。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
11.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8中任一所述的方法。
CN202110412028.6A 2021-04-16 淘汰缓存数据的方法和装置 Active CN113076067B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110412028.6A CN113076067B (zh) 2021-04-16 淘汰缓存数据的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110412028.6A CN113076067B (zh) 2021-04-16 淘汰缓存数据的方法和装置

Publications (2)

Publication Number Publication Date
CN113076067A CN113076067A (zh) 2021-07-06
CN113076067B true CN113076067B (zh) 2024-07-16

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111061429A (zh) * 2019-11-22 2020-04-24 北京浪潮数据技术有限公司 一种数据访问方法、装置、设备、介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111061429A (zh) * 2019-11-22 2020-04-24 北京浪潮数据技术有限公司 一种数据访问方法、装置、设备、介质

Similar Documents

Publication Publication Date Title
CN109657174B (zh) 用于更新数据的方法和装置
US9665658B2 (en) Non-blocking queue-based clock replacement algorithm
CN108984553B (zh) 缓存方法和装置
US9148329B1 (en) Resource constraints for request processing
WO2007139824A2 (en) Synchronizing structured web site contents
US11113195B2 (en) Method, device and computer program product for cache-based index mapping and data access
US10585807B2 (en) Balanced cache for recently frequently used data
CN110909022A (zh) 一种数据查询方法和装置
CN115599821A (zh) 缓存控制方法、装置、设备及介质
CN110764796A (zh) 更新缓存的方法和装置
CN113094392A (zh) 数据缓存的方法和装置
CN107748649B (zh) 一种缓存数据的方法和装置
CN113076067B (zh) 淘汰缓存数据的方法和装置
CN101459599A (zh) 一种实现缓存数据访问与加载并发进行的方法及系统
CN115658171A (zh) 一种轻量级解决java分布式应用配置动态刷新的方法及系统
CN110879818B (zh) 一种获取数据的方法、装置、介质和电子设备
CN113138943B (zh) 一种处理请求的方法和装置
CN113076067A (zh) 淘汰缓存数据的方法和装置
CN113568752A (zh) 一种静态资源加载方法、装置、设备及存储介质
CN110889053B (zh) 一种接口数据的缓存方法、装置及计算设备
CN113722113A (zh) 一种流量统计的方法和装置
CN113347052A (zh) 通过访问日志统计用户访问数据的方法和装置
CN110716885B (zh) 数据管理方法、装置、电子设备和存储介质
CN113778909B (zh) 一种缓存数据的方法和装置
CN116383537B (zh) 一种页面数据的预加载方法、装置、设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant