CN106155913B - 缓存命中率分析的方法及设备 - Google Patents

缓存命中率分析的方法及设备 Download PDF

Info

Publication number
CN106155913B
CN106155913B CN201510178548.XA CN201510178548A CN106155913B CN 106155913 B CN106155913 B CN 106155913B CN 201510178548 A CN201510178548 A CN 201510178548A CN 106155913 B CN106155913 B CN 106155913B
Authority
CN
China
Prior art keywords
data
turkey
caching
accumulated quantity
reading
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
CN201510178548.XA
Other languages
English (en)
Other versions
CN106155913A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510178548.XA priority Critical patent/CN106155913B/zh
Priority to PCT/CN2016/077301 priority patent/WO2016165542A1/zh
Publication of CN106155913A publication Critical patent/CN106155913A/zh
Application granted granted Critical
Publication of CN106155913B publication Critical patent/CN106155913B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种缓存命中率分析的方法及设备,本申请根据某类数据缓存读取失败事件的总和次数得到存在缓存命中率低的数据,根据存在缓存命中率低的数据的读取失败事件和其它缓存事件的累计数量,可以有效确定缓存命中率低的原因,有助于后续根据该原因改善缓存代码的质量,提升整体系统性能。

Description

缓存命中率分析的方法及设备
技术领域
本申请涉及通信及计算机领域,尤其涉及一种缓存命中率分析的方法及设备。
背景技术
缓存(cache)是一种临时存储数据的系统,缓存与数据库(DB)、文件系统等存储系统的区别在于,容量有限,价格贵,掉电即丢失,但访问速度快,写入速度快。缓存常常作为系统的数据缓冲,将频繁访问的数据放入缓存中,避免多次到数据库,或者文件系统的施行慢访问。在缓存系统中的一个核心指标为命中率(hit rate),命中率等于读取请求返回存在的次数/总共的读取次数。其中,命中(hit)是指读取某一数据时,假若该数据存在,则是命中;非命中(miss)是指读取某一数据时,假若该数据不存在,则是非命中。
缓存命中率的高低与用户的使用逻辑关系密切。当命中率低时,是不能提升系统的性能的,所以命中率的高低直接影响系统的响应时间和整体吞吐量。而关于如何提升命中率,目前没有有效的量化方式,现有的判断方式,基本是基于开发人员对代码的理解,业务结构的熟悉成度,人为判断命中率低的原因,再进行试验验证,只能通过人为经验判断,没有可依赖的工具。
发明内容
本申请的目的是提供一种缓存命中率分析的方法及设备,能够得到精确的缓存命中率低的原因。
有鉴于此,本申请提供一种缓存命中率分析的方法,其中,包括:
获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;
根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因。
进一步的,所述其它缓存事件包括删除事件、写入事件和淘汰事件中的一种或任意组合。
进一步的,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的删除事件和读取失败事件的累计数量均大于第二预设阈值,且删除事件的累计数量与读取失败事件的累计数量的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。
进一步的,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的读取失败事件的累计数量大于第四预设阈值,且读取失败事件的累计数量与写入事件的累计数量的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。
进一步的,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的淘汰事件和读取失败事件的累计数量均大于第六预设阈值,且淘汰事件的累计数量和读取失败事件的累计数量的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。
进一步的,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的写入事件和读取失败事件的累计数量均小于第八预设阈值,且写入事件的累计数量与读取失败事件的累计数量差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。
进一步的,获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,包括:
获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;
从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;
按预设分类标准将筛选出的每个数据分到对应的类;
计算每一同类数据的缓存读取失败事件的总和次数;
获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。
进一步的,获取每个数据的缓存读取失败事件和其它缓存事件的累计数量,包括:
通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;
计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。
进一步的,所述预设分类标准包括按数据的功能或按数据的唯一标识进行分类。
进一步的,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表;
根据所述图表确定缓存命中率低的原因。
根据本申请的另一方面还提供一种用于缓存命中率分析的设备,包括:
第一装置,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;
第二装置,用于根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因。
进一步的,所述其它缓存事件包括删除事件、写入事件和淘汰事件中的一种或任意组合。
进一步的,所述第二装置,用于当某个数据的删除事件和读取失败事件的累计数量均大于第二预设阈值,且删除事件的累计数量与读取失败事件的累计数量的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。
进一步的,所述第二装置,用于当某个数据的读取失败事件的累计数量大于第四预设阈值,且读取失败事件的累计数量与写入事件的累计数量的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。
进一步的,所述第二装置,用于当某个数据的淘汰事件和读取失败事件的累计数量均大于第六预设阈值,且淘汰事件的累计数量和读取失败事件的累计数量的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。
进一步的,所述第二装置,用于当某个数据的写入事件和读取失败事件的累计数量均小于第八预设阈值,且写入事件的累计数量与读取失败事件的累计数量差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。
进一步的,所述第一装置包括:
第一一模块,用于获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;
第一二模块,用于从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;
第一三模块,用于按预设分类标准将筛选出的每个数据分到对应的类;
第一四模块,用于计算每一同类数据的缓存读取失败事件的总和次数;
第一五模块,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。
进一步的,所述第一一模块包括:
第一一一单元,用于通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;
第一一二单元,用于计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。
进一步的,所述预设分类标准包括按数据的功能或按数据的唯一标识进行分类。
进一步的,所述第二装置,用于将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,根据所述图表确定缓存命中率低的原因。
与现有技术相比,本申请根据某类数据缓存读取失败事件的总和次数得到存在缓存命中率低的数据,根据存在缓存命中率低的数据的读取失败事件和其它缓存事件的累计数量,可以有效确定缓存命中率低的原因,有助于后续根据该原因改善缓存代码的质量,提升整体系统性能。
进一步的,本申请根据可每个数据的读取失败事件(GetMiss)的累计数量与删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)的累计数量中至少一项的组合即可有效地确定该数据缓存命中率低的原因。
进一步的,本申请通过回调接口能够精确地监听和记录所有数据的事件,后续可根据记录的数据的事件汇总得到每个数据的缓存读取失败事件和其它缓存事件的累计数量。
进一步的,本申请将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,可根据生成的图表更直观地得到命中率低的原因。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的缓存命中率分析的方法的流程图;
图2示出本申请一优选实施例的缓存命中率分析的方法的流程图;
图3示出本申请另一优选实施例的缓存命中率分析的方法的流程图;
图4示出本申请再一优选实施例的缓存命中率分析的方法的流程图;
图5示出本申请一实施例的所有数据读取失败事件和其它缓存事件的累计数量的有色图;
图6示出根据本申请另一个方面的用于缓存命中率分析的设备结构图;
图7示出根据本申请一优选实施例的用于缓存命中率分析的设备结构图;
图8示出根据本申请另一优选实施例的用于缓存命中率分析的设备结构图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
如图1所示,本申请提供一种缓存命中率分析的方法,包括:
步骤S1,获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;其中,读取失败事件(GetMiss)由用户主动发起的Get请求产生,并且读取结果为不存在,在此,如果缓存读取失败事件的总和次数高于第一预设阈值,则可确定该类数据的缓存命中率低,进而可以在后续步骤中判断该类数据的缓存命中率低的原因;
步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因。在此,某类数据的缓存读取失败事件的总和次数等于该类数据中所有数据的缓存读取失败事件的累计数量的相加之和,影响缓存命中率低的原因基本有如下几个方面的因素:
1.缓存容量不足:当容量不足时缓存系统会产生淘汰,导致数据在缓存中的概率降低。虽然缓存系统具有LRU算法尽量保证淘汰的数据为非热点数据,但无法从本质上确保命中率的稳定。在此,淘汰(evict)是指一般缓存系统容量有限,当存储容量不够时,缓存系统会发生淘汰,也就是删除一些数据,以释放空间,删除数据的策略一般采用LRU(LeastRecently Used)算法。其中,LRU算法既近期最少使用算法,其是一种数据结构算法,可以找出最近最少使用的元素,一般用于Cache淘汰策略里,也就是说,将最近最少使用的元素删除,达到释放空间的目的。
2.数据被主动删除:按照缓存系统的典型使用场景,数据发生修改或者删除时,需要将缓存内对应的数据删除,下一次访问时必然发生不命中。
3.访问的数据不存在:整个业务系统中不具有该数据存在,必然不命中。其中每个数据可以根据对应的Key查找,Key是缓存中数据的唯一索引,同一缓存系统中不会重复。
4.访问的数据不具有热点性:根据缓存系统的使用方式,第一次访问发现数据不命中时,需要从后端数据源读取数据写入缓存系统中,第二次访问则出现命中,假设极端情况下,每个数据只会被访问一次,那命中率理论数值则为0。本申请根据某类数据缓存读取失败事件的总和次数得到存在缓存命中率低的数据,根据存在缓存命中率低的数据的读取失败事件和其它缓存事件的累计数量,可以有效确定缓存命中率低的原因,有助于后续根据该原因改善缓存代码的质量,提升整体系统性能。
本申请的缓存命中率分析的方法一优选的实施例中,所述其它缓存事件包括删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)中的一种或任意组合。其中,删除事件(DeleteExist)由用户主动发起的Delete请求产生,删除事件中所指定的数据在删除之前是存在的;写入事件(SetNotExist)由用户主动发起的Set请求产生,写入事件中所指定的数据在删除之前不存在;淘汰事件(Evict)是指当缓存容量满时,发生淘汰动作。根据每个数据的读取失败事件(GetMiss)的累计数量与删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)的累计数量中至少一项的组合即可有效地确定该数据缓存命中率低的原因。本领域技术人员应能理解上述其它缓存事件的描述仅为举例,其他现有的或今后可能出现的其它缓存事件的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的缓存命中率分析的方法一优选的实施例中,步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的删除事件的累计数量(deleteExistCount)和读取失败事件(getMissCount)的累计数量均大于第二预设阈值,且删除事件的累计数量的累计数量(deleteExistCount)与读取失败事件的累计数量(getMissCount)的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。例如,如表1所示,对于Key为MainPage的数据记录,根据MainPage的名称可以确定该Key内容是首页数据,该数据的同类数据只有一个,即其自身,但其单个的读取失败事件的累计数量(getMissCount)比较高为30,说明其是命中率低的数据,再根据其删除事件的累计数量(deleteExistCount)也比较高为30,说明此Key对应数据的修改过于频繁,造成了命中率低。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
-{Key:MainPage,deleteExistCount:30,evictCount:0,getMissCount:30,setNotExistCount:30}
-{Key:item_09cdec2d,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_122cf833,deleteExistCount:1,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_14a3a03a,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_15ecb7bd,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_17085737,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_1c902fdd,deleteExistCount:2,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_1ef6c4bc,deleteExistCount:2,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_1fd78837,deleteExistCount:1,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_1ff9b528,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_31c3e0a6,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_3752aa0a,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_3c77cac2,deleteExistCount:1,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_43eaf434,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_4511044f,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_4f8f3999,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_52fa54d4,deleteExistCount:2,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_55fd3295,deleteExistCount:1,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_58ea547f,deleteExistCount:1,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_5afffbfe,deleteExistCount:2,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_67bf2f27,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_69c42d6e,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_6bb5a7da,deleteExistCount:2,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_7466fb35,deleteExistCount:2,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_7b59ef31,deleteExistCount:2,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_7e26abc2,deleteExistCount:1,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_82a5b1a8,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_842c6a4a,deleteExistCount:1,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_880242f6,deleteExistCount:2,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_8d446f69,deleteExistCount:0,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_8df56967,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_8ebebdfd,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_91096a22,deleteExistCount:2,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_992b919c,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_a4f1bb1e,deleteExistCount:1,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_aa8892f5,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_ac4985e3,deleteExistCount:0,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_b57baa59,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_be813651,deleteExistCount:2,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_c1edea98,deleteExistCount:1,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_c254be5b,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_c4385493,deleteExistCount:2,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_c86d52f4,deleteExistCount:0,evictCount:12,getMissCount:9,setNotExistCount:9}
-{Key:item_cf726c32,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_e8b98eab,deleteExistCount:1,evictCount:13,getMissCount:8,setNotExistCount:8}
-{Key:item_e92c7bfc,deleteExistCount:1,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:item_eda48d55,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_f05b915a,deleteExistCount:0,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_f220ecd9,deleteExistCount:1,evictCount:11,getMissCount:8,setNotExistCount:8}
-{Key:item_f6087d9d,deleteExistCount:2,evictCount:14,getMissCount:9,setNotExistCount:9}
-{Key:misc_foot,setdeleteExistCount:0,evictCount:0,getMissCount:20,NotExistCount:0}
-{Key:nick_0282d81c,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_149a3e16,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_1c8768b5,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_280f3dd2,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_5bbecebd,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_640aaa5e,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_66608a9f,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_684b984a,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_6da33be3,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_71b6db52,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_72341f21,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_9a121e06,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_9aee2b6f,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_a592aedc,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_a8608f23,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_a91e57aa,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_a9e261db,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_b0b76c12,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_b19ae545,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_b44dede3,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_bd335833,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_d3273f07,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_dd25603e,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_eadeaead,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:nick_f21f0ce4,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_0197f1f9,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_0f10bac7,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_104ba3c7,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_146af489,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_1fb8dbd7,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_2410cd60,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_284dfa9a,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_3781cdf6,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_50e0ba1e,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_8ed5c998,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_a3dc28b2,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_b9a9e2d2,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_c7936ceb,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:session_ff83d040,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:1}
-{Key:token_3a492fbc,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_4f58ca30,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_58f50b6f,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}-{Key:token_5e1cb9a6,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_6824fe45,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_84fd1778,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_ae211626,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_be5e931f,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_d4529ce6,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
-{Key:token_f6db4f04,deleteExistCount:0,evictCount:0,getMissCount:1,setNotExistCount:0}
表1
本申请的缓存命中率分析的方法一优选的实施例中,步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的读取失败事件的累计数量(getMissCount)大于第四预设阈值,且读取失败事件的累计数量(getMissCount)与写入事件的累计数量(setNotExistCount)的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。例如,对于表1中Key为misc_foot的数据,或者一组以Key为token_前缀的同类数据的事件记录,在此,Key为misc_foot的数据的同类数据只有一个,即其自身,但其读取失败事件(getMissCount)的累计数量为20,说明该数据的缓存命中率低,而Key为token_前缀的同类数据中的每个数据的读取失败事件(getMissCount)的累计数量为1,但以Key为token_前缀的同类数据的读取失败事件(getMissCount)的累计数量的总和次数据较高,即该同类数据中的数据个数较多,说明以Key为token_前缀的同类数据缓存命中率低,后续根据每条数据记录的详细信息发现写入事件(SetNotExistCount)数值为0,说明业务系统没有对Key为misc_foot的数据或Key为token_前缀的数据做缓存操作,造成命中率低。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的缓存命中率分析的方法一优选的实施例中,步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的淘汰事件的累计数量(evictCount)和读取失败事件的累计数量(getMissCount)均大于第六预设阈值,且淘汰事件的累计数量(evictCount)和读取失败事件的累计数量(getMissCount)的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。例如,表1中,以item为前缀的同类数据的读取失败事件的累计数量(getMissCount)的总和次数比较高,即该同类数据中的数据个数较多,且根据其详细信息发现,淘汰事件的累计数量(evictCount)的数值也偏高,说明其缓存容量不足导致的淘汰,从而引起命中率下降。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的缓存命中率分析的方法一可选的实施例中,所述第二阈值、第四阈值和第六阈值可以设置为相同的值。
本申请的缓存命中率分析的方法一优选的实施例中,步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的写入事件的累计数量(setNotExistCount)和读取失败事件的累计数量(getMissCount)均小于第八预设阈值,且写入事件的累计数量的累计数量(setNotExistCount)与读取失败事件的累计数量(getMissCount)差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。例如,表1中以session为前缀的同类数据的读取失败事件(GetMissCount)的累计数量基本为1或者2,但读取失败事件(GetMissCount)的累计数量的总和次数较大,即该同类数据中的数据个数较多,而每个数据记录的写入事件(SetNotExistCount)基本为1,说明此类型的数据的热点性不高。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
如图2所示,本申请的缓存命中率分析的方法一优选的实施例中,步骤S1,获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,包括:
步骤S11,获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;如图3所示,本申请的缓存命中率分析的方法一较佳的实施例中,步骤S11,包括步骤S111和步骤S112,其中,步骤S111,通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;在此,可以通过回调接口每个数据的缓存读取失败事件或其它缓存事件进行监听,具体可按照事件发生的先后顺序逐条记录下监听到的事件的信息,包括事件的种类是什么如读取失败事件或其它缓存事件,以及事件对应数据的Key是什么,记录方式可以采用文件追加写方式实现,可以在指定的一段时间后会生成一个事件记录文件,由于回调接口设置于缓存代码的事件路径上,只要有事件发生,回调接口都能监听和记录该事件;步骤S112,计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。在此,可根据上述步骤S111生成的事件记录文件的内容汇总计算每个数据的缓存读取失败事件(GetMissCount)的累计数量和其它缓存事件的累计数量(EvictCount,DeleteExistCount,SetNotExistCount)。例如,可以按照顺序读取事件记录文件,并在内存(或者其他存储介质)中记录对应的Key,并且累计此Key的事件记录次数,记录扫描完成后,会生成一个[Key:EvictCount,DeleteExistCount,GetMissCount,SetNotExistCount]的Key列表,本领域技术人员应能理解上述获取每个数据的缓存读取失败事件和其它缓存事件的累计数量的描述仅为举例,其他现有的或今后可能出现的获取每个数据的缓存读取失败事件和其它缓存事件的累计数量的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此;
步骤S12,从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;由于所有数据生成的如上述的Key列表规模会比较庞大,不利于后续分析的效率,所以可按照每条数据的事件记录中读取失败事件的累计数量(GetMissCount)的大小,从大到小筛选前N条大于第十预设阈值的数据,其中,N太小会影响数据准确度,N太大会影响视图展现,所以可以根据数据的大小设置N为默认的值,如100,也就是说选取最多100条数据的事件记录;
步骤S13,按预设分类标准将筛选出的每个数据分到对应的类;
步骤S14,计算每一同类数据的缓存读取失败事件的总和次数;
步骤S15,获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。在此,如果缓存读取失败事件的总和次数高于第一预设阈值,则可确定该类数据的缓存命中率低,进而可以在后续步骤中判断该类数据的缓存命中率低的原因。缓存读取失败事件的总和次数高于第一预设阈值有三种情况,一种情况是,某类数据中的数据的事件记录的条数很少,但每个数据的缓存读取失败事件的累计数量很高,导致这些累计数量相加后的缓存读取失败事件的总和次数高于第一预设阈值;第二种情况是,虽然某类数据中每个数据的缓存读取失败事件的累计数量很小,但该类数据中的数据的事件记录的条数很多,导致这些累计数量相加后的缓存读取失败事件的总和次数仍高于第一预设阈值;第三种情况是,综合第一和第二种情况,既有单条数据的缓存读取失败事件的累计数量很高的情形,又有多条数据的缓存读取失败事件的累计数量相加这和很高的情形,最终也导致这些累计数量相加后的缓存读取失败事件的总和次数仍高于第一预设阈值。本领域技术人员应能理解上述获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录的描述仅为举例,其他现有的或今后可能出现的获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的缓存命中率分析的方法一优选的实施例中,步骤S13中所述预设分类标准包括按数据的功能或按数据的唯一标识(Key)进行分类。缓存系统中的Key一般具有前缀一致性,就是说同一类型的功能会采用同一个前缀表达,以便区分:例如,表1的Key中,带同一前缀的为同一类业务,如item、session、nick等前缀就表示不同的类。本领域技术人员应能理解上述预设分类标准的描述仅为举例,其他现有的或今后可能出现的预设分类标准的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
如图4所示,本申请的缓存命中率分析的方法一优选的实施例中,步骤S2,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
步骤S21,将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,如有色图、曲线图或柱状图中的任一种;例如,如图5所示,当生成有色图时,可根据数据的Key的字典顺序将Key排列,每行10个,共10行,每个Key对应绘出一个色块,色块的背景颜色深度由该Key对应的数据的读取失败事件的累计数量(GetMissCount)的数值决定;GetMissCount最大的数值定义为正红色(R255,G0,B0),GetMissCount为0的颜色定义为正绿色(R0,G255,B0),正红色和正绿色之间的中间值为黄色,GetMissCount越大颜色越偏红,公式为:
假设整个数列中最大的GetMissCount为MAX
如果GetMIssCount>=MAX/2,那么
R=255;G=255*2*(1-GetMissCount/MAX);B=0;
如果GetMIssCount<MAX/2,那么
R=255*(2*GetMissCount/MAX);G=255;B=0;
另外,需要在每个色块上标注该色块对应的数据其它缓存事件的累计数量,标注方式可以是先在每个色块上隐藏其它缓存事件的累计数量,然后在选中该色块时显示隐藏的其它缓存事件的累计数量;
步骤S22,根据所述图表确定缓存命中率低的原因。在此,可根据生成的图表更直观地得到命中率低的原因。具体的,缓存系统中的Key一般具有前缀一致性,就是说同一类型的功能会采用同一个前缀表达,以便区分:例如,session_312312,session_888544,item_box111,item_box222,因此,如图5所示,可按照Key的字典顺序将数据进行排列,将同一业务功能即同一类的数据色块集中排放在一起。可根据GetMissCount越大,颜色越偏红的原则,或者同一类数据的色块的排列面积较大的原则,判断为命中率低的色块,然后针对命中率低的色块,根据每个色块上标注该色块对应的数据其它缓存事件的累计数量,便可以轻松的找到命中率低的原因。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
如图6所示,根据本申请的另一面本申请还提供一种用于缓存命中率分析的设备100,其中,包括:
第一装置1,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;其中,读取失败事件(GetMiss)由用户主动发起的Get请求产生,并且读取结果为不存在,在此,如果缓存读取失败事件的总和次数高于第一预设阈值,则可确定该类数据的缓存命中率低,进而可以在后续步骤中判断该类数据的缓存命中率低的原因;
第二装置2,用于根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因。在此,某类数据的缓存读取失败事件的总和次数等于该类数据中所有数据的缓存读取失败事件的累计数量的相加之和,影响缓存命中率低的原因基本有如下几个方面的因素:
1.缓存容量不足:当容量不足时缓存系统会产生淘汰,导致数据在缓存中的概率降低。虽然缓存系统具有LRU算法尽量保证淘汰的数据为非热点数据,但无法从本质上确保命中率的稳定。在此,淘汰(evict)是指一般缓存系统容量有限,当存储容量不够时,缓存系统会发生淘汰,也就是删除一些数据,以释放空间,删除数据的策略一般采用LRU(LeastRecently Used)算法。其中,LRU算法既近期最少使用算法,其是一种数据结构算法,可以找出最近最少使用的元素,一般用于Cache淘汰策略里,也就是说,将最近最少使用的元素删除,达到释放空间的目的。
2.数据被主动删除:按照缓存系统的典型使用场景,数据发生修改或者删除时,需要将缓存内对应的数据删除,下一次访问时必然发生不命中。
3.访问的数据不存在:整个业务系统中不具有该数据存在,必然不命中。其中每个数据可以根据对应的Key查找,Key是缓存中数据的唯一索引,同一缓存系统中不会重复。
4.访问的数据不具有热点性:根据缓存系统的使用方式,第一次访问发现数据不命中时,需要从后端数据源读取数据写入缓存系统中,第二次访问则出现命中,假设极端情况下,每个数据只会被访问一次,那命中率理论数值则为0。本申请根据某类数据缓存读取失败事件的总和次数得到存在缓存命中率低的数据,根据存在缓存命中率低的数据的读取失败事件和其它缓存事件的累计数量,可以有效确定缓存命中率低的原因,有助于后续根据该原因改善缓存代码的质量,提升整体系统性能。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述其它缓存事件包括删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)中的一种或任意组合。其中,删除事件(DeleteExist)由用户主动发起的Delete请求产生,删除事件中所指定的数据在删除之前是存在的;写入事件(SetNotExist)由用户主动发起的Set请求产生,写入事件中所指定的数据在删除之前不存在;淘汰事件(Evict)是指当缓存容量满时,发生淘汰动作。根据每个数据的读取失败事件(GetMiss)的累计数量与删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)的累计数量中至少一项的组合即可有效地确定该数据缓存命中率低的原因。本领域技术人员应能理解上述其它缓存事件的描述仅为举例,其他现有的或今后可能出现的其它缓存事件的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述第二装置,用于当某个数据的删除事件的累计数量(deleteExistCount)和读取失败事件的累计数量(getMissCount)均大于第二预设阈值,且删除事件的累计数量的累计数量(deleteExistCount)与读取失败事件的累计数量(getMissCount)的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。例如,如表1所示,对于Key为MainPage的数据记录,根据MainPage的名称可以确定该Key内容是首页数据,该数据的同类数据只有一个,即其自身,但其单个的读取失败事件的累计数量(getMissCount)比较高为30,说明其是命中率低的数据,再根据其删除事件的累计数量(deleteExistCount)也比较高为30,说明此Key对应数据的修改过于频繁,造成了命中率低。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述第二装置,用于当某个数据的读取失败事件的累计数量(getMissCount)大于第四预设阈值,且读取失败事件的累计数量(getMissCount)与写入事件的累计数量(setNotExistCount)的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。例如,对于表1中Key为misc_foot的数据,或者一组以Key为token_前缀的同类数据的事件记录,在此,Key为misc_foot的数据的同类数据只有一个,即其自身,但其读取失败事件(getMissCount)的累计数量为20,说明该数据的缓存命中率低,而Key为token_前缀的同类数据中的每个数据的读取失败事件(getMissCount)的累计数量为1,但以Key为token_前缀的同类数据的读取失败事件(getMissCount)的累计数量的总和次数据较高,即该同类数据中的数据个数较多,说明以Key为token_前缀的同类数据缓存命中率低,后续根据每条数据记录的详细信息发现写入事件(SetNotExistCount)数值为0,说明业务系统没有对Key为misc_foot的数据或Key为token_前缀的数据做缓存操作,造成命中率低。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述第二装置,用于当某个数据的淘汰事件的累计数量(evictCount)和读取失败事件的累计数量(getMissCount)均大于第六预设阈值,且淘汰事件的累计数量(evictCount)和读取失败事件的累计数量(getMissCount)的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。例如,表1中,以item为前缀的同类数据的读取失败事件的累计数量(getMissCount)的总和次数比较高,即该同类数据中的数据个数较多,且根据其详细信息发现,淘汰事件的累计数量(evictCount)的数值也偏高,说明其缓存容量不足导致的淘汰,从而引起命中率下降。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的用于缓存命中率分析的设备一可选的实施例中,所述第二阈值、第四阈值和第六阈值可以设置为相同的值。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述第二装置,用于当某个数据的写入事件的累计数量(setNotExistCount)和读取失败事件的累计数量(getMissCount)均小于第八预设阈值,且写入事件的累计数量(setNotExistCount)与读取失败事件的累计数量(getMissCount)差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。例如,表1中以session为前缀的同类数据的读取失败事件(GetMissCount)的累计数量基本为1或者2,但读取失败事件(GetMissCount)的累计数量的总和次数较大,即该同类数据中的数据个数较多,而每个数据记录的写入事件(SetNotExistCount)基本为1,说明此类型的数据的热点性不高。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
如图7所示,本申请的用于缓存命中率分析的设备一优选的实施例中,所述第一装置1包括:
第一一模块11,用于获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;
第一二模块12,用于从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;由于所有数据生成的如上述的Key列表规模会比较庞大,不利于后续分析的效率,所以可按照每条数据的事件记录中读取失败事件的累计数量(GetMissCount)的大小,从大到小筛选前N条大于第十预设阈值的数据,其中,N太小会影响数据准确度,N太大会影响视图展现,所以可以根据数据的大小设置N为默认的值,如100,也就是说选取最多100条数据的事件记录;
第一三模块13,用于按预设分类标准将筛选出的每个数据分到对应的类;
第一四模块14,用于计算每一同类数据的缓存读取失败事件的总和次数;
第一五模块15,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。在此,如果缓存读取失败事件的总和次数高于第一预设阈值,则可确定该类数据的缓存命中率低,进而可以在后续步骤中判断该类数据的缓存命中率低的原因。缓存读取失败事件的总和次数高于第一预设阈值有三种情况,一种情况是,某类数据中的数据的事件记录的条数很少,但每个数据的缓存读取失败事件的累计数量很高,导致这些累计数量相加后的缓存读取失败事件的总和次数高于第一预设阈值;第二种情况是,虽然某类数据中每个数据的缓存读取失败事件的累计数量很小,但该类数据中的数据的事件记录的条数很多,导致这些累计数量相加后的缓存读取失败事件的总和次数仍高于第一预设阈值;第三种情况是,综合第一和第二种情况,既有单条数据的缓存读取失败事件的累计数量很高的情形,又有多条数据的缓存读取失败事件的累计数量相加这和很高的情形,最终也导致这些累计数量相加后的缓存读取失败事件的总和次数仍高于第一预设阈值。本领域技术人员应能理解上述获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录的描述仅为举例,其他现有的或今后可能出现的获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
如图8所示,本申请的用于缓存命中率分析的设备一优选的实施例中,所述第一一模块11包括:
第一一一单元111,用于通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;在此,可以通过回调接口每个数据的缓存读取失败事件或其它缓存事件进行监听,具体可按照事件发生的先后顺序逐条记录下监听到的事件的信息,包括事件的种类是什么如读取失败事件或其它缓存事件,以及事件对应数据的Key是什么,记录方式可以采用文件追加写方式实现,可以在指定的一段时间后会生成一个事件记录文件,由于回调接口设置于缓存代码的事件路径上,只要有事件发生,回调接口都能监听和记录该事件;
第一一二单元112,用于计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。在此,可根据上述第一一一单元111生成的事件记录文件的内容汇总计算每个数据的缓存读取失败事件(GetMissCount)的累计数量和其它缓存事件的累计数量(EvictCount,DeleteExistCount,SetNotExistCount)。例如,可以按照顺序读取事件记录文件,并在内存(或者其他存储介质)中记录对应的Key,并且累计此Key的事件记录次数,记录扫描完成后,会生成一个[Key:EvictCount,DeleteExistCount,GetMissCount,SetNotExistCount]的Key列表,本领域技术人员应能理解上述获取每个数据的缓存读取失败事件和其它缓存事件的累计数量的描述仅为举例,其他现有的或今后可能出现的获取每个数据的缓存读取失败事件和其它缓存事件的累计数量的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此
本申请的用于缓存命中率分析的设备一优选的实施例中,所述预设分类标准包括按数据的功能或按数据的唯一标识(Key)进行分类。缓存系统中的Key一般具有前缀一致性,就是说同一类型的功能会采用同一个前缀表达,以便区分:例如,表1的Key中,带同一前缀的为同一类业务,如item、session、nick等前缀就表示不同的类。本领域技术人员应能理解上述预设分类标准的描述仅为举例,其他现有的或今后可能出现的预设分类标准的描述如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
本申请的用于缓存命中率分析的设备一优选的实施例中,所述第二装置,用于将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,根据所述图表确定缓存命中率低的原因。所图表如有色图、曲线图或柱状图中的任一种;例如,如图5所示,当生成有色图时,可根据数据的Key的字典顺序将Key排列,每行10个,共10行,每个Key对应绘出一个色块,色块的背景颜色深度由该Key对应的数据的读取失败事件的累计数量(GetMissCount)的数值决定;GetMissCount最大的数值定义为正红色(R255,G0,B0),GetMissCount为0的颜色定义为正绿色(R0,G255,B0),正红色和正绿色之间的中间值为黄色,GetMissCount越大颜色越偏红,公式为:
假设整个数列中最大的GetMissCount为MAX
如果GetMIssCount>=MAX/2,那么
R=255;G=255*2*(1-GetMissCount/MAX);B=0;
如果GetMIssCount<MAX/2,那么
R=255*(2*GetMissCount/MAX);G=255;B=0;
另外,需要在每个色块上标注该色块对应的数据其它缓存事件的累计数量,标注方式可以是先在每个色块上隐藏其它缓存事件的累计数量,然后在选中该色块时显示隐藏的其它缓存事件的累计数量;
后续可根据生成的图表更直观地得到命中率低的原因。具体的,缓存系统中的Key一般具有前缀一致性,就是说同一类型的功能会采用同一个前缀表达,以便区分:例如,session_312312,session_888544,item_box111,item_box222,因此,如图5所示,可按照Key的字典顺序将数据进行排列,将同一业务功能即同一类的数据色块集中排放在一起。可根据GetMissCount越大,颜色越偏红的原则,或者同一类数据的色块的排列面积较大的原则,判断为命中率低的色块,然后针对命中率低的色块,根据每个色块上标注该色块对应的数据其它缓存事件的累计数量,便可以轻松的找到命中率低的原因。本领域技术人员应能理解上述确定数据缓存命中率低的原因的描述仅为举例,其他现有的或今后可能出现的确定数据缓存命中率低的原因如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
综上所述,本申请根据某类数据缓存读取失败事件的总和次数得到存在缓存命中率低的数据,根据存在缓存命中率低的数据的读取失败事件和其它缓存事件的累计数量,可以有效确定缓存命中率低的原因,有助于后续根据该原因改善缓存代码的质量,提升整体系统性能。
进一步的,本申请根据可每个数据的读取失败事件(GetMiss)的累计数量与删除事件(DeleteExist)、写入事件(SetNotExist)和淘汰事件(Evict)的累计数量中至少一项的组合即可有效地确定该数据缓存命中率低的原因。
进一步的,本申请通过回调接口能够精确地监听和记录所有数据的事件,后续可根据记录的数据的事件汇总得到每个数据的缓存读取失败事件和其它缓存事件的累计数量。
进一步的,本申请将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,可根据生成的图表更直观地得到命中率低的原因。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (18)

