本申请属于缓存存储技术领域,具体地讲,涉及一种多键值缓存存储方法、装置及系统。
背景技术:
当前随着互联网技术及应用的快速发展,为了提升应用系统的响应速度,缓存技术已经被广泛的应用。
但目前现有的缓存技术,使用kv存储方式,通常都只考虑了访问的性能,却忽视了存储空间的限制,在部分场景下,缓存存储空间会成为很重要的考虑因素,如本地缓存(使用应用系统自身内存,空间会比较有限)、为节约成本精简缓存设备等。
例如,现有的缓存使用表示为c<key,res>的存储单元,key为键值,也就是索引;res为缓存数据,可以为单个元素,也可以是元素的集合。假设某类数据的缓存中有键值1、键值2对应的一个元素1、元素2的两个存储单元表示为c1<k1,r1>、c2<k2,r2>,又有键值3对应的元素集合包含元素1、元素2的一个存储单元表示为c3<k3,<r1,r2>>,那么在这三组缓存单元中,r1、r2在缓存中是冗余存储的。首先,冗余存储消耗了多余的存储空间;另外,对缓存的刷新也造成许多额外的工作,假设r1有变化,需要同时去刷新c1和c3中的r1。如果该缓存数据的访问键值有多种不同的组合,就会造成存储空间成倍增长,甚至组合爆炸。
技术实现要素:
本申请提供了一种多键值缓存存储方法、装置及系统,以至少解决现有的缓存对象结构容易造成冗余存储进而消耗多余的存储空间为缓存刷新增加了工作量。
根据本申请的一个方面,提供了一种多键值缓存存储系统,包括:应用系统以及与应用系统通信连接的缓存数据库,应用系统中包括多键值场景配置模块,用于为应用程序指定的待缓存数据按不同场景配置不同的键值,生成缓存对象,并将缓存对象发送至缓存数据库进行存储。
在一实施例中,缓存数据库中包括缓存存储模块;
缓存存储模块中包括:
场景配置读取装置,用于读取多键值场景配置模块中的场景配置;以及
缓存存储接口装置,用于接收应用系统发出的缓存指令,根据获取的场景配置存储缓存对象。
在一实施例中,缓存数据库中还包括缓存检索模块,用于接收缓存检索指令并根据读取的场景配置执行检索操作。
在一实施例中,缓存数据库中还包括:
缓存消除模块,用于清除缓存数据库中的缓存以及对缓存的数据与匹配的键值进行销毁;
缓存管理模块,用于对缓存的生命周期进行管理。
根据本申请的另一个方面,还提供了一种多键值缓存存储方法,包括:
判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值;
根据判断结果采用对应的方式将待缓存数据进行缓存。
在一具体实施例中,根据判断结果采用对应的方式将待缓存数据进行缓存,包括:
若待缓存数据对应的缓存对象不存在,为待缓存数据匹配一个或多个键值以构建缓存对象;
将缓存对象发送至缓存数据库进行存储。
根据本申请的另一个方面,还提供了一种多键值缓存存储装置,包括:
判断模块,用于判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值;
缓存模块,用于根据判断结果采用对应的方式将待缓存数据进行缓存。
在一实施例中,缓存模块包括:
缓存对象判断模块,用于当待缓存数据对应的缓存对象不存在,为待缓存数据匹配一个或多个键值以构建缓存对象;
存储模块,用于将缓存对象发送至缓存数据库进行存储。
本申请通过对现有的缓存键值索引的方式进行重新设计,采用一个待缓存数据按不同的场景匹配多个键值的存储方式,大大降低了缓存的存储空间要求,同时,也不会影响缓存的性能,既能够提高系统的响应速度,又可以节省缓存的存储空间,提升缓存的使用效能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中缓存数据的键值树状图。
图2为本申请中缓存数据的键值树状图。
图3为本申请提供的一种多键值缓存存储系统结构图。
图4为本申请实施例中应用系统内部结构图。
图5为本申请实施例中缓存数据库的内部结构图。
图6为本申请实施例中缓存存储模块内部结构图。
图7为本申请实施例中缓存检索模块内部结构图。
图8为本申请实施例中缓存检索树状关系图。
图9为本申请实施例中缓存消除树状关系图。
图10为本申请实施例中缓存消除后的树状关系图。
图11为本申请提供的一种多键值缓存存储方法的流程图。
图12为本申请实施例中根据判断结果采用对应的方式进行缓存流程图。
图13为本申请提供的一种多键值缓存存储装置的结构框图。
图14为本申请实施例中缓存模块结构框图。
图15为本申请实施例中一种电子设备的具体实施方式。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有的缓存技术采用kv存储方式(key-value键值存储),通常都只考虑了访问的性能却忽视了存储空间的限制,如图1所示,为现有的缓存模式,一个键值对应着一种场景,一种场景中包含一个或多个缓存数据,如果该缓存数据的访问键值有多重不同的组合,就会造成存储空间成倍增长甚至组合爆炸。
基于上述问题,本申请提供了一种新的缓存模式,即一个缓存数据按不同的场景对应多个键值。如果采用现有的缓存模式,缓存对象(存储单元)可以表示为c1<k1,r1>、c2<k2,r2>、c3<k3,<r1,r2>>,其中,k(key)为键值,也就是索引,不同的键值对应着不同的场景,r(res)为缓存资源(数据),缓存数据可以为单个元素,也可以是元素的集合,那么,采用本申请提供的缓存模式,针对同样的缓存数据r1和r2,缓存对象则变为c1<k1:k3,r1>、c2<k2:k3,r2>。通过上述例子可知,相比于现有的缓存模式,本申请提供的缓存模式可以节省1个存储单元,当缓存数据与场景较多的情况下(如图2所示),本申请提供的缓存模式可以节省大量的存储单元。
基于上述缓存模式,本申请对现有的缓存存储系统进行了改进,如图3所示,包括:应用系统以及与应用系统通信连接的缓存数据库,特别地,应用系统中包括一多键值场景配置模块,用于为应用程序指定的待缓存数据按不同场景配置不同的键值,生成缓存对象,并将缓存对象发送至缓存数据库进行存储。
在一具体实施例中,如图3所示,整个缓存存储系统主要包含了应用系统1和缓存数据库2。应用系统1主要提供缓存操作指令处理、缓存场景配置、缓存存储接口、缓存检索接口、缓存消除接口、连接交互模块的功能,可以作为中间件提供给应用程序使用。缓存数据库2主要提供缓存存储、缓存检索、缓存消除以及缓存管理的功能的实现,为应用系统1提供多键值缓存的技术实现。缓存数据库2可以为应用系统1自身的本地缓存也可以为远程的缓存服务器。
在一具体实施例中,如图4所示,应用系统内部包括了缓存操作指令处理模块11、缓存存储模块12、缓存检索模块13、缓存消除模块14、连接交互模块16以及本申请新增的核心改进点——场景配置模块15;缓存操作指令处理模块11负责接收应用系统1中的应用程序发送的缓存操作指令,如存储、检索、消除等,并检查指令合法性,同时负责缓存操作结果的输出;缓存存储模块12负责连接缓存数据库2进行缓存的存储和刷新,并为应用程序提供缓存存储的接口和视图;缓存检索模块13,负责连接缓存数据库进行缓存的检索,并为应用程序提供缓存检索的接口和视图;缓存消除模块14,负责连接缓存数据库系统进行缓存的消除,并为应用程序提供缓存消除的接口和视图;连接交互模块16,负责应用系统与缓存数据库系统的连接以及数据交互管理;场景配置模块15,负责为应用程序提供缓存多键值设置的场景配置,也就是可以根据应用程序指定的需要缓存的资源,进行不同场景键值的配置;其中,资源(数据)记为r,r通常由不同的要素(或者称为字段)构成,记为:[ra,rb,rc,rd,re,rf,rg,...],其中ra,rb,rc,rd,re,rf,rg,代指组成数据r的不同元素,表达式表示如下:
r=[ra,rb,rc,rd,re,rf,rg...]
多键值场景的配置记为mkcnf(multiplekeyconfiguration),比如对于资源r,场景配置表达式如下:
mkcnf={r,ku[ra,rb,rc]:kb[rb,rc]:kc[rc]}
以上表达式表示,对于资源r,配置三种场景的键值,分别为键值ku,由要素[ra,rb,rc]组成;键值kb,由要素[rb,rc]组成;键值kc,由要素[rc]组成;并且约定,第一个键值ku为唯一键值,与r必须一一对应;
缓存系统中的缓存对象表示为:
c<ku:kb:kc,r'>
在具体的实现实例中,r’可以为目标资源r,也可以是主键值的集合,通过键值传递链最终引用到目标资源r。
在一实施例中,缓存数据库中包括缓存存储模块。
缓存存储模块中包括:
场景配置读取装置,用于读取多键值场景配置模块中的场景配置;以及
缓存存储接口装置,用于接收应用系统发出的缓存指令,根据获取的场景配置存储缓存对象。
在一具体实施例中,如图5所示,为缓存数据库的结构框图,包括:缓存存储模块21,负责缓存存储和刷新的具体实现和缓存数据结构的建立。如图6所示,在缓存存储模块21中,包括场景配置读取装置111、缓存存储接口装置112、缓存刷新接口装置113;该模块为应用程序提供与普通缓存系统统一的存储操作视图,使应用程序尽量不受缓存系统变动的影响,比如存储操作记为put,则应用程序存储操作依然使用put(k,r)的方式,其中k为唯一键,r为资源。
场景配置读取装置111负责读应用系统1中取场景配置模块15中的配置并解析,提供给缓存存储操作针对多键值的处理;缓存存储接口装置112负责接收缓存存储指令,并根据场景配置执行put存储操作;假设有实例化的资源r1、r2、r3需要进行缓存存储,按r的表达式表示为:
r1=[ra1,rb1,rc1,rd1,re1,rf1,rg1,...]
r2=[ra2,rb1,rc1,rd2,re2,rf2,rg2,...]
r3=[ra2,rb2,rc1,rd3,re3,rf3,rg3,...]
四个资源主键值不同,但其他场景键值有部分相同,如r1的ka键值[rb1,rc1]与r2相同;
对于传统的缓存系统,应用程序需要对于r1需要做如下存储操作:
也就是说在系统存储中,r1冗余存储了3次,往往资源占用空间较大,会造成存储空间的浪费,而键值占用空间一般较小;
本申请提供的缓存系统,对于应用程序,只需要进行
存储操作完成后,资源在系统中的缓存对象表示为如下,其中s为引用的键值集合:
我们称c<ku,r>为缓存(资源)主对象,其他为缓存键值对象;
同理,r2、r3依次存储操作及缓存对象表示如下:
经由本申请改进后的缓存存储系统经过上述存储操作后生成6个缓存对象并形成键值树,与改进前的缓存存储系统对比图如图1和图2所示。
缓存刷新接口装置113用于当资源r对应的缓存对象已存在并且有变化时对缓存对象进行刷新。当资源r1有变化需要更新时,只需要刷新主对象c1即可,而不需要去刷新c2和c3;
也就是只需要执行
在一实施例中,缓存数据库中还包括缓存检索模块,用于接收缓存检索指令并根据读取的场景配置执行检索操作。
在一实施例中,缓存数据库中还包括:
缓存消除模块,用于清除缓存数据库中的缓存以及对缓存的数据与匹配的键值进行销毁;
缓存管理模块,用于对缓存的生命周期进行管理。
在一具体实施例中,缓存数据库2中还包括缓存检索模块22负责缓存检索的具体实现及对缓存数据结构的操作;缓存消除模块23负责缓存消除的具体实现及对缓存数据结构的销毁;缓存管理模块24负责对缓存的生命周期进行管理;连接交互模块25负责缓存数据库系统与应用系统的连接以及数据交互管理;
如图7所示,缓存检索模块22中包括:场景配置读取装置121、缓存检索接口装置122;该模块为应用程序提供与普通缓存系统统一的检索操作视图,使应用程序尽量不受缓存系统变动的影响,比如检索操作记为get,则应用程序存储操作依然使用get(k)的方式,其中k为键值。场景配置读取装置121,负责读取场景配置模块15中的配置并解析,提供给缓存检索操作针对多键值的处理;
缓存检索接口装置122,负责接收缓存检索指令,并执行get检索操作;在一具体实施例中,假如应用程序需要检索c1,也就是r1,则发送指令
假如应用程序需要检索c3,也就是同时检索r1、r2、r3,则发送指令
以上检索结果为键值集合
最终合并结果得到
缓存消除模块23中包括:场景配置读取装置、缓存存储接口装置;该模块为应用程序提供与普通缓存系统统一的消除操作视图,使应用程序尽量不受缓存系统变动的影响,比如消除操作记为del,则应用程序存储操作依然使用del(k)的方式,其中k为键值。场景配置读取装置,负责读取场景配置模块15中的配置并解析,提供给缓存消除操作针对多键值的处理;缓存存储接口装置,负责接收缓存检索指令,并执行del消除操作;假如应用程序需要消除c1,也就是r1,则发送指令
先消除键值对象集合中关联的唯一键值,最后消除主对象,消除操作后受影响的c1、c2、c3对象结果如下:
c1<null>
null表示已消除对象为空,完成消除,最终缓存中对象树状关系图如图10所示。
针对上述缓存存储系统,本申请还提供了一种缓存存储方法,如图11所示,包括:
s1101:判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值。
在一具体实施例中,接收应用程序的存储指令put(ku,r),并检查指令合法性,读取待缓存资源(数据)r对应的多键值缓存场景配置,检查r对应的缓存对象c<ku,r>是否已存在。
s1102:根据判断结果采用对应的方式将待缓存数据进行缓存。
在一具体实施例中,根据判断结果采用对应的方式将待缓存数据进行缓存,如图12所示,包括:
s1201:若待缓存数据对应的缓存对象不存在,为待缓存数据匹配一个或多个键值以构建缓存对象。
如果c<ku,r>不存在,则根据多键值场景配置建立缓存对象,缓存对象中包括待缓存的数据以及一个或多个键值对象。
s1202:将缓存对象发送至缓存数据库进行存储。
本申请还提供了一种缓存检索逻辑程序,包括:
s211:接收应用程序存储指令get(k),并检查指令合法性;
s212:执行get(k),从缓存数据库获取结果;
s213:检查返回结果是否为键值集合;
s214:如果返回结果为键值集合,遍历键值集合,对于每一个键值,重复步骤s212的操作;
s215:如果返回结果不是键值集合,则获取缓存主对象,并加入检索结果;
s216:合并检索结果;
s217:返回缓存检索操作结果,输出资源的结果集,以便应用程序进行下一步处理。
本申请还提供了而一种缓存消除逻辑流程,详细步骤如下:
s311:接收应用程序存储指令del(ku),并检查指令合法性;
s312:读取资源r对应的多键值缓存场景配置;
s313:检查资源r的场景配置中是否存在非唯一键;
s314:如果存在非唯一键,按照非唯一键,遍历键值对象集合,消除键值对象集合中的唯一键值;
s315:如果不存在非唯一键或者在完成非唯一键的消除操作后,执行消除资源r的缓存主对象;
s316:对最终的缓存对象以及键值对象进行数据存储处理;
s317:返回缓存存储操作结果,成功还是失败,以便应用程序进行下一步处理。
基于同一发明构思,本申请实施例还提供了一种多键值缓存存储装置,可以用于实现上述实施例中所描述的方法,如下面实施例所述。由于该多键值缓存存储装置解决问题的原理与多键值缓存存储方法相似,因此多键值缓存存储装置的实施可以参见多键值缓存存储方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
如图13所示,本申请提供了一种多键值缓存存储装置,包括:
判断模块1201,用于判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值;
缓存模块1202,用于根据判断结果采用对应的方式将待缓存数据进行缓存。
在一实施例中,如图14所示,缓存模块1202包括:
缓存对象判断模块1301,用于当待缓存数据对应的缓存对象不存在,为待缓存数据匹配一个或多个键值以构建缓存对象;
存储模块1302,用于将缓存对象发送至缓存数据库进行存储。
本申请通过对现有的缓存键值索引的方式进行重新设计,采用一个待缓存数据按不同的场景匹配多个键值的存储方式,大大降低了缓存的存储空间要求,同时,也不会影响缓存的性能,既能够提高系统的响应速度,又可以节省缓存的存储空间,提升缓存的使用效能。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
本申请的实施例还提供能够实现上述实施例中的方法中全部步骤的一种电子设备的具体实施方式,参见图15,所述电子设备具体包括如下内容:
处理器(processor)1401、内存1402、通信接口(communicationsinterface)1403、总线1404和非易失性存储器1405;
其中,所述处理器1401、内存1402、通信接口1403通过所述总线1404完成相互间的通信;
所述处理器1401用于调用所述内存1402和非易失性存储器1405中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例中的方法中的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
s1101:判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值。
s1102:根据判断结果采用对应的方式将待缓存数据进行缓存。
本申请的实施例还提供能够实现上述实施例中的方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
s1101:判断待缓存数据对应的缓存对象是否已存在,缓存对象包括:数据及与该数据对应的一个或多个键值。
s1102:根据判断结果采用对应的方式将待缓存数据进行缓存。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。虽然本说明书实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。
在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。以上所述仅为本说明书实施例的实施例而已,并不用于限制本说明书实施例。对于本领域技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的权利要求范围之内。