CN105302840B - 一种缓存管理方法与设备 - Google Patents
一种缓存管理方法与设备 Download PDFInfo
- Publication number
- CN105302840B CN105302840B CN201410373843.6A CN201410373843A CN105302840B CN 105302840 B CN105302840 B CN 105302840B CN 201410373843 A CN201410373843 A CN 201410373843A CN 105302840 B CN105302840 B CN 105302840B
- Authority
- CN
- China
- Prior art keywords
- caching
- record
- information
- cache
- major key
- 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
Links
Abstract
本申请的目的是提供一种缓存管理方法与设备。与现有技术相比,本申请所述的缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息,接着,更新所述目标缓存记录所对应的引用信息与最近访问信息。由于在缓存记录中设置引用信息和最近访问信息能够帮助缓存管理设备设定缓存记录的淘汰机制,所述缓存管理设备确保缓存中存放近期活跃的缓存记录,避免活跃的缓存记录被淘汰,同时,对于“引用信息”和“最近访问信息”的修改只需通过一条原子指令就可以完成,无需对缓存记录进行锁操作,避免了现有缓存管理算法修改时的全局锁竞争,有效提高了并发效率。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种缓存管理技术。
背景技术
缓存是为了提升系统性能而开辟的一块内存空间。缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘接口的性能或者业务系统的数据处理和获取可能非常费时,当业务系统的数据请求量很大时,频繁的IO和逻辑处理会导致硬盘和CPU资源的瓶颈出现。因此,缓存的作用就是将这些数据保存在内存中,当有其他线程或者客户端需要查询相同的数据资源时,直接从缓存中返回数据,这样不但可以提高系统的响应时间,同时也可以节省对这些数据的处理流程的资源消耗,整体上来说,系统性能会有大大的提升。
目前常用的缓存技术主要有两种:
1)分桶分布锁方案
缓存由多个桶组成,每个桶包含一个数据块链表。每条链表使用一个锁来保护插入和删除操作。该分布式锁能够提高多线程并发访问的并发性,但是该方法只能得到局部最优,当数据访问不均衡时,即多个并发线程同时访问同一个分桶时,还是有非常严重的锁竞争。
2)LRU(Least Recently Used近期最少使用算法)+超时淘汰策略的缓存替换方法
LRU方法是最常使用的缓存淘汰算法。该方法把所有的数据块按照最近访问时间,串联在一条LRU链表中。当某次访问命中Cache中的数据块时,该数据块被移置到LRU链表的队尾。当需要换入换出时,每次淘汰LRU链表的表头数据块,即最久没有被访问的数据块。当数据访问满足LRU特性时,该缓存具有很高的命中率,反之则未必能有高的缓存命中率。同时,LRU链表的修改需要全局锁保护,在多线程并发访问下,LRU链表的插入和删除操作容易造成锁竞争,影响并发性。
超时策略是LRU的一个补充实现。它定义了一个超时时间,比如5分钟。当缓存需要从内存淘汰数据块时,它对数据块进行扫描,将所有超过超时时间的数据块淘汰。
上述两种方式可能无法适应更为复杂、多变的实际应用。比如,复杂的数据查询语句的查询操作通常需要较长的响应时间,这些查询所对应的数据块需要在一段较长的时间保留在缓存中,以便于在整个查询的计算过程中被访问。但是,LRU算法仅仅按照“最近访问时间”排序来淘汰数据块,所以这些查询的数据块非常可能在还在被使用的时间段内被淘汰出缓存。这类查询过程中可能需要一次甚至数次反复将数据从磁盘读取到缓存中。又比如,在业务场景中经常会出现瞬时的临时访问高峰。一种临时访问高峰的场景是在短时间内访问大量数据,但是这些大量数据可能仅仅只在这个时刻用到,在将来一段较长的时间并不会再被使用。最优的缓存算法应该尽量保留原先被频繁访问而且在将来还会被访问的真实热数据。但是,上述两种算法不仅易产生锁竞争,使得热数据降低并发效率,还会因完全基于时间序列淘汰,被访问高峰的大量数据清洗,淘汰出缓存。
因此,需要一种新的缓存管理技术来提高并发以及增加缓存命中率。
发明内容
本申请的目的是提供一种缓存管理方法与设备。
根据本申请的一个方面,提供了一种缓存管理方法,其中,该方法包括:
在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息;
更新所述目标缓存记录所对应的引用信息与最近访问信息。
根据本申请的另一方面,还提供了一种缓存管理设备,其中,该设备包括:
第一装置,用于在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息;
第二装置,用于更新所述目标缓存记录所对应的引用信息与最近访问信息。
与现有技术相比,本申请通过在缓存记录中设置引用信息和最近访问信息能够帮助缓存管理设备设定缓存记录的淘汰机制,以确保缓存中存放近期活跃的缓存记录,避免活跃的缓存记录被淘汰,同时,对于“引用信息”和“最近访问信息”的修改只需通过一条原子指令就可以完成,无需对缓存记录进行全局锁操作,避免了LRU算法(Least RecentlyUsed近期最少使用算法)修改时的全局锁竞争,有效提高了并发效率;进一步的,在设定淘汰机制时,采用当引用信息为零时,将相应的缓存记录予以淘汰的机制,能够有效保证了正在被使用的数据块(比如长查询的数据)始终驻留在内存缓存中;更近一步地,淘汰缓存记录时,优先淘汰最近访问次数较小的非活跃数据,能够极大地提高缓存命中率。经实验,本申请能够将缓存命中率从80%提高到95%以上,特别在大量线程(如32线程)的场景下,能将效率提高至现有LRU算法的6倍以上。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种缓存管理设备示意图;
图2示出根据本申请一个优选实施例的一种缓存管理设备示意图;
图3示出根据本申请另一个优选实施例的一种缓存管理设备示意图;
图4示出根据本申请另一个优选实施例的一种缓存管理设备示意图;
图5示出根据本申请另一个方面的一种缓存管理方法流程图;
图6示出根据本申请一个优选实施例的一种缓存管理方法流程图;
图7示出根据本申请另一个优选实施例的一种缓存管理方法流程图;
图8示出根据本申请另一个优选实施例的一种缓存管理方法流程图;
图9示出根据本申请另一个优选实施例的一种缓存管理方法流程图;
图10示出根据本申请另一个优选实施例的一种缓存管理方法流程图。
图11示出根据本申请与现有技术中LRU算法的效果比较示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种缓存管理设备,其中,所述缓存管理设备包括第一装置和第二装置。具体地,第一装置用于在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息;第二装置用于更新所述目标缓存记录所对应的引用信息与最近访问信息。
在此,所述缓存管理设备可由网络主机、单个网络服务器、多个网络服务器集或多个服务器等实现。本领域技术人员应能理解上述网络设备仅为举例,其他现有的或今后可能出现的网络设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
具体地,所述第一装置中预先缓存了多个缓存记录,其中,每个缓存记录包含引用信息和最近访问信息,当有终端设备通过http、https、程序接口等约定通信方式,从不同应用/网络平台的客户端向所述第一装置发出一请求时,所述第一装置解析该请求并得到主键信息,接着,在包含多个缓存记录的缓存中查询确定与所述主键信息相匹配的目标缓存记录。其中,所述终端设备包括但不限于:手机、笔记本电脑、个人电脑、平板电脑等。
在此,所述主键信息为包括缓存中各缓存记录的唯一标识信息,例如,通常用于标识各缓存记录在磁盘中的位置的信息。
所述引用信息是指正在被引用的缓存记录的标识。所述引用信息可以是标识正在被引用缓存记录的数量,也可以是标识正在被引用缓存记录的状态。例如,所述引用信息为3,说明有3个线程正在引用所述缓存记录,当没有线程正在引用所述缓存记录时,该值为0。又如,所述引用信息为true(或1),说明有线程正在引用所述缓存记录,当没有线程正在引用所述缓存记录时,该值为false(或0)。
所述最近访问信息包括但不限于:表示所述缓存记录在缓存期间被访问的次数、访问者的信息等。其中,所述缓存期间可以由所述第一装置设定,也可以由所述缓存管理设备中的其他装置来设定。例如,所述第一装置预设每个缓存记录的缓存期间为5分钟,即,每隔5分钟,所述第一装置按照预设的淘汰规则来清理缓存记录。所述淘汰规则将在后续予以详细描述。
优选地,所述引用信息与所述最近访问信息通过一条原子指令来更新。例如,在此,“引用信息”和“最近访问信息”可以存储在同一个数据上。比如用一个4字节的int(整型)数据,第一个字节用于存储“引用信息”,后三个字节用于存储“最近访问信息”。而一条原子指令就可以更新4字节的int数据。
本领域技术人员应能理解上述主键信息、引用信息和最近访问信息仅为举例,其他现有的或今后可能出现的主键信息、引用信息和最近访问信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在此,所述第一装置在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录的方式包括但不限于:1)各缓存记录以队列、堆栈、数组、或链表等方式记录在缓存中,所述第一装置根据缓存记录的存储方式来查询并确定与所解析的主键信息相一致的目标缓存记录。例如,在缓存中的各缓存记录依次为:a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb)、a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda)、a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba),它们以队列的方式予以暂存,当所述第一装置通过解析得到所要调取的目标缓存记录的主键信息为11,则通过对所述缓存中队列的查找,所述第一装置确定缓存记录a1为目标缓存记录。
2)所述第一装置预先将各缓存记录的主键信息进行Hash映射,并根据映射情况将缓存记录分入不同缓存子集中,当所述第一装置解析来自终端设备的请求时,先对该请求中的主键信息进行Hash映射,以根据映射结果找到对应的缓存子集,再从相应的缓存子集中查找与该主键信息相同的缓存记录作为目标缓存记录。其中,所述Hash映射的方式包括但不限于:将主键信息进行模运算,并将模运算所得的余数相同的主键信息所对应的缓存记录分入同一个缓存子集。其中,优选的以素数为模值进行模运算。
例如,缓存中的缓存记录包括:a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb)、a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda)、a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba),所述第一装置先以3做模将各缓存记录a1、a2、a3、a4进行模运算,并将余数为2的缓存记录a1、a4分入缓存子集A1中,将余数为0的缓存记录a2分入缓存子集A2中,将余数为1的缓存记录a3分入缓存子集A3中。当所述第一装置解析来自终端设备的请求并得到该请求中的主键信息为11,则先通过对该请求中的主键信息做模运算确定在缓存子集A1中查找目标缓存记录,然后在所述缓存子集A1中查找主键信息为11的目标缓存记录为a1。
本领域技术人员应能理解上述查询目标缓存记录的方式仅为举例,其他现有的或今后可能出现的查询目标缓存记录的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述缓存使用分布锁。其中,当在所述缓存中未查询到与所述主键信息相匹配的目标缓存记录,所述第一装置对该主键信息所对应的缓存子集执行相应的加锁操作;接着,所述第一装置在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录。
具体地,所述第一装置在解析出请求中的主键信息,并按照取模确定缓存子集的方式未能在相应缓存子集中找到相匹配的目标缓存记录时,所述第一装置对该主键信息所对应的缓存子集执行加锁操作,并在加锁后再次查找与所述主键信息相匹配的目标缓存记录。若查找到,则引用之,更新数据的“引用信息”与“最近访问信息”,释放锁;若还未找到,则所述第一装置在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作,再将存储空间中对应的数据写入所述空缓存记录。例如,在此所进行的无锁化查找,并不遍历对应的缓存子集,而只是查找缓存子集的热数据(例如引用信息大于0的缓存记录);当在所述缓存子集中通过无锁查找未查询到与所述主键信息相匹配的目标缓存记录时,所述第一装置对该主键信息所对应的缓存子集执行加锁操作,并在加锁后再次查找与所述主键信息相匹配的目标缓存记录。若查找到,则引用之,若还未找到,则所述第一装置在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作,再将存储空间中对应的数据写入所述空缓存记录。数据写入完成后,将数据状态标记为可用。
继续以缓存记录a1、a2、a3、a4的示例为例进行说明。所述第一装置解析的主键信息为21,所述第一装置对该主键信息进行模3运算,根据余数为0确定从缓存子集A2中查找主键信息为21的目标缓存记录,所述第一装置在缓存子集A2中未能找到目标缓存记录,则对缓存子集A2进行加锁操作,以阻止其他线程对该缓存子集A2的插入/删除操作,并再次查找,还未能找到,则在所述缓存子集A2中创建一个主键信息为21的空缓存记录,并执行释放锁操作,再到磁盘中找到主键信息为21的数据bbd,将其写入所述空缓存记录中并标记数据状态为可用。
所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息。
具体地,所述第一装置在确定目标缓存记录的同时,还通知所述第二装置,由所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息。
例如,所找到的目标缓存记录中的引用信息为正在被引用缓存记录的数量、最近访问信息为最近访问的数量,则所述第二装置分别将所述目标缓存记录所对应的引用信息和最近访问信息加1。
又如,所找到的目标缓存记录中的引用信息为false、最近访问信息中的数量为2,则所述第二装置将所述目标缓存记录所对应的引用信息改为true,将最近访问信息中的数量加1。
图2示出根据本申请一个优选实施例的一种缓存管理设备。所述缓存管理设备除了包含所述第一装置、第二装置外,还包含第三装置。其中,所述第一装置在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,并通知所述第二装置和第三装置。由所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息。由所述第三装置引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在此,缓存管理设备的第一装置和第二装置与图1中缓存管理设备的第一装置和第二装置的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
具体地,第一装置解析了来自终端设备/其他网络设备所发送的请求,并得到主键信息后,在所包含的多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,同时,所述第一装置通知所述第二装置和第三装置,则所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息,所述第三装置引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。
在此,所述引用信息为正在被引用缓存记录的数量,则更新所述目标缓存记录所对应的引用信息的方式为:将所述引用信息进行减1操作。
所述引用信息为布尔值true(或1),则更新所述目标缓存记录所对应的引用信息的方式为:当所述目标缓存记录被所有线程使用完毕时,将所述目标缓存记录中的引用信息改为false(或0)。
按照图8所示的流程,所述第一装置、第二装置和第三装置的执行过程举例如下:
所述第一装置将缓存中的各缓存记录的主键信息以3为模进行模运算后,按照余数相同将各缓存记录分为三个子集,其中,缓存子集A1中包含:缓存记录a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、缓存记录a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba);
缓存子集A2中包含:缓存记录a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb);
缓存子集A3中包含:缓存记录a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda);
所述第一装置解析出主键信息为22,则所述第一装置以3为模,计算出主键信息为22的缓存记录分属于缓存子集A3中,并在缓存子集A3中进行查找,但未能找到与22相一致的主键信息,接着,所述第一装置将所述缓存子集A3进行加锁操作,并再次查找,仍未找到,则所述第一装置创建一个主键信息为22的空缓存记录,并执行释放锁操作,再按照所述主键信息22所指示的位置到磁盘中找到主键信息为22的数据为cdd,并将数据cdd写入所述空缓存记录中,并通知所述第二装置和第三装置。所述第二装置根据通知将主键信息为22的缓存记录中的引用信息和最近访问信息各自加1。所述第三装置根据通知使用所述缓存记录,并在使用完毕时将所对应的引用信息减1。
图3示出根据本申请又一个优选实施例的一种缓存管理设备。所述缓存管理设备除了包含第一装置、第二装置、第三装置外,还包含第四装置。所述第一装置在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,并通知所述第二装置和第三装置。由所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息。由所述第三装置引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在所述缓存管理设备运行期间,所述第四装置用于实时监视缓存记录的分布,以便帮助所述第三装置敏捷的做出引用响应。即所述第四装置当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。在此,缓存管理设备的第一装置、第二装置和第三装置与图2中缓存管理设备的第一装置、第二装置和第三装置的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
在此,所述第一触发条件包括但不限于以下至少任一项:1)所述缓存子集的平均长度超过最长阈值。2)所述缓存子集的平均长度小于最短阈值。
在此,所述第四装置调整所述缓存中缓存记录的分布的方式包括:1)根据所述第一触发条件确定所述缓存所对应的子集数量信息。例如,所述第四装置预设缓存子集的平均长度不得超过4,当各缓存子集中的缓存数量平均超过4时,所述第四装置增加缓存子集的数量,例如将缓存子集的数量加至下个素数,并对各缓存记录重新分组,由此来实现缓存的扩容。
2)根据所述子集数量信息调整所述缓存中缓存记录的分布。例如,所述第四装置预设缓存子集的平均长度不得低于1,当缓存中的缓存子集中的缓存数量平均少于1时,所述第四装置将用于划分缓存子集的模值由5减少为下一个素数3,并对各缓存记录重新分组,以便将缓存子集的数量由5个减少至3个,由此来实现缓存的缩容。
本领域技术人员应能理解上述调整所述缓存中缓存记录的分布的方式仅为举例,其他现有的或今后可能出现的调整所述缓存中缓存记录的分布的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
需要说明的是,本领域技术人员应该理解,所述缓存管理设备还可以包含第一装置、第二装置和第四装置。
图4示出根据本申请又一个优选实施例的一种缓存管理设备。所述缓存管理设备除了包含第一装置、第二装置、第三装置和第四装置外,还包含第五装置。
所述第一装置在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,并通知所述第二装置和第三装置。由所述第二装置更新所述目标缓存记录所对应的引用信息与最近访问信息。由所述第三装置引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在所述缓存管理设备运行期间,所述第四装置用于实时监视缓存记录的分布,以便帮助所述第三装置敏捷的做出响应。即所述第四装置当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。同时,所述第五装置用于当满足预定的第二触发条件时,对所述缓存中的缓存记录执行淘汰操作,其中,被淘汰的缓存记录所对应的引用信息为零。在此,缓存管理设备的第一装置、第二装置、第三装置和第四装置与图3中缓存管理设备的第一装置、第二装置、第三装置和第四装置的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
在此,所述第二触发条件包括但不限于:1)淘汰轮询时间。例如,所述第五装置预设淘汰轮询时间为2分钟,则每隔2分钟,所述第五装置对所述缓存的所有分布锁执行加锁操作,并以当前淘汰指针所指位置开始将缓存中的引用信息为0的缓存记录予以删除,并将指针指向下一条缓存记录,在轮询过后,执行释放锁操作。2)缓存接近或达到饱和。例如,当缓存达到或超出预设的临界值时,所述第五装置对所述缓存的所有分布锁执行加锁操作,并逐个排查,以将缓存中的引用信息为0且访问次数较小的缓存记录优先淘汰(删除的缓存记录数据总量可以由缓存系统自适应设定也可以满足用户的预设值),在轮询过后,执行释放锁操作。
本领域技术人员应能理解上述第二触发条件仅为举例,其他现有的或今后可能出现的第二触发条件如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述第五装置从所述缓存中淘汰指针所指向的缓存记录开始执行如下操作,直至满足对应的淘汰停止条件:更新所述淘汰指针所指向的缓存记录所对应的最近访问信息;若该缓存记录所对应的引用信息与最近访问信息均为零,则淘汰该缓存记录;使所述淘汰指针指向该缓存记录的下一个缓存记录。
在此,所述淘汰停止条件包括但不限于:轮询完毕所有的缓存记录、或缓存的剩余空间满足预设空间条件等。其中,所述预设空间条件包括但不限于:缓存的剩余空间达到缓存空间的百分比、或缓存的剩余空间大于某一预设值等。
例如,所述第五装置预设淘汰轮询时间为2分钟,当淘汰轮询时间开始时,所述第五装置从上一轮淘汰指针所指向的缓存子集A3中的缓存记录a3开始,将缓存记录a3的最近访问信息和引用信息减1,当该最近访问信息和引用信息均为0时,将缓存记录a3从缓存中删除,接着,指向缓存子集A3中的下一缓存记录b1,并按缓存记录a3的更新方式同样更新,若缓存记录b1中的最近访问信息不为0、引用信息为0,则不淘汰该条缓存记录b1,并继续指向下一条缓存记录,以此类推,所述第五装置轮询所述缓存子集A3中所有缓存记录后,轮询下一个缓存子集,直至轮询完所有的缓存子集。
需要说明的是,本领域技术人员应该理解,所述缓存管理设备可以按需求包含第一装置、第二装置和第五装置。所述缓存管理设备还可以按需求包含第一装置、第二装置、第三装置和第五装置。
图5示出根据本申请一个方面的一种缓存管理方法。
所述缓存管理方法包括步骤S1和S2。具体地,在步骤S1中,所述缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息;在步骤S2中,所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。
在此,所述缓存管理设备可由网络主机、单个网络服务器、多个网络服务器集或多个服务器等实现。本领域技术人员应能理解上述网络设备仅为举例,其他现有的或今后可能出现的网络设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
具体地,所述缓存管理设备中预先缓存了多个缓存记录,其中,每个缓存记录包含引用信息和最近访问信息,当有终端设备通过http、https、程序接口等约定通信方式,从不同应用/网络平台的客户端向所述缓存管理设备发出一请求时,所述缓存管理设备解析该请求并得到主键信息,接着,在包含多个缓存记录的缓存中查询确定与所述主键信息相匹配的目标缓存记录。其中,所述终端设备包括但不限于:手机、笔记本电脑、个人电脑、平板电脑等。
在此,所述主键信息为包括缓存中各缓存记录的唯一标识信息,例如,通常用于标识各缓存记录在磁盘中的位置的信息。
所述引用信息是指正在被引用的缓存记录的标识。所述引用信息可以是标识正在被引用缓存记录的数量,也可以是标识正在被引用缓存记录的状态。例如,所述引用信息为3,说明有3个线程正在引用所述缓存记录,当没有线程正在引用所述缓存记录时,该值为0。又如,所述引用信息为true(或1),说明有线程正在引用所述缓存记录,当没有线程正在引用所述缓存记录时,该值为false(或0)。
所述最近访问信息包括但不限于:表示所述缓存记录在缓存期间被访问的次数、访问者的信息等。其中,所述缓存期间可以由所述缓存管理设备设定,也可以由所述缓存管理设备中的其他装置来设定。例如,所述缓存管理设备预设每个缓存记录的缓存期间为5分钟,即,每隔5分钟,所述缓存管理设备按照预设的淘汰规则来清理缓存记录。所述淘汰规则将在后续予以详细描述。
优选地,所述引用信息与所述最近访问信息通过一条原子指令来更新。例如,在此,“引用信息”和“最近访问信息”可以存储在同一个数据上。比如用一个4字节的int(整型)数据,第一个字节用于存储“引用信息”,后三个字节用于存储“最近访问信息”。而一条原子指令就可以更新4字节的int数据。
本领域技术人员应能理解上述主键信息、引用信息和最近访问信息仅为举例,其他现有的或今后可能出现的主键信息、引用信息和最近访问信息如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在此,所述缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录的方式包括但不限于:1)各缓存记录以队列、堆栈、数组、或链表等方式记录在缓存中,所述缓存管理设备根据缓存记录的存储方式来查询并确定与所解析的主键信息相一致的目标缓存记录。例如,在缓存中的各缓存记录依次为:a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb)、a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda)、a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba),它们以队列的方式予以暂存,当所述缓存管理设备通过解析得到所要调取的目标缓存记录的主键信息为11,则通过对所述缓存中队列的查找,所述缓存管理设备确定缓存记录a1为目标缓存记录。
2)所述缓存管理设备预先将各缓存记录的主键信息进行Hash映射,并根据映射情况将缓存记录分入不同缓存子集中,当所述缓存管理设备解析来自终端设备的请求时,先对该请求中的主键信息进行Hash映射,以根据映射结果找到对应的缓存子集,再从相应的缓存子集中查找与该主键信息相同的缓存记录作为目标缓存记录。其中,所述Hash映射的方式包括但不限于:将主键信息进行模运算,并将模运算所得的余数相同的主键信息所对应的缓存记录分入同一个缓存子集。其中,优选的以素数为模值进行模运算。
例如,缓存中的缓存记录包括:a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb)、a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda)、a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba),所述缓存管理设备先以3做模将各缓存记录a1、a2、a3、a4进行模运算,并将余数为2的缓存记录a1、a4分入缓存子集A1中,将余数为0的缓存记录a2分入缓存子集A2中,将余数为1的缓存记录a3分入缓存子集A3中。当所述缓存管理设备解析来自终端设备的请求并得到该请求中的主键信息为11,则先通过对该请求中的主键信息做模运算确定在缓存子集A1中查找目标缓存记录,然后在所述缓存子集A1中查找主键信息为11的目标缓存记录为a1。
本领域技术人员应能理解上述查询目标缓存记录的方式仅为举例,其他现有的或今后可能出现的查询目标缓存记录的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述缓存使用分布锁。其中,当在所述缓存中未查询到与所述主键信息相匹配的目标缓存记录,所述缓存管理设备对该主键信息所对应的缓存子集执行相应的加锁操作;接着,所述缓存管理设备在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录。
具体地,如图6所示。所述步骤S1包括:步骤S11、S12、S13、S14和S15.
在步骤S11中,所述缓存管理设备在解析出请求中的主键信息,并按照取模确定缓存子集的方式在相应缓存子集中查找相匹配的目标缓存记录。
在步骤S12中,所述缓存管理设备判断是否查到相匹配的目标缓存记录,若查到,则转至步骤S2,反之,则转至步骤S13。
在步骤S13中,所述缓存管理设备对该主键信息所对应的缓存子集执行加锁操作,并在加锁后再次查找与所述主键信息相匹配的目标缓存记录。
在步骤S14,所述缓存管理设备再次判断是否查到相匹配的目标缓存记录,若查到,则转至步骤S2,反之,则转至步骤S15。
在步骤S15,所述缓存管理设备在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作,再将存储空间中对应的数据写入所述空缓存记录。
例如,在此所进行的无锁化查找,并不遍历对应的缓存子集,而只是查找缓存子集的热数据(例如引用信息大于0的缓存记录);当在所述缓存子集中通过无锁查找未查询到与所述主键信息相匹配的目标缓存记录时,所述缓存管理设备对该主键信息所对应的缓存子集执行加锁操作,并在加锁后再次查找与所述主键信息相匹配的目标缓存记录。若查找到,则引用之,若还未找到,则所述缓存管理设备在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作,再将存储空间中对应的数据写入所述空缓存记录。
继续以缓存记录a1、a2、a3、a4的示例为例进行说明。所述缓存管理设备解析的主键信息为21,所述缓存管理设备对该主键信息进行模3运算,根据余数为0确定从缓存子集A2中查找主键信息为21的目标缓存记录,所述缓存管理设备在缓存子集A2中未能找到目标缓存记录,则对缓存子集A2进行加锁操作,以阻止其他线程对该缓存子集A2的插入/删除操作,并再次查找,还未能找到,则在所述缓存子集A2中创建一个主键信息为21的空缓存记录,并执行释放锁操作,再到磁盘中找到主键信息为21的数据bbd,将其写入所述空缓存记录中并标记数据状态为可用。
在步骤S2中,所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。
具体地,所述缓存管理设备在确定目标缓存记录的同时,还通知所述缓存管理设备,由所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。
例如,所找到的目标缓存记录中的引用信息为正在被引用缓存记录的数量、最近访问信息为最近访问的数量,则所述缓存管理设备分别将所述目标缓存记录所对应的引用信息和最近访问信息加1。
又如,所找到的目标缓存记录中的引用信息为false、最近访问信息中的数量为2,则所述缓存管理设备将所述目标缓存记录所对应的引用信息改为true,将最近访问信息中的数量加1。
图7示出根据本申请一个优选实施例的一种缓存管理方法。所述缓存管理方法除了包含步骤S1和S2外,还包含步骤S3。具体地,在步骤S1中,所述缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录。在步骤S2中,所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。在步骤S3中,所述缓存管理设备引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在此,缓存管理方法的步骤S1和S2与图5中缓存管理方法中的步骤S1和S2的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
具体地,缓存管理设备解析了来自终端设备/其他网络设备所发送的请求,并得到主键信息后,在所包含的多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,则所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息,所述缓存管理设备引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。
在此,所述引用信息为正在被引用缓存记录的数量,则更新所述目标缓存记录所对应的引用信息的方式为:将所述引用信息进行减1操作。
所述引用信息为布尔值true(或1),则更新所述目标缓存记录所对应的引用信息的方式为:当所述目标缓存记录被所有线程使用完毕时,将所述目标缓存记录中的引用信息改为false(或0)。
按照图8所示的流程,所述缓存管理设备的执行过程举例如下:
所述缓存管理设备将缓存中的各缓存记录的主键信息以3为模进行模运算后,按照余数相同将各缓存记录分为三个子集,其中,缓存子集A1中包含:缓存记录a1(主键信息:11、引用信息:2、最近访问次数:3、值:abc)、缓存记录a4(主键信息:14、引用信息:1、最近访问次数:1、值:bba);
缓存子集A2中包含:缓存记录a2(主键信息:12、引用信息:1、最近访问次数:2、值:abb);
缓存子集A3中包含:缓存记录a3(主键信息:13、引用信息:0、最近访问次数:2、值:bcda);
所述缓存管理设备解析出主键信息为22,则所述缓存管理设备以3为模,计算出主键信息为22的缓存记录分属于缓存子集A3中,并在缓存子集A3中进行查找,但未能找到与22相一致的主键信息,接着,所述缓存管理设备将所述缓存子集A3进行加锁操作,并再次查找,仍未找到,则所述缓存管理设备创建一个主键信息为22的空缓存记录,并执行释放锁操作,再按照所述主键信息22所指示的位置到磁盘中找到主键信息为22的数据为cdd,并将数据cdd写入所述空缓存记录中,并通知所述缓存管理设备和缓存管理设备。所述缓存管理设备根据通知将主键信息为22的缓存记录中的引用信息和最近访问信息各自加1。所述缓存管理设备根据通知使用所述缓存记录,并在使用完毕时将所对应的引用信息减1。
图9示出根据本申请又一个优选实施例的一种缓存管理方法。所述缓存管理方法除了包含步骤S1、S2和S3外,还包含步骤S4。具体地,在步骤S1中,所述缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录。在步骤S2中,所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。在步骤S3中,所述缓存管理设备引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在所述缓存管理设备运行期间,所述缓存管理设备还执行步骤S4,即实时监视缓存记录的分布,以便帮助所述缓存管理设备敏捷的做出引用响应。即所述缓存管理设备当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。在此,缓存管理方法的步骤S1、S2、S3与图7中缓存管理方法的步骤S1、S2、S3的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
在此,所述第一触发条件包括但不限于以下至少任一项:1)所述缓存子集的平均长度超过最长阈值。2)所述缓存子集的平均长度小于最短阈值。
在此,所述缓存管理设备调整所述缓存中缓存记录的分布的方式包括:1)根据所述第一触发条件确定所述缓存所对应的子集数量信息。例如,所述缓存管理设备预设缓存子集的平均长度不得超过4,当各缓存子集中的缓存数量平均超过4时,所述缓存管理设备增加缓存自己的数量,例如将缓存子集的数量加至下个素数,并对各缓存记录重新分组,由此来实现缓存的扩容。
2)根据所述子集数量信息调整所述缓存中缓存记录的分布。例如,所述缓存管理设备预设缓存子集的平均长度不得低于1,当缓存中的缓存子集中的缓存数量平均少于1时,所述缓存管理设备将用于划分缓存子集的模值由5减少为下一个素数3,并对各缓存记录重新分组,以便将缓存子集的数量由5个减少至3个,由此来实现缓存的缩容。
本领域技术人员应能理解上述调整所述缓存中缓存记录的分布的方式仅为举例,其他现有的或今后可能出现的调整所述缓存中缓存记录的分布的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
需要说明的是,本领域技术人员应该理解,所述缓存管理方法还可以按照需求包含步骤S1、S2和S4。未予图示。
图10示出根据本申请又一个优选实施例的一种缓存管理方法。所述缓存管理方法除了步骤S1、S2、S3和S4外,还包含步骤S5。
具体地,在步骤S1中,所述缓存管理设备在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录。在步骤S2中,所述缓存管理设备更新所述目标缓存记录所对应的引用信息与最近访问信息。在步骤S3中,所述缓存管理设备引用所述目标缓存记录,当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。其中,所述缓存记录包括对应的引用信息与最近访问信息。在所述缓存管理设备运行期间,所述缓存管理设备还执行步骤S4,即实时监视缓存记录的分布,以便帮助所述缓存管理设备敏捷的做出响应。即所述缓存管理设备当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。同时,所述缓存管理设备还执行步骤S5,即当满足预定的第二触发条件时,对所述缓存中的缓存记录执行淘汰操作,其中,被淘汰的缓存记录所对应的引用信息为零。在此,缓存管理方法的步骤S1至S4与图8中缓存管理方法中的步骤S1至S4的内容相同或基本相同,为简明期间,故在此不再赘述,并以引用的方式包含于此。
在此,所述第二触发条件包括但不限于:1)淘汰轮询时间。例如,所述缓存管理设备预设淘汰轮询时间为2分钟,则每隔2分钟,所述缓存管理设备对所述缓存的所有分布锁执行加锁操作,并以当前淘汰指针所指位置开始将缓存中的引用信息为0的缓存记录予以删除,并将指针指向下一条缓存记录,在轮询过后,执行释放锁操作。2)缓存接近或达到饱和。例如,当缓存达到或超出预设的临界值时,所述缓存管理设备对所述缓存的所有分布锁执行加锁操作,并逐个排查,以将缓存中的引用信息为0的缓存记录予以删除,在轮询过后,执行释放锁操作。
本领域技术人员应能理解上述第二触发条件仅为举例,其他现有的或今后可能出现的第二触发条件如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,所述缓存管理设备从所述缓存中淘汰指针所指向的缓存记录开始执行如下操作,直至满足对应的淘汰停止条件:更新所述淘汰指针所指向的缓存记录所对应的最近访问信息;若该缓存记录所对应的引用信息与最近访问信息均为零,则淘汰该缓存记录;使所述淘汰指针指向该缓存记录的下一个缓存记录。
在此,所述淘汰停止条件包括但不限于:轮询完毕所有的缓存记录、或缓存的剩余空间满足预设空间条件等。其中,所述预设空间条件包括但不限于:缓存的剩余空间达到缓存空间的百分比、或缓存的剩余空间大于某一预设值等。
例如,所述缓存管理设备预设淘汰轮询时间为2分钟,当淘汰轮询时间开始时,所述缓存管理设备从上一轮淘汰指针所指向的缓存子集A3中的缓存记录a3开始,将缓存记录a3的最近访问信息和引用信息减1,当该最近访问信息和引用信息均为0时,将缓存记录a3从缓存中删除,接着,指向缓存子集A3中的下一缓存记录b1,并按缓存记录a3的更新方式同样更新,若缓存记录b1中的最近访问信息不为0、引用信息为0,则不淘汰该条缓存记录b1,并继续指向下一条缓存记录,以此类推,所述缓存管理设备轮询所述缓存子集A3中所有缓存记录后,轮询下一个缓存子集,直至轮询完所有的缓存子集。
需要说明的是,本领域技术人员应该理解,所述缓存管理方法可以按需求包含步骤S1、S2和S5。所述缓存管理方法还可以按需求包含步骤S1、S2、S3和S5。均未予图示。
综上所述,本申请的一种缓存管理方法与设备,在缓存记录中设置引用信息和最近访问信息能够帮助缓存管理设备设定缓存记录的淘汰机制,以确保缓存中存放近期活跃的缓存记录,避免活跃的缓存记录被淘汰,同时,对于“引用信息”和“最近访问信息”的修改只需通过一条原子指令就可以完成,无需对缓存记录进行锁操作,避免了现有缓存管理算法修改时的全局锁竞争,有效提高了并发效率;进一步的,在设定淘汰机制时,采用当引用信息为零时,将相应的缓存记录予以淘汰的机制,能够有效保证了正在被使用的数据块(比如长查询的数据)始终驻留在内存缓存中;更近一步地,仅当引用信息和最近访问信息均为零时,才淘汰相应的缓存记录,能够将缓存命中率从80%提高到95%以上,特别在大量线程(如32线程)的场景下,能将效率提高至现有LRU算法的6倍以上;另外,使用分布锁能够确保在查找缓存记录时,锁住的缓存子集中的各缓存记录不被删除/增加,以便在不断变化的缓存中精确查找目标缓存记录,避免磁盘读写所带来的低效率;还有,当缓存子集过长或过短,及时调整各缓存子集的长度,能够提高对缓存记录的查询效率。所以,本申请有效克服了现有技术中的种种缺点而具高度产业利用价值。经实验,本申请能够将缓存命中率从80%提高到95%以上,特别在大量线程(如32线程)的场景下,能将效率提高至现有LRU算法的6倍以上,具体如图11所示。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (18)
1.一种缓存管理方法,包括:
在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息,所述引用信息包括:标识正在被引用缓存记录的数量,或标识正在被引用缓存记录的状态;其中,所述正在被引用缓存记录的数量为正在引用所述缓存记录的线程的数量;所述正在被应用缓存记录的状态包括:有线程正在引用所述缓存记录或没有线程正在引用所述缓存记录;所述最近访问信息包括:表示所述缓存记录在缓存期间被访问的次数、访问者的信息;
更新所述目标缓存记录所对应的引用信息与最近访问信息;其中,所述引用信息与所述最近访问信息通过一条原子指令来更新;
根据所述引用信息和所述最近访问信息设定淘汰机制。
2.根据权利要求1所述的方法,其中,该方法还包括:
当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。
3.根据权利要求1或2所述的方法,其中,所述缓存使用分布锁;
其中,所述在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录包括:
当在所述缓存中未查询到与所述主键信息相匹配的目标缓存记录,对该主键信息所对应的缓存子集执行相应的加锁操作;
在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录。
4.根据权利要求3所述的方法,其中,在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录还包括:
当在所述缓存子集中未查询到与所述主键信息相匹配的目标缓存记录,在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作;
将存储空间中对应的数据写入所述空缓存记录。
5.根据权利要求3所述的方法,其中,该方法还包括:
当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。
6.根据权利要求5所述的方法,其中,调整所述缓存中缓存记录的分布包括:
根据所述第一触发条件确定所述缓存所对应的子集数量信息;
根据所述子集数量信息调整所述缓存中缓存记录的分布。
7.根据权利要求5所述的方法,其中,所述第一触发条件包括以下至少任一项:
所述缓存的子集平均长度超过最长阈值;
所述缓存的子集平均长度小于最短阈值。
8.根据权利要求1所述的方法,其中,该方法还包括:
当满足预定的第二触发条件时,对所述缓存中的缓存记录执行淘汰操作,其中,被淘汰的缓存记录所对应的引用信息为零。
9.根据权利要求8所述的方法,其中,对所述缓存中的缓存记录执行淘汰操作包括:
从所述缓存中淘汰指针所指向的缓存记录开始执行如下操作,直至满足对应的淘汰停止条件:
更新所述淘汰指针所指向的缓存记录所对应的最近访问信息;若该缓存记录所对应的引用信息与最近访问信息均为零,则淘汰该缓存记录;使所述淘汰指针指向该缓存记录的下一个缓存记录。
10.一种缓存管理设备,包括:
第一装置,用于在包含多个缓存记录的缓存中查询确定与主键信息相匹配的目标缓存记录,其中,所述缓存记录包括对应的引用信息与最近访问信息,所述引用信息包括:标识正在被引用缓存记录的数量,或标识正在被引用缓存记录的状态;其中,所述正在被引用缓存记录的数量为正在引用所述缓存记录的数量;所述正在被应用缓存记录的状态包括:有线程正在引用所述缓存记录或没有线程正在引用所述缓存记录;所述最近访问信息包括:表示所述缓存记录在缓存期间被访问的次数、访问者的信息;
第二装置,用于更新所述目标缓存记录所对应的引用信息与最近访问信息;其中,所述引用信息与所述最近访问信息通过一条原子指令来更新;
所述缓存管理设备用于根据所述引用信息和所述最近访问信息设定淘汰机制。
11.根据权利要求10所述的缓存管理设备,其中,该设备还包括:
第三装置,用于当所述目标缓存记录被使用完毕时,释放该目标缓存记录并相应更新该目标缓存记录所对应的引用信息。
12.根据权利要求10或11所述的缓存管理设备,其中,所述缓存使用分布锁;
其中,所述第一装置用于:
当在所述缓存中未查询到与所述主键信息相匹配的目标缓存记录,对该主键信息所对应的缓存子集执行相应的加锁操作;
在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录。
13.根据权利要求12所述的缓存管理设备,其中,在所述缓存子集中查询确定与所述主键信息相匹配的目标缓存记录还包括:
当在所述缓存子集中未查询到与所述主键信息相匹配的目标缓存记录,在所述缓存子集中创建与所述主键信息相匹配的空缓存记录,并对所述缓存子集执行相应的释放锁操作;
将存储空间中对应的数据写入所述空缓存记录。
14.根据权利要求12所述的缓存管理设备,其中,该设备还包括:
第四装置,用于当满足预定的第一触发条件时,对所述缓存的所有分布锁执行加锁操作,调整所述缓存中缓存记录的分布,并对所述所有分布锁执行释放锁操作。
15.根据权利要求14所述的缓存管理设备,其中,调整所述缓存中缓存记录的分布包括:
根据所述第一触发条件确定所述缓存所对应的子集数量信息;
根据所述子集数量信息调整所述缓存中缓存记录的分布。
16.根据权利要求14所述的缓存管理设备,其中,所述第一触发条件包括以下至少任一项:
所述缓存的子集平均长度超过最长阈值;
所述缓存的子集平均长度小于最短阈值。
17.根据权利要求10所述的缓存管理设备,其中,该设备还包括:
第五装置,用于当满足预定的第二触发条件时,对所述缓存中的缓存记录执行淘汰操作,其中,被淘汰的缓存记录所对应的引用信息为零。
18.根据权利要求17所述的缓存管理设备,其中,对所述缓存中的缓存记录执行淘汰操作包括:
从所述缓存中淘汰指针所指向的缓存记录开始执行如下操作,直至满足对应的淘汰停止条件:
更新所述淘汰指针所指向的缓存记录所对应的最近访问信息;若该缓存记录所对应的引用信息与最近访问信息均为零,则淘汰该缓存记录;使所述淘汰指针指向该缓存记录的下一个缓存记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410373843.6A CN105302840B (zh) | 2014-07-31 | 2014-07-31 | 一种缓存管理方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410373843.6A CN105302840B (zh) | 2014-07-31 | 2014-07-31 | 一种缓存管理方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105302840A CN105302840A (zh) | 2016-02-03 |
CN105302840B true CN105302840B (zh) | 2019-11-15 |
Family
ID=55200114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410373843.6A Active CN105302840B (zh) | 2014-07-31 | 2014-07-31 | 一种缓存管理方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105302840B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106453500B (zh) * | 2016-09-07 | 2020-02-11 | 努比亚技术有限公司 | 缓存生成及控制方法、缓存服务器及接口服务器 |
CN110309079B (zh) * | 2018-03-27 | 2023-06-02 | 阿里巴巴集团控股有限公司 | 一种数据缓存的方法及装置 |
CN115470026A (zh) * | 2018-06-25 | 2022-12-13 | 创新先进技术有限公司 | 数据缓存及缓存容灾方法和系统、缓存系统 |
CN110866021B (zh) * | 2019-10-16 | 2023-06-30 | 微梦创科网络科技(中国)有限公司 | 一种基于Go语言的分布式锁的加锁与释放锁的方法及系统 |
CN110795632B (zh) * | 2019-10-30 | 2022-10-04 | 北京达佳互联信息技术有限公司 | 一种状态查询方法、装置及电子设备 |
CN111007986B (zh) * | 2019-11-04 | 2022-09-30 | 厦门天锐科技股份有限公司 | 一种基于内存的文本分段传递的方法及装置 |
CN112506973B (zh) * | 2020-12-14 | 2023-12-15 | 中国银联股份有限公司 | 一种存储数据管理的方法及装置 |
CN113900712B (zh) * | 2021-10-26 | 2022-05-06 | 海光信息技术股份有限公司 | 指令处理方法、指令处理装置及存储介质 |
CN115080255B (zh) * | 2022-06-28 | 2023-03-24 | 奇秦科技(北京)股份有限公司 | 一种基于并发安全的分布式批量数据处理方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6792436B1 (en) * | 2000-02-11 | 2004-09-14 | Persistence Software, Inc. | Method for synchronizing multiple software caches in a memory |
CN1841343A (zh) * | 2005-03-31 | 2006-10-04 | 国际商业机器公司 | 改进任务切换的系统和方法 |
CN101131673A (zh) * | 2006-08-22 | 2008-02-27 | 中兴通讯股份有限公司 | 一种通用缓存的方法 |
CN101369276A (zh) * | 2008-09-28 | 2009-02-18 | 杭州电子科技大学 | 一种Web浏览器缓存数据的取证方法 |
CN103246696A (zh) * | 2013-03-21 | 2013-08-14 | 宁波公众信息产业有限公司 | 高并发数据库的访问方法及应用于多服务器系统的方法 |
CN103365897A (zh) * | 2012-04-01 | 2013-10-23 | 华东师范大学 | 一种支持Bigtable数据模型的片段缓存方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9251179B2 (en) * | 2012-04-12 | 2016-02-02 | International Business Machines Corporation | Managing record location lookup caching in a relational database |
-
2014
- 2014-07-31 CN CN201410373843.6A patent/CN105302840B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6792436B1 (en) * | 2000-02-11 | 2004-09-14 | Persistence Software, Inc. | Method for synchronizing multiple software caches in a memory |
CN1841343A (zh) * | 2005-03-31 | 2006-10-04 | 国际商业机器公司 | 改进任务切换的系统和方法 |
CN101131673A (zh) * | 2006-08-22 | 2008-02-27 | 中兴通讯股份有限公司 | 一种通用缓存的方法 |
CN101369276A (zh) * | 2008-09-28 | 2009-02-18 | 杭州电子科技大学 | 一种Web浏览器缓存数据的取证方法 |
CN103365897A (zh) * | 2012-04-01 | 2013-10-23 | 华东师范大学 | 一种支持Bigtable数据模型的片段缓存方法 |
CN103246696A (zh) * | 2013-03-21 | 2013-08-14 | 宁波公众信息产业有限公司 | 高并发数据库的访问方法及应用于多服务器系统的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105302840A (zh) | 2016-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105302840B (zh) | 一种缓存管理方法与设备 | |
JP6356675B2 (ja) | 集約/グループ化動作:ハッシュテーブル法のハードウェア実装 | |
CN107491523B (zh) | 存储数据对象的方法及装置 | |
US8352517B2 (en) | Infrastructure for spilling pages to a persistent store | |
US8819074B2 (en) | Replacement policy for resource container | |
CN109977129A (zh) | 多级数据缓存方法及设备 | |
CN106331148A (zh) | 一种客户端数据读取时的缓存管理方法及其装置 | |
US11314689B2 (en) | Method, apparatus, and computer program product for indexing a file | |
CN108920616A (zh) | 一种元数据访问性能优化方法、系统、装置及存储介质 | |
CN104035925B (zh) | 数据存储方法、装置和存储系统 | |
CN103607312A (zh) | 用于服务器系统的数据请求处理方法及系统 | |
CN109445702A (zh) | 一种块级数据去重存储系统 | |
CN108900626A (zh) | 一种云环境下数据存储方法、装置及系统 | |
CN109376125A (zh) | 一种元数据存储方法、装置、设备及计算机可读存储介质 | |
CN115048142A (zh) | 缓存访问命令处理系统、方法、装置、设备和存储介质 | |
US10747773B2 (en) | Database management system, computer, and database management method | |
CN112148736A (zh) | 缓存数据的方法、设备及存储介质 | |
US7016911B2 (en) | Management of user-defined routine libraries in database environments | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN111352915A (zh) | 一种机器学习系统、一种机器学习参数服务器及实现方法 | |
CN101459599B (zh) | 一种实现缓存数据访问与加载并发进行的方法及系统 | |
CN107967306B (zh) | 一种存储系统中关联块的快速挖掘方法 | |
CN110658999B (zh) | 一种信息更新方法、装置、设备及计算机可读存储介质 | |
CN113297106A (zh) | 基于混合存储的数据置换方法、相关方法及装置和系统 | |
US11055266B2 (en) | Efficient key data store entry traversal and result generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211110 Address after: Room 507, floor 5, building 3, No. 969, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province Patentee after: Zhejiang tmall Technology Co., Ltd Address before: P.O. Box 847, 4th floor, Grand Cayman capital building, British Cayman Islands Patentee before: Alibaba Group Holdings Limited |
|
TR01 | Transfer of patent right |