1.一种缓存命中率分析的方法,其中,包括:
获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;
根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因;
其中,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的删除事件和读取失败事件的累计数量均大于第二预设阈值,且删除事件的累计数量与读取失败事件的累计数量的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。
2.如权利要求1所述的方法,其中,所述其它缓存事件包括删除事件、写入事件和淘汰事件中的一种或任意组合。
3.如权利要求2所述的方法,其中,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的读取失败事件的累计数量大于第四预设阈值,且读取失败事件的累计数量与写入事件的累计数量的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。
4.如权利要求2所述的方法,其中,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的淘汰事件和读取失败事件的累计数量均大于第六预设阈值,且淘汰事件的累计数量和读取失败事件的累计数量的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。
5.如权利要求2所述的方法,其中,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
当某个数据的写入事件和读取失败事件的累计数量均小于第八预设阈值,且写入事件的累计数量与读取失败事件的累计数量差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。
6.如权利要求1至5任一项所述的方法,其中,获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,包括:
获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;
从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;
按预设分类标准将筛选出的每个数据分到对应的类;
计算每一同类数据的缓存读取失败事件的总和次数;
获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。
7.如权利要求6所述的方法,其中,获取每个数据的缓存读取失败事件和其它缓存事件的累计数量,包括:
通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;
计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。
8.如权利要求6所述的方法,其中,所述预设分类标准包括按数据的功能或按数据的唯一标识进行分类。
9.如权利要求1或2任一项所述的方法,其中,根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因,包括:
将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表;
根据所述图表确定缓存命中率低的原因。
10.一种用于缓存命中率分析的设备,其中,包括:
第一装置,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录;
第二装置,用于根据获取到的同类数据的事件记录中每个数据的读取失败事件和其它缓存事件的累计数量确定该数据缓存命中率低的原因;
其中,所述第二装置,用于当某个数据的删除事件和读取失败事件的累计数量均大于第二预设阈值,且删除事件的累计数量与读取失败事件的累计数量的差值小于第三预设阈值,则确定该数据缓存命中率低的原因为数据被主动删除。
11.如权利要求10所述的设备,其中,所述其它缓存事件包括删除事件、写入事件和淘汰事件中的一种或任意组合。
12.如权利要求11所述的设备,其中,所述第二装置,用于当某个数据的读取失败事件的累计数量大于第四预设阈值,且读取失败事件的累计数量与写入事件的累计数量的差值大于第五预设阈值,则确定该数据缓存命中率低的原因为访问的数据不存在。
13.如权利要求11任一项所述的设备,其中,所述第二装置,用于当某个数据的淘汰事件和读取失败事件的累计数量均大于第六预设阈值,且淘汰事件的累计数量和读取失败事件的累计数量的差值小于第七预设阈值,则确定该数据缓存命中率低的原因为缓存容量不足。
14.如权利要求11所述的设备,其中,所述第二装置,用于当某个数据的写入事件和读取失败事件的累计数量均小于第八预设阈值,且写入事件的累计数量与读取失败事件的累计数量差值小于第九预设阈值,则确定该数据缓存命中率低的原因为访问的数据不具有热点性。
15.如权利要求10至14任一项所述的设备,其中,所述第一装置包括:
第一一模块,用于获取每个数据的缓存读取失败事件和其它缓存事件的累计数量;
第一二模块,用于从所有数据中筛选出读取失败事件的累计数量大于第十预设阈值的数据;
第一三模块,用于按预设分类标准将筛选出的每个数据分到对应的类;
第一四模块,用于计算每一同类数据的缓存读取失败事件的总和次数;
第一五模块,用于获取缓存读取失败事件的总和次数高于第一预设阈值的同类数据的事件记录,其中,所述同类数据的事件记录包括该类数据中每个数据的读取失败事件和其它缓存事件的累计数量。
16.如权利要求15所述的设备,其中,所述第一一模块包括:
第一一一单元,用于通过回调接口获取每个数据的缓存读取失败事件或其它缓存事件,所述回调接口设置于缓存代码的事件路径上;
第一一二单元,用于计算每个数据的缓存读取失败事件和其它缓存事件的累计数量。
17.如权利要求15所述的设备,其中,所述预设分类标准包括按数据的功能或按数据的唯一标识进行分类。
18.如权利要求10或11任一项所述的设备,其中,所述第二装置,用于将获取到的同类数据的事件记录中所有数据按读取失败事件和其它缓存事件的累计数量的大小生成图表,根据所述图表确定缓存命中率低的原因。
CN201510178548.XA 2015-04-15 2015-04-15 缓存命中率分析的方法及设备 Active CN106155913B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201510178548.XA CN106155913B (zh) 2015-04-15 2015-04-15 缓存命中率分析的方法及设备
PCT/CN2016/077301 WO2016165542A1 (zh) 2015-04-15 2016-03-25 缓存命中率分析的方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510178548.XA CN106155913B (zh) 2015-04-15 2015-04-15 缓存命中率分析的方法及设备

Publications (2)

Publication Number Publication Date
CN106155913A CN106155913A (zh) 2016-11-23
CN106155913B true CN106155913B (zh) 2019-06-18

Family

ID=57125724

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510178548.XA Active CN106155913B (zh) 2015-04-15 2015-04-15 缓存命中率分析的方法及设备

Country Status (2)

Country Link
CN (1) CN106155913B (zh)
WO (1) WO2016165542A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107870875A (zh) * 2017-08-09 2018-04-03 成都萌想科技有限责任公司 一种基于分布式内存可定制智能数据缓存方法
CN110309079B (zh) * 2018-03-27 2023-06-02 阿里巴巴集团控股有限公司 一种数据缓存的方法及装置
CN109388550B (zh) * 2018-11-08 2022-03-22 浪潮电子信息产业股份有限公司 一种缓存命中率确定方法、装置、设备及可读存储介质
CN110489063B (zh) * 2019-08-27 2023-12-19 北京奇艺世纪科技有限公司 缓存过期时间的设置方法、装置、电子设备及存储介质
US11023380B2 (en) 2019-09-10 2021-06-01 Western Digital Technologies, Inc. Non-volatile storage system with filtering of data samples for a monitored operational statistic

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928841A (zh) * 2005-09-08 2007-03-14 松下电器产业株式会社 高速缓冲存储器分析方法
CN101604287A (zh) * 2009-07-14 2009-12-16 浪潮电子信息产业股份有限公司 一种基于硬件计数器获取性能数据实现动态优化服务器性能的方法
CN101753344A (zh) * 2008-12-12 2010-06-23 华为技术有限公司 一种记录日志的方法、装置及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08328870A (ja) * 1995-05-30 1996-12-13 Fujitsu Ltd コンパイル処理装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1928841A (zh) * 2005-09-08 2007-03-14 松下电器产业株式会社 高速缓冲存储器分析方法
CN101753344A (zh) * 2008-12-12 2010-06-23 华为技术有限公司 一种记录日志的方法、装置及系统
CN101604287A (zh) * 2009-07-14 2009-12-16 浪潮电子信息产业股份有限公司 一种基于硬件计数器获取性能数据实现动态优化服务器性能的方法

Also Published As

Publication number Publication date
WO2016165542A1 (zh) 2016-10-20
CN106155913A (zh) 2016-11-23

Similar Documents

Publication Publication Date Title
CN106155913B (zh) 缓存命中率分析的方法及设备
CN103577440B (zh) 一种非关系型数据库中的数据处理方法和装置
CN104699422B (zh) 缓存数据的确定方法及装置
CN103412916B (zh) 一种监控系统的多维度数据存储、检索方法及装置
CN109164980A (zh) 一种时序数据的聚合优化处理方法
JP2019204472A (ja) Hadoopに基づいて、データマージモジュールとHBaseキャッシュモジュールを備えるHDFSから複数の2MB以下の小さなファイルを読み込む方法
KR100960120B1 (ko) 시그니처 스트링 저장 메모리 최적화방법과 그 메모리 구조및 시그니처 스트링 패턴 매칭방법
CN112100293A (zh) 数据处理方法、数据访问方法、装置及计算机设备
US10481817B2 (en) Methods and apparatus to optimize dynamic memory assignments in multi-tiered memory systems
CN110535825B (zh) 一种特征网络流的数据识别方法
CN103019887A (zh) 数据备份方法及装置
CN104156323B (zh) 一种高速缓冲存储器的数据块长度自适应读取方法及装置
JP2019204473A (ja) Hadoopに基づいて、データマージモジュールとHBaseキャッシュモジュールを備えるHDFSに複数の2MB以下の小さなファイルを書き込む方法
JP2016153957A (ja) データ配置プログラム、データ配置装置およびデータ配置方法
CN109165096A (zh) web集群的缓存利用系统及方法
CN113641681B (zh) 一种空间自适应的海量数据查询方法
CN107992402A (zh) 日志管理方法及日志管理装置
CN109189726B (zh) 一种读写日志的处理方法及装置
CN107515807A (zh) 一种存储监控数据的方法及装置
CN113923002A (zh) 计算机网络入侵防御方法、装置、存储介质及处理器
CN109144431A (zh) 数据块的缓存方法、装置、设备及存储介质
CN105045894A (zh) 一种面向分布式顺序表的缓存方法及系统
CN107807793A (zh) 分布式计算机存储系统中数据副本异构存储与访问方法
CN104598567B (zh) 一种基于Hadoop MapReduce编程框架的数据统计排重的方法
CN106933974A (zh) 一种视频文件索引信息的构建和查询方法及装置

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