CN107102896A - 一种多级缓存的操作方法、装置及电子设备 - Google Patents
一种多级缓存的操作方法、装置及电子设备 Download PDFInfo
- Publication number
- CN107102896A CN107102896A CN201610097163.5A CN201610097163A CN107102896A CN 107102896 A CN107102896 A CN 107102896A CN 201610097163 A CN201610097163 A CN 201610097163A CN 107102896 A CN107102896 A CN 107102896A
- Authority
- CN
- China
- Prior art keywords
- caching
- data
- api
- category information
- heap
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种多级缓存的操作方法、装置及电子设备。其中所述多级缓存的操作方法包括:通过特定操作的统一缓存API接收对应多级缓存的特定操作的调用指令;特定操作的统一缓存API调用特定操作的各级缓存API,通过特定操作的各级缓存API,对多级缓存进行特定操作。采用本申请提供的多级缓存的操作方法,由于将特定操作的各级缓存API封装在统一缓存API内,对外暴露单一的缓存API,使得使用方操作多级缓存和操作单一类型的缓存没有任何区别,从而达到简化程序代码复杂度的效果。
Description
技术领域
本申请涉及数据存储技术领域,具体涉及一种多级缓存的操作方法、装置及电子设备。本申请同时涉及一种缓存数据一致性的校验方法、装置及电子设备,一种堆内缓存的过载保护方法、装置及电子设备,一种序列化方法、装置及电子设备,一种反序列化方法、装置及电子设备,以及一种多级缓存系统。
背景技术
在需要使用缓存的场景,即可以选择使用本地缓存(即:单机缓存),也可以选择使用分布式缓存。下面分别对各种缓存方案及其优劣势进行说明。
1)本地缓存
本地缓存的优势在于访问延时非常低,堆内缓存无需序列化,其劣势在于本地缓存容量非常小,命中率很低,而且极易造成不同机器之间缓存数据的不一致性。
对于Java的本地缓存,由于缓存数据保存位置的不同,存在着堆内缓存以及堆外缓存两种缓存方案。堆内缓存将数据保存在了Java堆内,其优势在于缓存数据无需进行序列化,耗费CPU最少同时获取数据的延时也最低,其劣势是会影响到Java的GC过程,随着缓存数据量的增大,Java GC耗费时间也会增大,Java GC反过来会影响堆内缓存的性能,从而Java GC限制了堆内缓存的缓存空间大小。堆外缓存的优势是逃离了Java GC,从而可以持有更大的缓存空间,而其劣势在于需要将数据序列化后才能保存,需要耗费一定的CPU。
2)分布式缓存
分布式缓存的优势在于容量非常大,由于所有机器都访问同一个缓存,所以不会存在不同机器得到的缓存数据不一致的问题,其劣势在于每次访问缓存都要发起网络请求,因此存在一定的网络延时以及序列化开销。
综上所述,各种缓存方案均具有各自的优势和劣势。当前,对于大部分需要多机部署的应用,限于单机缓存的容量限制、Java GC(Garbage Collection,垃圾收集)机制的影响以及一致性校验难题,一般会单独使用分布式缓存,这种架构相对简单,但也不可避免的需要承担分布式缓存所带来的劣势。
为了能够兼顾各种缓存方案的优势,某些对访问延时要求苛刻的系统会选择同时使用单机缓存和分布式缓存,即:采用多级(分级)缓存方案。然而,由于各级缓存在代码架构上是分离的,并没有对外暴露出单一的缓存操作接口,因而,开发人员在使用缓存时需要同时调用不同缓存对应的不同接口,从而增加了代码的复杂度。
因此,在同时使用多种缓存方案时,现有技术存在无法通过统一的缓存操作接口操作各种缓存的问题。
发明内容
本申请提供一种多级缓存的操作方法、装置及电子设备,以解决现有技术存在无法通过统一的缓存操作接口操作各种缓存的问题。本申请另外提供一种缓存数据一致性的校验方法、装置及电子设备,一种堆内缓存的过载保护方法、装置及电子设备,一种序列化方法、装置及电子设备,一种反序列化方法、装置及电子设备,以及一种多级缓存系统。
本申请提供一种多级缓存的操作方法,所述多级缓存包括本地缓存和分布式缓存,包括:
通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;
所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;
其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
可选的,所述特定操作包括所述写缓存;所述调用指令包括待缓存数据及其数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述写缓存的统一缓存API调用所述写缓存的各级缓存API,通过所述写缓存的各级缓存API,将所述数据标识与所述待缓存数据的对应记录写入所述多级缓存。
可选的,所述将所述数据标识与所述待缓存数据的对应记录写入所述多级缓存,包括:
所述写缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述对应记录写入所述本地缓存;
所述写缓存的统一缓存API调用所述写缓存的分布式缓存API,通过所述写缓存的分布式缓存API,将所述对应记录写入所述分布式缓存。
可选的,所述待缓存数据的数据类型包括对象类型,在所述将所述对应记录写入所述分布式缓存之前,还包括:
对所述待缓存数据进行序列化,生成所述待缓存数据的序列化数据;
所述将所述对应记录写入所述分布式缓存,采用如下方式:
将所述数据标识与所述序列化数据的对应记录写入所述分布式缓存;
所述对所述待缓存数据进行序列化,生成所述待缓存数据的序列化数据,包括:
获取所述待缓存数据的类名称、属性名称及属性值;所述类名称包括类全名;
根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待缓存数据的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
根据所述类信息标识和各个所述属性值,生成所述待缓存数据的序列化数据。
可选的,所述本地缓存包括堆内缓存和堆外缓存;所述将所述对应记录写入所述本地缓存,包括:
所述写缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述对应记录写入所述堆内缓存;
所述写缓存的统一缓存API调用所述写缓存的堆外缓存API,通过所述写缓存的堆外缓存API,将所述对应记录写入所述堆外缓存。
可选的,所述特定操作包括所述读缓存;所述调用指令包括待读取数据的数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述读缓存的统一缓存API调用所述读缓存的各级缓存API,通过所述读缓存的各级缓存API,根据所述数据标识,从所述多级缓存中获取所述待读取数据。
可选的,所述从所述多级缓存中获取所述待读取数据,包括:
所述读缓存的统一缓存API调用所述读缓存的本地缓存API,通过所述读缓存的本地缓存API,从所述本地缓存获取所述待读取数据;
若所述待读取数据未存储在所述本地缓存,则所述读缓存的统一缓存API调用所述读缓存的分布式缓存API,通过所述读缓存的分布式缓存API,从所述分布式缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述待读取数据写入所述本地缓存。
可选的,所述本地缓存包括堆内缓存和堆外缓存;所述从所述本地缓存获取所述待读取数据,包括:
所述读缓存的统一缓存API调用所述读缓存的堆内缓存API,通过所述读缓存的堆内缓存API,从所述堆内缓存获取所述待读取数据;
若所述待读取数据未存储在所述堆内缓存,则所述读缓存的统一缓存API调用所述读缓存的堆外缓存API,通过所述读缓存的堆外缓存API,从所述堆外缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述待读取数据写入所述堆内缓存;
所述将所述待读取数据写入所述本地缓存,包括:
所述读缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述待读取数据写入所述堆内缓存;
所述读缓存的统一缓存API调用所述写缓存的堆外缓存API,通过所述写缓存的堆外缓存API,将所述待读取数据写入所述堆外缓存。
可选的,所述特定操作包括所述删除缓存;所述调用指令包括待删除数据的数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述删除缓存的统一缓存API调用所述删除缓存的各级缓存API,通过所述删除缓存的各级缓存API,根据所述数据标识,从所述多级缓存中删除所述待删除数据。
可选的,所述从所述多级缓存中删除所述待删除数据,包括:
所述删除缓存的统一缓存API调用所述删除缓存的本地缓存API,通过所述删除缓存的本地缓存API,从所述本地缓存中删除所述待删除数据;
所述删除缓存的统一缓存API调用所述删除缓存的分布式缓存API,通过所述删除缓存的分布式缓存API,从分布式缓存中删除所述待删除数据。
可选的,所述从所述本地缓存中删除所述待删除数据,包括:
所述删除缓存的统一缓存API调用所述删除缓存的堆内缓存API,通过所述删除缓存的堆内缓存API,从所述堆内缓存中删除所述待删除数据;
所述删除缓存的统一缓存API调用所述删除缓存的堆外缓存API,通过所述删除缓存的堆外缓存API,从所述堆外缓存中删除所述待删除数据。
可选的,所述特定操作包括所述清空缓存;所述对所述多级缓存进行所述特定操作,采用如下方式:
所述清空缓存的统一缓存API调用所述清空缓存的各级缓存API,通过所述清空缓存的各级缓存API,清空所述多级缓存中的缓存数据。
可选的,所述清空所述多级缓存中的缓存数据,包括:
所述清空缓存的统一缓存API调用所述清空缓存的本地缓存API,通过所述清空缓存的本地缓存API,清空所述本地缓存中的缓存数据;
所述清空缓存的统一缓存API调用所述清空缓存的分布式缓存API,通过所述清空缓存的分布式缓存API,清空所述分布式缓存中的缓存数据。
可选的,所述本地缓存包括堆内缓存和堆外缓存;所述清空所述本地缓存中的缓存数据,包括:
所述清空缓存的统一缓存API调用所述清空缓存的堆内缓存API,通过所述清空缓存的堆内缓存API,清空所述堆内缓存中的缓存数据;
所述清空缓存的统一缓存API调用所述清空缓存的堆外缓存API,通过所述清空缓存的堆外缓存API,清空所述堆外缓存中的缓存数据。
可选的,还包括:
将对所述本地缓存的特定操作和对所述分布式缓存的特定操作封装在所述特定操作的统一缓存API中。
相应的,本申请还提供一种多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,包括:
接收指令单元,用于通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;
执行单元,用于所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;
其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,所述多级缓存的操作装置被所述处理器执行时,包括如下步骤:通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
此外,本申请还提供一种缓存数据一致性的校验方法,包括:
读取原始数据的数据变更记录;
针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
可选的,所述数据变更记录包括发生变更的原始数据的数据标识;
所述对存储在所述本地缓存中的所述原始数据的缓存数据进行失效处理,采用如下方式:
根据所述数据标识,从所述本地缓存中删除与所述数据标识对应的所述缓存数据。
可选的,还包括:
若所述读取数据变更记录的操作失败、且预设的数据一致性校验模式为严格模式,则清空所述本地缓存中的缓存数据。
可选的,所述数据变更记录,采用如下方式生成:
当所述原始数据发生变更时,原始数据变更端生成并存储所述原始数据的所述数据变更记录。
可选的,当预设的执行条件成立时,执行所述缓存数据一致性的校验方法;
所述预设的执行条件,包括如下条件:
当前时间与上次执行所述缓存数据一致性的校验方法的时间间隔大于预设的时间间隔。
可选的,所述缓存数据一致性的校验方法在异步线程中执行;所述方法还包括:
启动执行所述缓存数据一致性的校验方法的所述异步线程。
可选的,若预设的数据校验异步线程的终止标志位为真,则终止执行所述缓存数据一致性的校验方法。
可选的,还包括:
记录数据一致性校验的处理结果。
相应的,本申请还提供一种缓存数据一致性的校验装置,包括:
读取单元,用于读取原始数据的数据变更记录;
失效处理单元,用于针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储缓存数据一致性的校验装置,所述缓存数据一致性的校验装置被所述处理器执行时,包括如下步骤:读取原始数据的数据变更记录;针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
此外,本申请还提供一种堆内缓存的过载保护方法,包括:
获取堆内缓存的使用情况;
若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
可选的,所述使用情况包括容量使用占比;所述容量使用占比是指,所述堆内缓存的使用量与总容量的比值;所述预设的使用规则包括所述容量使用占比小于等于预设的最大使用占比阈值;
所述使用情况不满足预设的使用规则,包括:所述容量使用占比大于所述预设的最大使用占比阈值。
可选的,当预设的执行条件成立时,执行所述堆内缓存的过载保护方法;
所述预设的执行条件,包括如下条件:
当前时间与上次执行所述堆内缓存的过载保护方法的时间间隔大于预设的时间间隔。
可选的,所述堆内缓存的过载保护方法在异步线程中执行;所述方法还包括:
启动执行所述堆内缓存的过载保护方法的所述异步线程。
可选的,若预设的过载保护异步线程的终止标志位为真,则终止执行所述堆内缓存的过载保护方法。
可选的,还包括:
记录过载保护的处理结果。
相应的,本申请还提供一种堆内缓存的过载保护装置,包括:
获取单元,用于获取堆内缓存的使用情况;
清理单元,用于若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储堆内缓存的过载保护装置,所述堆内缓存的过载保护装置被所述处理器执行时,包括如下步骤:获取堆内缓存的使用情况;若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
此外,本申请还提供一种序列化方法,包括:
获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;
根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
可选的,所述从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识,包括:
根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息;
以所述类信息为检索条件,在所述预先存储的类信息标识和类信息的对应关系中进行检索,获取所述待序列化对象的类信息标识。
可选的,所述生成所述待序列化对象的序列化数据,包括:
将所述类信息标识写入二进制数据流;
根据所述类信息包括的各个所述属性名称的顺序关系,依次将与各个所述属性名称对应的所述属性值递归写入所述二进制数据流,形成所述序列化数据。
可选的,若未获取到所述待序列化对象的所述类信息标识,则在所述生成所述待序列化对象的序列化数据之前,还包括:
根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息,并为所述类信息生成所述类信息标识。
可选的,还包括:
存储所述类信息标识和所述类信息的对应关系。
相应的,本申请还提供一种序列化装置,包括:
第一获取单元,用于获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;
第二获取单元,用于根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
第一生成单元,用于根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储序列化装置,所述序列化装置被所述处理器执行时,包括如下步骤:获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
此外,本申请还提供一种反序列化方法,包括:
获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;
根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;
根据所述对象的类信息和各个所述属性值,构建所述对象。
可选的,还包括:
若未获取到所述对象的类信息,则抛出序列化失败的异常信息。
可选的,所述构建所述对象,包括:
根据所述对象的类信息,获取所述类名称和所述属性名称;
根据所述类名称,生成与所述类名称对应的无参对象;
根据所述对象的类信息包括的各个所述属性名称的顺序关系,递归地将各个所述属性值赋值给其所属的所述属性名称。
可选的,在所述递归地将各个所述属性值赋值给其所属的所述属性名称之前,还包括:
判断所述序列化数据包含的所述属性名称及各个所述属性名称之间的顺序关系和当前环境下与所述类名称对应的对象包含的各个属性名称及其之间的顺序关系是否一致;若否,则抛出序列化失败的异常信息。
相应的,本申请还提供一种反序列化装置,包括:
第一获取单元,用于获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;
第二获取单元,用于根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;
构建单元,用于根据所述对象的类信息和各个所述属性值,构建所述对象。
相应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储反序列化装置,所述反序列化装置被所述处理器执行时,包括如下步骤:获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;根据所述对象的类信息和各个所述属性值,构建所述对象。
此外,本申请还提供一种多级缓存系统,所述多级缓存包括本地缓存和分布式缓存,包括:上述任一项所述的多级缓存的操作装置,上述任一项所述的缓存数据一致性的校验装置,上述任一项所述的堆内缓存的过载保护装置,上述任一项所述的序列化装置,以及上述任一项所述的反序列化装置的至少一者。
与现有技术相比,本申请具有以下优点:
本申请提供的多级缓存的操作方法、装置及电子设备,通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令,其中所述特定操作的统一缓存API封装了对本地缓存的特定操作和对分布式缓存的特定操作;然后由特定操作的统一缓存API调用特定操作的各级缓存API,再通过特定操作的各级缓存API,对多级缓存进行特定操作,其中所述各级缓存API包括本地缓存API和分布式缓存API。采用本申请提供的方法,由于将特定操作的各级缓存API封装在统一缓存API内,对外暴露单一的缓存API,使得使用方操作多级缓存和操作单一类型的缓存没有任何区别,从而达到简化程序代码复杂度的效果。
附图说明
图1是本申请的多级缓存的操作方法实施例的流程图;
图2是本申请的多级缓存的操作装置实施例的示意图;
图3是本申请的电子设备实施例的示意图;
图4是本申请的缓存数据一致性的校验方法实施例的流程图;
图5是本申请的缓存数据一致性的校验装置实施例的示意图;
图6是本申请的又一电子设备实施例的示意图;
图7是本申请的堆内缓存的过载保护方法实施例的流程图;
图8是本申请的堆内缓存的过载保护装置实施例的示意图;
图9是本申请的又一电子设备实施例的示意图;
图10是本申请的序列化方法实施例的流程图;
图11是本申请的序列化方法实施例的序列化数据格式与普通序列化数据格式的对比示意图;
图12是本申请的序列化装置实施例的示意图;
图13是本申请的又一电子设备实施例的示意图;
图14是本申请的反序列化方法实施例的流程图;
图15是本申请的反序列化装置实施例的示意图;
图16是本申请的又一电子设备实施例的示意图;
图17是本申请的多级缓存系统实施例的流程图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了一种多级缓存的操作方法、装置及电子设备,一种缓存数据一致性的校验方法、装置及电子设备,一种堆内缓存的过载保护方法、装置及电子设备,一种序列化方法、装置及电子设备,一种反序列化方法、装置及电子设备,以及一种多级缓存系统。在下面的实施例中逐一进行详细说明。
本申请提供的多级缓存的操作方法,其核心的基本思想为:将特定操作的各级缓存API封装在统一缓存API内,对外暴露单一的缓存API,使得使用方操作多级缓存和操作单一类型的缓存没有任何区别,从而达到简化程序代码复杂度的效果。
请参考图1,其为本申请的多级缓存的操作方法实施例的流程图。所述方法包括如下步骤:
步骤S101:通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令。
本申请实施例所述的多级缓存包括本地缓存和分布式缓存。对于Java语言等通过垃圾收集器管理内存的虚拟机而言,本地缓存又可包括堆内缓存和对外缓存。所述的本地缓存是指,将应用程序所在设备的物理内存划分出一部分空间用来缓冲数据,即:应用程序把数据缓存在本机内存中。所述的分布式缓存是指,将缓存数据存储在缓存服务器中,缓存服务器可包括多台服务器。对于存储在本地缓存中的缓存数据,需要的时候直接去本机内存进行获取;对于存储在分布式缓存中的缓存数据,应用程序需要跨进程的去访问分布式缓存服务器。
对于缓存而言,最基本的操作包括:写缓存、读缓存、删除缓存或清空缓存。其中,写缓存是指,将已读取的数据保留在缓存空间;读缓存是指,从缓存空间读取数据,避免直接从磁盘上读取,从而提高速率;删除缓存既可以删除指定缓存数据,也可以删除一类缓存数据;清空缓存是指,将缓存空间中的数据全部清除。
本申请实施例所述的特定操作的统一缓存API(Application ProgrammingInterface,应用程序编程接口)是指,封装了对本地缓存的特定操作和对分布式缓存的特定操作的缓存API。通过特定操作的统一缓存API,能够接收对应多级缓存的特定操作的调用指令,统一缓存API根据调用指令对多级缓存进行特定操作。由于将特定操作的各级缓存API封装在统一缓存API内,对外暴露单一的缓存API,使得使用方操作多级缓存和操作单一类型的缓存没有任何区别,从而达到简化程序代码复杂度的效果。
步骤S103:所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作。
特定操作的统一缓存API接收到对应多级缓存的特定操作的调用指令之后,在统一缓存API内部,再通过分别调用特定操作的各级缓存API,对相应的缓存进行特定操作。所述的各级缓存API包括本地缓存API和分布式缓存API,其中,本地缓存API又可包括堆内缓存API和堆外缓存API。通过特定操作的本地缓存API,能够对本地缓存进行特定操作;通过特定操作的分布式缓存API,能够对分布式缓存进行特定操作。
下面分别以各种缓存操作为例,说明本申请实施例提供的多级缓存的操作方法。
1)写缓存
多级缓存包括本地缓存和分布式缓存,其中本地缓存可分为堆内缓存和堆内缓存两部分。从缓存容量角度而言,堆内缓存的容量最小,堆外缓存的容量大于堆内缓存,分布式缓存的容量最大。分布式缓存包含了所有的缓存数据,而堆内缓存和堆外缓存的数据是分布式缓存数据的子集。因此,在向多级缓存存储数据时,需要将待缓存数据分别存储在每一级缓存中。数据的存储顺序通常为:首先向堆内缓存存储数据,其次向堆外缓存存储数据,最后向分布式缓存存储数据。
对多级缓存执行写缓存的操作,所述的调用指令包括待缓存数据及其数据标识。所述的待缓存数据也称为缓存项,所述的数据标识也称为缓存键。通过写缓存的统一缓存API接收到对应多级缓存的写缓存的调用指令后,写缓存的统一缓存API将分别调用写缓存的各级缓存API,即:写缓存的本地缓存API和写缓存的分布式缓存API,通过写缓存的各级缓存API,将数据标识与待缓存数据的对应记录写入各级缓存。
具体的,将数据标识与待缓存数据的对应记录写入多级缓存,包括:1)写缓存的统一缓存API调用写缓存的本地缓存API,通过写缓存的本地缓存API,将对应记录写入本地缓存;2)写缓存的统一缓存API调用写缓存的分布式缓存API,通过写缓存的分布式缓存API,将对应记录写入分布式缓存。
在本实施例中,本地缓存包括堆内缓存和堆外缓存,因此,将对应记录写入本地缓存的步骤包括:1)写缓存的统一缓存API调用写缓存的堆内缓存API,通过写缓存的堆内缓存API,将对应记录写入所述堆内缓存;2)写缓存的统一缓存API调用写缓存的堆外缓存API,通过写缓存的堆外缓存API,将对应记录写入所述缓存。
需要注意的是,对于数据类型为对象类型的待存储数据,在将对应记录写入分布式缓存或堆外缓存之前,还包括:对待缓存数据进行序列化,生成待缓存数据的序列化数据,以便存储和传输待缓存数据。
作为一种优选的序列化方式,本申请实施例生成待缓存数据的序列化数据,包括:1)获取所述待缓存数据的类名称、属性名称及属性值;所述类名称包括类全名;2)根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待缓存数据的类信息标识;所述类信息包括所述类名称和各个所述属性名称;3)根据所述类信息标识和各个所述属性值,生成所述待缓存数据的序列化数据。
上述优选的序列化方式,将待缓存数据的类信息、与待缓存数据的属性值的序列化数据分开存储,待缓存数据的序列化数据包括根据类信息标识和属性值生成的序列化数据。由于待缓存数据的序列化数据用类信息标识替代类信息,因而,能够避免存储大量重复的类信息的序列化数据,从而达到降低序列化数据的空间复杂度及序列化处理的时间复杂度的效果。
2)读缓存
从最佳实践的角度,堆内缓存应该包含访问频次最大的热点数据,堆外缓存热度次之。当需要从多级缓存中读取缓存数据时,首先需要从堆内缓存中获取,如果没有,那么就会到堆外缓存中获取,如果该级也没有,则会到分布式缓存中获取。从堆内缓存到堆外缓存再到分布式缓存,各级缓存数据的热度在逐渐递减,而缓存容量却在逐渐增大。缓存数据热点的逐渐递减保证了最热的数据会从访问速度最快的堆内缓存中得到,而缓存容量的逐渐增大则保证了整个缓存的命中率不会很低。综上所述,从多级缓存读取数据时会按照由近及远(即:堆内缓存->堆外缓存->分布式缓存)的顺序读取数据,无论在哪一级中读取到数据都立即返回。
对多级缓存执行读缓存的操作,所述的调用指令包括待读取数据的数据标识。通过读缓存的统一缓存API接收到对应多级缓存的读缓存的调用指令后,读缓存的统一缓存API将分别调用读缓存的各级缓存API,通过读缓存的各级缓存API,根据待读取数据的数据标识,从多级缓存中获取待读取数据。
在本实施例中,读缓存的具体过程包括如下步骤:1)读缓存的统一缓存API调用读缓存的本地缓存API,通过读缓存的本地缓存API,从本地缓存获取待读取数据;2)如果待读取数据未存储在本地缓存,则读缓存的统一缓存API将调用读缓存的分布式缓存API,通过读缓存的分布式缓存API,从分布式缓存获取待读取数据。由于待读取数据可视为热点数据,因此,从分布式缓存获取到待读取数据后,读缓存的统一缓存API还需要调用写缓存的本地缓存API,通过写缓存的本地缓存API,将待读取数据写入本地缓存。
在实际应用中,如果本地缓存包括堆内缓存和堆外缓存,则上述从本地缓存获取待读取数据的处理包括如下步骤:1)读缓存的统一缓存API调用读缓存的堆内缓存API,通过读缓存的堆内缓存API,从堆内缓存获取待读取数据;2)如果待读取数据未存储在堆内缓存,则读缓存的统一缓存API调用读缓存的堆外缓存API,通过读缓存的堆外缓存API,从堆外缓存获取待读取数据;从堆外缓存获取待读取数据之后,读缓存的统一缓存API还需调用写缓存的堆内缓存API,通过写缓存的堆内缓存API,将待读取数据写入堆内缓存。
如果本地缓存包括堆内缓存和堆外缓存,则上述将待读取数据写入本地缓存的处理包括如下步骤:1)读缓存的统一缓存API调用写缓存的堆内缓存API,通过写缓存的堆内缓存API,将待读取数据写入堆内缓存;2)读缓存的统一缓存API调用写缓存的堆外缓存API,通过写缓存的堆外缓存API,将待读取数据写入堆外缓存。
3)删除缓存
删除缓存的处理流程与写缓存的流程相似,在删除缓存时,多级缓存逐次删除各级缓存的相应数据。对多级缓存执行删除缓存的操作,所述的调用指令包括待删除数据的数据标识。通过删除缓存的统一缓存API接收到对应多级缓存的删除缓存的调用指令后,删除缓存的统一缓存API将分别调用删除缓存的各级缓存API,通过删除缓存的各级缓存API,根据待删除数据的数据标识,从多级缓存中删除相应数据。
在本实施例中,从多级缓存中删除数据包括如下步骤:1)删除缓存的统一缓存API调用删除缓存的本地缓存API,通过删除缓存的本地缓存API,从本地缓存中删除待删除数据;2)删除缓存的统一缓存API调用删除缓存的分布式缓存API,通过删除缓存的分布式缓存API,从分布式缓存中删除待删除数据。
在实际应用中,如果本地缓存包括堆内缓存和堆外缓存,则上述从本地缓存删除数据的处理包括如下步骤:1)删除缓存的统一缓存API调用删除缓存的堆内缓存API,通过删除缓存的堆内缓存API,从堆内缓存中删除待删除数据;2)删除缓存的统一缓存API调用删除缓存的堆外缓存API,通过删除缓存的堆外缓存API,从堆外缓存中删除待删除数据。
4)清空缓存
多级缓存的清空缓存和删除缓存的功能非常类似。通过清空缓存的统一缓存API接收到对应多级缓存的清空缓存的调用指令后,清空缓存的统一缓存API调用清空缓存的各级缓存API,通过清空缓存的各级缓存API,清空多级缓存中的缓存数据。
在本实施例中,清空多级缓存中的缓存数据包括如下步骤:1)清空缓存的统一缓存API调用清空缓存的本地缓存API,通过清空缓存的本地缓存API,清空本地缓存中的缓存数据;2)清空缓存的统一缓存API调用清空缓存的分布式缓存API,通过清空缓存的分布式缓存API,清空分布式缓存中的缓存数据。
在实际应用中,如果本地缓存包括堆内缓存和堆外缓存,则上述清空本地缓存中的缓存数据的处理包括如下步骤:1)清空缓存的统一缓存API调用清空缓存的堆内缓存API,通过清空缓存的堆内缓存API,清空堆内缓存中的缓存数据;2)清空缓存的统一缓存API调用清空缓存的堆外缓存API,通过清空缓存的堆外缓存API,清空堆外缓存中的缓存数据。
在上述的实施例中,提供了一种多级缓存的操作方法,与之相对应的,本申请还提供一种多级缓存的操作装置。该装置是与上述方法的实施例相对应。
请参看图2,其为本申请的多级缓存的操作装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,包括:
接收指令单元101,用于通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;
执行单元103,用于所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;
其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
可选的,所述特定操作包括所述写缓存;所述调用指令包括待缓存数据及其数据标识;
所述执行单元103包括:
写本地子单元,用于所述写缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述对应记录写入所述本地缓存;
写分布式子单元,用于所述写缓存的统一缓存API调用所述写缓存的分布式缓存API,通过所述写缓存的分布式缓存API,将所述对应记录写入所述分布式缓存。
可选的,所述待缓存数据的数据类型包括对象类型;
所述执行单元103还包括:
序列化子单元,用于对所述待缓存数据进行序列化,生成所述待缓存数据的序列化数据。
可选的,所述本地缓存包括堆内缓存和堆外缓存;
所述写本地子单元包括:
写堆内子单元,用于所述写缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述对应记录写入所述堆内缓存;
写堆外子单元,用于所述写缓存的统一缓存API调用所述写缓存的堆外缓存API,通过所述写缓存的堆外缓存API,将所述对应记录写入所述堆外缓存。
可选的,所述特定操作包括所述读缓存;所述调用指令包括待读取数据的数据标识;
所述执行单元103包括:
读本地子单元,用于所述读缓存的统一缓存API调用所述读缓存的本地缓存API,通过所述读缓存的本地缓存API,从所述本地缓存获取所述待读取数据;
读分布式子单元,用于若所述待读取数据未存储在所述本地缓存,则所述读缓存的统一缓存API调用所述读缓存的分布式缓存API,通过所述读缓存的分布式缓存API,从所述分布式缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述待读取数据写入所述本地缓存。
可选的,所述本地缓存包括堆内缓存和堆外缓存;
所述读本地子单元包括:
读堆内子单元,用于所述读缓存的统一缓存API调用所述读缓存的堆内缓存API,通过所述读缓存的堆内缓存API,从所述堆内缓存获取所述待读取数据;
读堆外子单元,用于若所述待读取数据未存储在所述堆内缓存,则所述读缓存的统一缓存API调用所述读缓存的堆外缓存API,通过所述读缓存的堆外缓存API,从所述堆外缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述待读取数据写入所述堆内缓存。
可选的,所述特定操作包括所述删除缓存;所述调用指令包括待删除数据的数据标识;
所述执行单元103包括:
删除本地子单元,用于所述删除缓存的统一缓存API调用所述删除缓存的本地缓存API,通过所述删除缓存的本地缓存API,从所述本地缓存中删除所述待删除数据;
删除分布式子单元,用于所述删除缓存的统一缓存API调用所述删除缓存的分布式缓存API,通过所述删除缓存的分布式缓存API,从分布式缓存中删除所述待删除数据。
可选的,所述特定操作包括所述清空缓存;
所述执行单元103包括:
清空本地子单元,用于所述清空缓存的统一缓存API调用所述清空缓存的本地缓存API,通过所述清空缓存的本地缓存API,清空所述本地缓存中的缓存数据;
清空分布式子单元,用于所述清空缓存的统一缓存API调用所述清空缓存的分布式缓存API,通过所述清空缓存的分布式缓存API,清空所述分布式缓存中的缓存数据。
可选的,还包括:
封装单元,用于将对所述本地缓存的特定操作和对所述分布式缓存的特定操作封装在所述特定操作的统一缓存API中。
请参考图3,其为本申请的电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,所述多级缓存的操作装置被所述处理器102执行时,包括如下步骤:通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
与上述的多级缓存的操作方法相对应,本申请还提供一种缓存数据一致性的校验方法。下面首先对缓存数据不一致的问题进行说明。
对于需要多机部署的应用,当本地缓存与分布式缓存并存时,同一条缓存数据可能会同时位于所有的本地机器以及分布式缓存上。当数据变更后,很容易产生各台机器的本地缓存数据与分布式缓存数据不一致的问题。因此,对缓存数据进行数据一致性校验成为迫切需要解决的问题。
请参考图4,其为本申请提供的一种缓存数据一致性的校验方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种缓存数据一致性的校验方法包括:
步骤S101:读取原始数据的数据变更记录。
本申请实施例所述的原始数据是指,存储在缓存中的缓存数据的原始数据。当原始数据发生变化时,通过记录发生变化的原始数据形成原始数据的数据变更记录。在实际应用中,可由原始数据变更端生成并存储原始数据的数据变更记录,数据变更记录可存储在数据库或文本文件中。
如果读取数据变更记录的操作成功执行,并获取到数据变更记录,则表示与发生变化的原始数据对应的缓存数据已经失效,可进入到下一步对这部分缓存数据进行失效处理。
步骤S103:针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
步骤S101可获取到多个数据变更记录,本步骤针对各个数据变更记录,对存储在本地缓存中的这部分原始数据的缓存数据进行失效处理。
本申请实施例所述的数据变更记录包括发生变更的原始数据的数据标识,该数据标识也用于标识缓存数据,即:该数据标识为缓存键。相应的,对存储在本地缓存中的原始数据的缓存数据进行失效处理,可采用如下方式:根据数据标识,从本地缓存中删除与数据标识对应的缓存数据。
在本实施例中,本地缓存包括堆内缓存和堆外缓存,从本地缓存中删除与数据标识对应的缓存数据,包括如下步骤:1)通过删除缓存的堆内缓存API,从堆内缓存中删除与数据标识对应的缓存数据;2)通过删除缓存的堆外缓存API,从堆外缓存中删除与数据标识对应的缓存数据。
需要说明的是,由于分布式缓存中的数据可由分布式缓存系统保证其数据的一致性,因此,无需采用本申请实施例提供的方法,对分布式缓存数据进行一致性校验处理。
在实际应用中,如果读取数据变更记录的操作失败,可根据可配置的数据一致性校验模式对本地缓存数据进行数据一致性的处理。在本实施例中,数据一致性校验模式可配置为严格模式或非严格模式。在严格模式下,当读取数据变更记录的操作失败后,可清空整个本地缓存,以强保证本级缓存的数据一致性。
在实际应用中,可当预设的执行条件成立时,执行本申请实施例提供的方法。所述的预设的执行条件,包括但不限于如下条件:当前时间与上次执行缓存数据一致性的校验方法的时间间隔大于预设的时间间隔,即:每隔预设的时间间隔,执行一次本申请实施例提供的方法。配置的时间间隔越长,则表示对缓存数据不一致的容忍度越高,相应的,系统资源耗费也会越少。
作为一种优选实施方式,通常在异步线程中执行本申请实施例提供的方法。因此,需要首先启动执行该方法的异步线程。在实际应用中,可通过预设的数据校验异步线程的终止标志位控制异步线程的操作,如果预设的数据校验异步线程的终止标志位为真,则终止执行该方法,否则,则会继续后续的数据一致性校验流程。
此外,为了能够追踪缓存数据一致性的校验处理情况,通常在执行一次缓存数据一致性的校验后,还需要记录本次校验处理结果,例如,记录下失效掉的缓存数据的数据标识、处理时间等数据。
在上述的实施例中,提供了一种缓存数据一致性的校验方法,与之相对应的,本申请还提供一种缓存数据一致性的校验装置。该装置是与上述方法的实施例相对应。
请参看图5,其为本申请的缓存数据一致性的校验装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种缓存数据一致性的校验装置,包括:
读取单元101,用于读取原始数据的数据变更记录;
失效处理单元103,用于针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
可选的,还包括:
清空处理单元,用于若所述读取数据变更记录的操作失败、且预设的数据一致性校验模式为严格模式,则清空所述本地缓存中的缓存数据。
可选的,还包括:
记录结果单元,用于记录数据一致性校验的处理结果。
请参考图6,其为本申请的又一电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的又一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储缓存数据一致性的校验装置,所述缓存数据一致性的校验装置被所述处理器102执行时,包括如下步骤:读取原始数据的数据变更记录;针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
本申请实施例提供的缓存数据一致性的校验方法、装置及电子设备,通过读取原始数据的数据变更记录,并针对各个数据变更记录,对存储在本地缓存中的原始数据的缓存数据进行失效处理,能够保证缓存数据的一致性。
与上述的多级缓存的操作方法相对应,本申请还提供一种堆内缓存的过载保护方法。下面首先对堆内缓存存在的过载问题进行说明。
对于Java程序的本地缓存,由于缓存数据保存位置的不同,存在着堆内缓存以及堆外缓存两种缓存方案。堆内缓存将数据保存在了Java堆内,其优势在于缓存数据无需进行序列化,耗费CPU最少,同时获取数据的延时也最低;其劣势是会影响到Java的GC(Garbage Collection,垃圾回收机制)过程,随着缓存数据量的增大,Java GC耗费时间也会增大,Java GC反过来会影响堆内缓存的性能,从而限制堆内缓存的缓存空间大小,即:限制堆内缓存的可用缓存容量。
请参考图7,其为本申请提供的一种堆内缓存的过载保护方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种堆内缓存的过载保护方法包括:
步骤S101:获取堆内缓存的使用情况。
本申请实施例所述的使用情况包括缓存容量的使用占比。所述的容量使用占比是指,堆内缓存的使用量与缓存总容量的比值。
获取到堆内缓存的使用情况之后,就可进入下一步根据使用情况对堆内缓存进行过载保护。
步骤S103:若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
将堆内缓存的使用情况与预设的使用规则进行对比,如果判定堆内缓存的使用情况不满足预设的使用规则,则可根据预设的清理规则清理堆内缓存,以避免堆内缓存过载。所述的预设的使用规则包括但不限于:容量使用占比小于等于预设的最大使用占比阈值,即:堆内缓存的容量使用占比不能超过预设的最大使用占比阈值。所述的最大使用占比阈值可根据经验设定。
本申请实施例所述的清理规则包括但不限于:清空预设比例的堆内缓存。在本实施例中,当判定使用情况不满足预设的使用规则时,清空一半堆内缓存。
在实际应用中,可当预设的执行条件成立时,执行本申请实施例提供的堆内缓存的过载保护方法。所述的预设的执行条件,包括但不限于如下条件:当前时间与上次执行堆内缓存的过载保护方法的时间间隔大于预设的时间间隔,即:每隔预设的时间间隔,执行一次堆内缓存的过载保护方法。
作为一种优选实施方式,通常在异步线程中执行本申请实施例提供的堆内缓存的过载保护方法。因此,需要首先启动执行堆内缓存的过载保护方法的异步线程。在实际应用中,可通过预设的过载保护异步线程的终止标志位控制异步线程的操作,如果预设的过载保护异步线程的终止标志位为真,则终止执行堆内缓存的过载保护方法,否则,则会继续后续的堆内缓存的过载保护流程。
此外,为了能够追踪堆内缓存的过载保护处理情况,通常在执行一次对堆内缓存的过载保护后,还需要记录过载保护的处理结果,例如,清理缓存前的容量使用占比、过载保护的处理时间等数据。
在上述的实施例中,提供了一种堆内缓存的过载保护方法,与之相对应的,本申请还提供一种堆内缓存的过载保护装置。该装置是与上述方法的实施例相对应。
请参看图8,其为本申请的堆内缓存的过载保护装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种堆内缓存的过载保护装置,包括:
获取单元101,用于获取堆内缓存的使用情况;
清理单元103,用于若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
可选的,还包括:
记录单元,用于记录过载保护的处理结果。
请参考图9,其为本申请的又一电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的又一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储堆内缓存的过载保护装置,所述堆内缓存的过载保护装置被所述处理器102执行时,包括如下步骤:获取堆内缓存的使用情况;若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
本申请实施例提供的堆内缓存的过载保护方法、装置及电子设备,通过获取堆内缓存的使用情况,若使用情况不满足预设的使用规则,则根据预设的清理规则清理堆内缓存,能够控制堆内缓存的使用情况,避免堆内缓存数据量过大,从而降低对Java GC的影响。
与上述的多级缓存的操作方法相对应,本申请还提供一种序列化方法。下面首先对序列化方法的现有技术及存在的问题进行说明。
序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取序列化数据、并对序列化数据进行反序列化处理,以重新创建该对象、恢复对象的状态。例如,Java对象序列化用于将Java对象的状态转换为字节数组以便存储或传输,以后,仍可以将字节数组转换回Java对象原有的状态。
序列化需要在原有的对象数据上加上类信息,以为反序列化解析之用,其中类信息包括类名称和属性名称。因此,序列化过程包括写入类名称、写入属性名称及写入属性值三部分工作。其中,序列化写入类名称的目的是为了在反序列化时能够构建出正确的对象;写入各个属性名称的目的是为了在反序列化时能够正确的为对象对应的属性赋值;最后,再递归写入各个属性值。目前,对待序列化对象进行序列化处理时,需写入类名称、属性名称及属性值三部分信息。
通常,序列化过程写入的数据越多,耗费的CPU就会越多,同时序列化数据占用的空间也会越大。如果序列化过程引入的额外开销过高,可能会导致过大的网络、磁盘等各方面的压力。对于海量分布式存储系统,数据量往往以TB为单位,巨大的额外空间开销及时间开销意味着高昂的成本。
综上所述,由于现有序列化方法需要为待序列化对象写入类名称、属性名称及属性值三方面数据,因此,现有技术存在序列化过程写入数据多的问题,从而导致序列化的时间复杂度和空间复杂度均较高。
请参考图10,其为本申请提供的一种序列化方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种序列化方法包括:
步骤S101:获取待序列化对象的类名称、属性名称及属性值。
对象是对客观事物的抽象,类是对对象的抽象。本申请实施例所述的待序列化对象是指可被序列化的对象,例如,实现了序列化接口(Serializable接口)的Java类的实例等。待序列化对象具有三方面数据,即:对象(Object)所属类(Class)的类名称、对象所属类所具有的各个属性的属性名称及对象的各个属性值。为了能够在反序列化时重构待序列化对象,需要记录上述三方面数据,因此,要实施本申请实施例提供的方法,首先需要获取上述三方面数据。
本申请实施例所述的类名称包括类全名(即:类全限定名称),类全名包括类所在包(Package)的包名和类名。所述的类名称和所述的属性名称均为对象所属的类的特征,即:同一类的对象具有相同的类名称和属性名称,而不同对象可具有不同的属性值。
通过反射(Reflection)技术可将程序集的各种信息解析出来,例如,结构、类、属性及成员变量等,程序集包括对象或模块。本申请实施例提供的方法,首先可通过反射技术获取待序列化对象的类名称及属性名称,然后,再根据属性名称获取待序列化对象的各个属性值。获取到待序列化对象的类名称、属性名称及属性值后,就可以进入下一步,获取待序列化对象的类信息标识。
步骤S103:根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识。
本申请实施例所述的类信息标识和类信息的对应关系包括类信息标识和类信息两方面数据。所述的类信息包括类名称和各个属性名称。需要注意的是,根据各个属性名称在类信息中的排列位置,类信息还能够表示各个属性名称之间的顺序关系,该顺序关系用于在反序列化时能够正确的为对象属性赋值。在实际应用中,类信息标识和类信息的对应关系既可以是预先生成的,还可以是在序列化过程中逐步生成的。
在本实施例中,步骤S103包括:1)根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息;2)以类信息为检索条件,在预先存储的类信息标识和类信息的对应关系中进行检索,获取待序列化对象的类信息标识。
1)根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息。
本申请实施例提供的序列化方法,其核心的基本思想为:将待序列化对象的类信息、与属性值的序列化数据分开存储,待序列化对象的序列化数据包括根据类信息标识和属性值生成的序列化数据。由于待序列化对象的序列化数据用类信息标识替代类信息,因而,能够避免存储大量重复的类信息的序列化数据,从而达到降低序列化数据的空间复杂度及序列化处理的时间复杂度的效果。
因此,要实施本申请实施例提供的序列化方法,需要根据待序列化对象的类名称和属性名称,生成待序列化对象的类信息;然后,将该类信息与所述的类信息标识和类信息的对应关系中的类信息进行匹配,匹配成功项的类信息标识即为待序列化对象的类信息标识。
需要说明的是,在生成待序列化对象的类信息时,需要考虑各个属性名称的顺序关系,以为反序列化解析之用。
2)以所述类信息为检索条件,在所述预先存储的类信息标识和类信息的对应关系中进行检索,获取所述待序列化对象的类信息标识。
生成待序列化对象的类信息后,以类信息为检索条件,在预先存储的类信息标识和类信息的对应关系中进行检索,以获取待序列化对象的类信息标识。
步骤S105:根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
获取到待序列化对象的类信息标识和各个属性值后,根据这两方面信息生成待序列化对象的序列化数据。所述的序列化数据包括字节序列,即:二进制数据流。
请参看图11,其为本申请的序列化方法实施例的序列化数据格式与普通序列化数据格式的对比示意图。由图11可见,相对于普通序列化数据,采用本申请实施例提供的方法所生成的序列化数据不包括类信息的序列化数据。
在本实施例中,步骤S105可包括如下步骤:1)将类信息标识写入二进制数据流;2)根据各个属性名称的顺序关系,依次将与各个属性名称对应的属性值递归写入二进制数据流,形成序列化数据。
1)将类信息标识写入二进制数据流。
生成待序列化对象的序列化数据,首先需要将步骤S103获取到的类信息标识写入二进制数据流。
2)根据各个属性名称的顺序关系,依次将与各个属性名称对应的属性值递归写入二进制数据流,形成序列化数据。
序列化的实质是将待序列化对象内每个基本类型的属性所对应的属性值依次写入到二进制流中,如果某个属性不是基本类型而是一个对象,则对该对象进行递归的写入。需要注意的是,将属性值递归写入二进制数据流的顺序需要与类信息中各个属性名称的顺序相对应,以为反序列化解析之用。
在本实施例中,如果通过步骤S103未获取到待序列化对象的类信息标识,则需要为待序列化对象生成类信息及与其对应的类信息标识。然后,根据新生成的类信息标识和各个属性值,生成待序列化对象的序列化数据。
需要注意的是,为待序列化对象生成类信息、以及与其对应的类信息标识后,还需要存储该类信息和类信息标识的对应关系,以为反序列化解析之用。在本实施例中,与本申请实施例提供的序列化方法相对应的序列化装置、及与其对应的反序列化装置,位于同一组件内(缓存组件),该组件内的反序列化装置能够访问类信息标识和类信息的对应关系,从而能够依据该对应关系重构与序列化数据对应的对象。在实际应用中,如果序列化装置和反序列化装置分别位于不同的组件,则需要将类信息标识和类信息的对应关系发送至反序列化装置,使其能够依据该对应关系重构与序列化数据对应的对象。
在上述的实施例中,提供了一种序列化方法,与之相对应的,本申请还提供一种序列化装置。该装置是与上述方法的实施例相对应。
请参看图12,其为本申请的序列化装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种序列化装置,包括:
第一获取单元101,用于获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;
第二获取单元103,用于根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
第一生成单元105,用于根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
可选的,所述第二获取单元103包括:
生成子单元,用于根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息;
检索子单元,用于以所述类信息为检索条件,在所述预先存储的类信息标识和类信息的对应关系中进行检索,获取所述待序列化对象的类信息标识。
可选的,所述第一生成单元105包括:
第一写入子单元,用于将所述类信息标识写入二进制数据流;
第二写入子单元,用于根据所述类信息包括的各个所述属性名称的顺序关系,依次将与各个所述属性名称对应的所述属性值递归写入所述二进制数据流,形成所述序列化数据。
可选的,则所述装置还包括:
第二生成单元,用于若未获取到所述待序列化对象的所述类信息标识,则根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息,并为所述类信息生成所述类信息标识。
可选的,所述第二生成单元还包括:
存储子单元,用于存储所述类信息标识和所述类信息的对应关系。
请参考图13,其为本申请的又一电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的又一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储序列化装置,所述序列化装置被所述处理器102执行时,包括如下步骤:获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
本申请实施例提供的序列化方法、装置及电子设备,通过获取待序列化对象的类名称、属性名称及属性值;根据类名称和属性名称,从预先存储的类信息标识和类信息的对应关系中获取待序列化对象的类信息标识,其中类信息包括类名称和各个属性名称;根据类信息标识和各个属性值,生成待序列化对象的序列化数据,能够有效减少需要序列化的数据量,从而降低CPU损耗。
与上述的序列化方法相对应,本申请还提供一种反序列化方法。请参考图14,其为本申请提供的一种反序列化方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种反序列化方法包括:
步骤S101:获取序列化数据包括的类信息标识及属性值。
本申请实施例所述的序列化数据包括字节序列,即:二进制数据流。序列化数据包括类信息标识及属性值。从序列化数据中可读取到类信息标识及属性值。所述的类信息标识,用于标识与序列化数据对应的对象的类信息。所述的类信息包括与序列化数据对应的对象的类名称和各个属性名称。需要注意的是,根据各个属性名称在类信息中的排列位置,类信息还能够表示各个属性名称之间的顺序关系,该顺序关系用于在反序列化时能够正确的为对象属性赋值。
获取到序列化数据的类信息标识及属性值后,就可以进入下一步获取序列化数据的类信息。
步骤S103:根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的所述类信息。
获取到类信息标识后,以类信息标识为检索条件,在预先存储的类信息标识和类信息的对应关系中进行检索,即可获取与序列化数据对应的对象的类信息。需要注意的是,如果通过步骤S103未获取到对象的类信息,则可抛出序列化失败的异常信息。
步骤S105:根据所述类信息的序列化数据和各个所述属性值,构建所述对象。
获取到对象的类信息,也即获取到对象的类名称、属性名称及各个属性名称的顺序关系。根据类名称、属性名称、各个属性名称的顺序关系及各个属性值,即可重构与序列化数据对应的对象。
本申请实施例提供的反序列化方法,通过如下步骤构建对象:1)根据类信息,获取类名称和属性名称;2)根据类名称,生成与类名称对应的无参对象;3)根据所述对象的类信息包括的各个所述属性名称的顺序关系,递归地将各个属性值赋值给其所属的所述属性名称。
在本实施例中,要构建对象,首先需从类信息中读取与序列化数据对应的对象的类名称和各个属性名称;然后,可通过反射技术,根据类名称构建与类名称对应的无参对象;最后,根据各个属性名称的顺序关系,读入各个属性名称,递归地将各个属性值赋值给属性值所属的属性名称。
在实际应用中,为对象的各个属性赋值前,还需检查序列化数据包含的属性名称及其之间的顺序关系、和当前环境(即:反序列化环境)下的相应信息是否一致;如果不一致,则表明类信息不一致,基于序列化数据无法重建与其对应的对象,在此情况下,可抛出异常以表示反序列化失败;如果一致,则递归地读取出各个属性值,并将其赋值给对应的对象属性。
在上述的实施例中,提供了一种反序列化方法,与之相对应的,本申请还提供一种反序列化装置。该装置是与上述方法的实施例相对应。
请参看图15,其为本申请的反序列化装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种反序列化装置,包括:
第一获取单元101,用于获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;
第二获取单元103,用于根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;
构建单元105,用于根据所述对象的类信息和各个所述属性值,构建所述对象。
可选的,还包括:
抛出异常单元,用于若未获取到所述对象的类信息,则抛出序列化失败的异常信息。
可选的,所述构建单元105包括:
获取子单元,用于根据所述对象的类信息,获取所述类名称和所述属性名称;
构建子单元,用于根据所述类名称,生成与所述类名称对应的无参对象;
赋值子单元,用于根据所述对象的类信息包括的各个所述属性名称的顺序关系,递归地将各个所述属性值赋值给其所属的所述属性名称。
可选的,所述构建单元105还包括:
检验子单元,用于判断所述序列化数据包含的所述属性名称及各个所述属性名称之间的顺序关系和当前环境下与所述类名称对应的对象包含的各个属性名称及其之间的顺序关系是否一致;
抛出异常子单元,用于如果上述判断结果为否,则抛出序列化失败的异常信息。
请参考图16,其为本申请的又一电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的又一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储反序列化装置,所述反序列化装置被所述处理器102执行时,包括如下步骤:获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;根据所述对象的类信息和各个所述属性值,构建所述对象。
本申请实施例还提供了一种多级缓存系统,如图17所示,该系统包括上述实施例所述的多级缓存的操作装置101、缓存数据一致性的校验装置102、堆内缓存的过载保护装置103、序列化装置104、及反序列化装置105的至少一者。
所述的多级缓存的操作装置101,通过特定操作的统一缓存API接收对应多级缓存的特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
所述的缓存数据一致性的校验装置102,读取原始数据的数据变更记录;针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
所述的堆内缓存的过载保护装置103,
所述的序列化装置104,获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
所述的反序列化装置105,获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;根据所述对象的类信息和各个所述属性值,构建所述对象。
在实际应用中,可对上述多级缓存的操作装置101、缓存数据一致性的校验装置102、堆内缓存的过载保护装置103、序列化装置104、及反序列化装置105进行任意组合,构建多级缓存系统。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (49)
1.一种多级缓存的操作方法,所述多级缓存包括本地缓存和分布式缓存,其特征在于,包括:
通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;
所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;
其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
2.根据权利要求1所述的多级缓存的操作方法,其特征在于,所述特定操作包括所述写缓存;所述调用指令包括待缓存数据及其数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述写缓存的统一缓存API调用所述写缓存的各级缓存API,通过所述写缓存的各级缓存API,将所述数据标识与所述待缓存数据的对应记录写入所述多级缓存。
3.根据权利要求2所述的多级缓存的操作方法,其特征在于,所述将所述数据标识与所述待缓存数据的对应记录写入所述多级缓存,包括:
所述写缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述对应记录写入所述本地缓存;
所述写缓存的统一缓存API调用所述写缓存的分布式缓存API,通过所述写缓存的分布式缓存API,将所述对应记录写入所述分布式缓存。
4.根据权利要求3所述的多级缓存的操作方法,其特征在于,所述待缓存数据的数据类型包括对象类型,在所述将所述对应记录写入所述分布式缓存之前,还包括:
对所述待缓存数据进行序列化,生成所述待缓存数据的序列化数据;
所述将所述对应记录写入所述分布式缓存,采用如下方式:
将所述数据标识与所述序列化数据的对应记录写入所述分布式缓存;
所述对所述待缓存数据进行序列化,生成所述待缓存数据的序列化数据,包括:
获取所述待缓存数据的类名称、属性名称及属性值;所述类名称包括类全名;
根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待缓存数据的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
根据所述类信息标识和各个所述属性值,生成所述待缓存数据的序列化数据。
5.根据权利要求3所述的多级缓存的操作方法,其特征在于,所述本地缓存包括堆内缓存和堆外缓存;所述将所述对应记录写入所述本地缓存,包括:
所述写缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述对应记录写入所述堆内缓存;
所述写缓存的统一缓存API调用所述写缓存的堆外缓存API,通过所述写缓存的堆外缓存API,将所述对应记录写入所述堆外缓存。
6.根据权利要求1所述的多级缓存的操作方法,其特征在于,所述特定操作包括所述读缓存;所述调用指令包括待读取数据的数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述读缓存的统一缓存API调用所述读缓存的各级缓存API,通过所述读缓存的各级缓存API,根据所述数据标识,从所述多级缓存中获取所述待读取数据。
7.根据权利要求6所述的多级缓存的操作方法,其特征在于,所述从所述多级缓存中获取所述待读取数据,包括:
所述读缓存的统一缓存API调用所述读缓存的本地缓存API,通过所述读缓存的本地缓存API,从所述本地缓存获取所述待读取数据;
若所述待读取数据未存储在所述本地缓存,则所述读缓存的统一缓存API调用所述读缓存的分布式缓存API,通过所述读缓存的分布式缓存API,从所述分布式缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的本地缓存API,通过所述写缓存的本地缓存API,将所述待读取数据写入所述本地缓存。
8.根据权利要求7所述的多级缓存的操作方法,其特征在于,所述本地缓存包括堆内缓存和堆外缓存;所述从所述本地缓存获取所述待读取数据,包括:
所述读缓存的统一缓存API调用所述读缓存的堆内缓存API,通过所述读缓存的堆内缓存API,从所述堆内缓存获取所述待读取数据;
若所述待读取数据未存储在所述堆内缓存,则所述读缓存的统一缓存API调用所述读缓存的堆外缓存API,通过所述读缓存的堆外缓存API,从所述堆外缓存获取所述待读取数据;以及所述读缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述待读取数据写入所述堆内缓存;
所述将所述待读取数据写入所述本地缓存,包括:
所述读缓存的统一缓存API调用所述写缓存的堆内缓存API,通过所述写缓存的堆内缓存API,将所述待读取数据写入所述堆内缓存;
所述读缓存的统一缓存API调用所述写缓存的堆外缓存API,通过所述写缓存的堆外缓存API,将所述待读取数据写入所述堆外缓存。
9.根据权利要求1所述的多级缓存的操作方法,其特征在于,所述特定操作包括所述删除缓存;所述调用指令包括待删除数据的数据标识;
所述对所述多级缓存进行所述特定操作,采用如下方式:
所述删除缓存的统一缓存API调用所述删除缓存的各级缓存API,通过所述删除缓存的各级缓存API,根据所述数据标识,从所述多级缓存中删除所述待删除数据。
10.根据权利要求9所述的多级缓存的操作方法,其特征在于,所述从所述多级缓存中删除所述待删除数据,包括:
所述删除缓存的统一缓存API调用所述删除缓存的本地缓存API,通过所述删除缓存的本地缓存API,从所述本地缓存中删除所述待删除数据;
所述删除缓存的统一缓存API调用所述删除缓存的分布式缓存API,通过所述删除缓存的分布式缓存API,从分布式缓存中删除所述待删除数据。
11.根据权利要求10所述的多级缓存的操作方法,其特征在于,所述从所述本地缓存中删除所述待删除数据,包括:
所述删除缓存的统一缓存API调用所述删除缓存的堆内缓存API,通过所述删除缓存的堆内缓存API,从所述堆内缓存中删除所述待删除数据;
所述删除缓存的统一缓存API调用所述删除缓存的堆外缓存API,通过所述删除缓存的堆外缓存API,从所述堆外缓存中删除所述待删除数据。
12.根据权利要求1所述的多级缓存的操作方法,其特征在于,所述特定操作包括所述清空缓存;所述对所述多级缓存进行所述特定操作,采用如下方式:
所述清空缓存的统一缓存API调用所述清空缓存的各级缓存API,通过所述清空缓存的各级缓存API,清空所述多级缓存中的缓存数据。
13.根据权利要求12所述的多级缓存的操作方法,其特征在于,所述清空所述多级缓存中的缓存数据,包括:
所述清空缓存的统一缓存API调用所述清空缓存的本地缓存API,通过所述清空缓存的本地缓存API,清空所述本地缓存中的缓存数据;
所述清空缓存的统一缓存API调用所述清空缓存的分布式缓存API,通过所述清空缓存的分布式缓存API,清空所述分布式缓存中的缓存数据。
14.根据权利要求13所述的多级缓存的操作方法,其特征在于,所述本地缓存包括堆内缓存和堆外缓存;所述清空所述本地缓存中的缓存数据,包括:
所述清空缓存的统一缓存API调用所述清空缓存的堆内缓存API,通过所述清空缓存的堆内缓存API,清空所述堆内缓存中的缓存数据;
所述清空缓存的统一缓存API调用所述清空缓存的堆外缓存API,通过所述清空缓存的堆外缓存API,清空所述堆外缓存中的缓存数据。
15.根据权利要求1所述的多级缓存的操作方法,其特征在于,还包括:
将对所述本地缓存的特定操作和对所述分布式缓存的特定操作封装在所述特定操作的统一缓存API中。
16.一种多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,其特征在于,包括:
接收指令单元,用于通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;
执行单元,用于所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;
其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
17.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储多级缓存的操作装置,所述多级缓存包括本地缓存和分布式缓存,所述多级缓存的操作装置被所述处理器执行时,包括如下步骤:通过特定操作的统一缓存API接收对应所述多级缓存的所述特定操作的调用指令;所述特定操作的统一缓存API封装了对所述本地缓存的特定操作和对所述分布式缓存的特定操作;所述特定操作的统一缓存API调用所述特定操作的各级缓存API,通过所述特定操作的各级缓存API,对所述多级缓存进行所述特定操作;所述各级缓存API包括本地缓存API和分布式缓存API;其中,所述特定操作包括写缓存、读缓存、删除缓存或清空缓存。
18.一种缓存数据一致性的校验方法,其特征在于,包括:
读取原始数据的数据变更记录;
针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
19.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,所述数据变更记录包括发生变更的原始数据的数据标识;
所述对存储在所述本地缓存中的所述原始数据的缓存数据进行失效处理,采用如下方式:
根据所述数据标识,从所述本地缓存中删除与所述数据标识对应的所述缓存数据。
20.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,还包括:
若所述读取数据变更记录的操作失败、且预设的数据一致性校验模式为严格模式,则清空所述本地缓存中的缓存数据。
21.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,所述数据变更记录,采用如下方式生成:
当所述原始数据发生变更时,原始数据变更端生成并存储所述原始数据的所述数据变更记录。
22.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,当预设的执行条件成立时,执行所述缓存数据一致性的校验方法;
所述预设的执行条件,包括如下条件:
当前时间与上次执行所述缓存数据一致性的校验方法的时间间隔大于预设的时间间隔。
23.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,所述缓存数据一致性的校验方法在异步线程中执行;所述方法还包括:
启动执行所述缓存数据一致性的校验方法的所述异步线程。
24.根据权利要求23所述的缓存数据一致性的校验方法,其特征在于,若预设的数据校验异步线程的终止标志位为真,则终止执行所述缓存数据一致性的校验方法。
25.根据权利要求18所述的缓存数据一致性的校验方法,其特征在于,还包括:
记录数据一致性校验的处理结果。
26.一种缓存数据一致性的校验装置,其特征在于,包括:
读取单元,用于读取原始数据的数据变更记录;
失效处理单元,用于针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
27.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储缓存数据一致性的校验装置,所述缓存数据一致性的校验装置被所述处理器执行时,包括如下步骤:读取原始数据的数据变更记录;针对各个所述数据变更记录,对存储在本地缓存中的所述原始数据的缓存数据进行失效处理。
28.一种堆内缓存的过载保护方法,其特征在于,包括:
获取堆内缓存的使用情况;
若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
29.根据权利要求28所述的堆内缓存的过载保护方法,其特征在于,所述使用情况包括容量使用占比;所述容量使用占比是指,所述堆内缓存的使用量与总容量的比值;所述预设的使用规则包括所述容量使用占比小于等于预设的最大使用占比阈值;
所述使用情况不满足预设的使用规则,包括:所述容量使用占比大于所述预设的最大使用占比阈值。
30.根据权利要求28所述的堆内缓存的过载保护方法,其特征在于,当预设的执行条件成立时,执行所述堆内缓存的过载保护方法;
所述预设的执行条件,包括如下条件:
当前时间与上次执行所述堆内缓存的过载保护方法的时间间隔大于预设的时间间隔。
31.根据权利要求28所述的堆内缓存的过载保护方法,其特征在于,所述堆内缓存的过载保护方法在异步线程中执行;所述方法还包括:
启动执行所述堆内缓存的过载保护方法的所述异步线程。
32.根据权利要求31所述的堆内缓存的过载保护方法,其特征在于,若预设的过载保护异步线程的终止标志位为真,则终止执行所述堆内缓存的过载保护方法。
33.根据权利要求28所述的堆内缓存的过载保护方法,其特征在于,还包括:
记录过载保护的处理结果。
34.一种堆内缓存的过载保护装置,其特征在于,包括:
获取单元,用于获取堆内缓存的使用情况;
清理单元,用于若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
35.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储堆内缓存的过载保护装置,所述堆内缓存的过载保护装置被所述处理器执行时,包括如下步骤:获取堆内缓存的使用情况;若所述使用情况不满足预设的使用规则,则根据预设的清理规则,清理所述堆内缓存。
36.一种序列化方法,其特征在于,包括:
获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;
根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
37.根据权利要求36所述的序列化方法,其特征在于,所述从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识,包括:
根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息;
以所述类信息为检索条件,在所述预先存储的类信息标识和类信息的对应关系中进行检索,获取所述待序列化对象的类信息标识。
38.根据权利要求36所述的序列化方法,其特征在于,所述生成所述待序列化对象的序列化数据,包括:
将所述类信息标识写入二进制数据流;
根据所述类信息包括的各个所述属性名称的顺序关系,依次将与各个所述属性名称对应的所述属性值递归写入所述二进制数据流,形成所述序列化数据。
39.根据权利要求36所述的序列化方法,其特征在于,若未获取到所述待序列化对象的所述类信息标识,则在所述生成所述待序列化对象的序列化数据之前,还包括:
根据所述类名称和所述属性名称,生成所述待序列化对象的所述类信息,并为所述类信息生成所述类信息标识。
40.根据权利要求39所述的序列化方法,其特征在于,还包括:
存储所述类信息标识和所述类信息的对应关系。
41.一种序列化装置,其特征在于,包括:
第一获取单元,用于获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;
第二获取单元,用于根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;
第一生成单元,用于根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
42.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储序列化装置,所述序列化装置被所述处理器执行时,包括如下步骤:获取待序列化对象的类名称、属性名称及属性值;所述类名称包括类全名;根据所述类名称和所述属性名称,从预先存储的类信息标识和类信息的对应关系中获取所述待序列化对象的类信息标识;所述类信息包括所述类名称和各个所述属性名称;根据所述类信息标识和各个所述属性值,生成所述待序列化对象的序列化数据。
43.一种反序列化方法,其特征在于,包括:
获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;
根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;
根据所述对象的类信息和各个所述属性值,构建所述对象。
44.根据权利要求43所述的反序列化方法,其特征在于,还包括:
若未获取到所述对象的类信息,则抛出序列化失败的异常信息。
45.根据权利要求43所述的反序列化方法,其特征在于,所述构建所述对象,包括:
根据所述对象的类信息,获取所述类名称和所述属性名称;
根据所述类名称,生成与所述类名称对应的无参对象;
根据所述对象的类信息包括的各个所述属性名称的顺序关系,递归地将各个所述属性值赋值给其所属的所述属性名称。
46.根据权利要求45所述的反序列化方法,其特征在于,在所述递归地将各个所述属性值赋值给其所属的所述属性名称之前,还包括:
判断所述序列化数据包含的所述属性名称及各个所述属性名称之间的顺序关系和当前环境下与所述类名称对应的对象包含的各个属性名称及其之间的顺序关系是否一致;若否,则抛出序列化失败的异常信息。
47.一种反序列化装置,其特征在于,包括:
第一获取单元,用于获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;
第二获取单元,用于根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;
构建单元,用于根据所述对象的类信息和各个所述属性值,构建所述对象。
48.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,所述存储器被配置成存储反序列化装置,所述反序列化装置被所述处理器执行时,包括如下步骤:获取序列化数据包括的类信息标识及属性值;所述类信息标识,用于标识与所述序列化数据对应的对象的类信息;所述类信息包括所述对象的类名称和属性名称;根据所述类信息标识,从预先存储的类信息标识和类信息的对应关系中获取所述对象的类信息;根据所述对象的类信息和各个所述属性值,构建所述对象。
49.一种多级缓存系统,所述多级缓存包括本地缓存和分布式缓存,其特征在于,包括:根据权利要求16所述的多级缓存的操作装置,根据权利要求26所述的缓存数据一致性的校验装置,根据权利要求34所述的堆内缓存的过载保护装置,根据权利要求41所述的序列化装置,以及根据权利要求47所述的反序列化装置的至少一者。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610097163.5A CN107102896A (zh) | 2016-02-23 | 2016-02-23 | 一种多级缓存的操作方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610097163.5A CN107102896A (zh) | 2016-02-23 | 2016-02-23 | 一种多级缓存的操作方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107102896A true CN107102896A (zh) | 2017-08-29 |
Family
ID=59658636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610097163.5A Pending CN107102896A (zh) | 2016-02-23 | 2016-02-23 | 一种多级缓存的操作方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107102896A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107977165A (zh) * | 2017-11-22 | 2018-05-01 | 用友金融信息技术股份有限公司 | 数据缓存优化方法、装置和计算机设备 |
CN110162488A (zh) * | 2018-11-15 | 2019-08-23 | 深圳乐信软件技术有限公司 | 缓存一致性校验方法、装置、服务器和存储介质 |
CN110955682A (zh) * | 2019-11-22 | 2020-04-03 | 北京金山云网络技术有限公司 | 缓存数据的删除、数据缓存及缓存数据的读取方法及装置 |
CN112559560A (zh) * | 2019-09-10 | 2021-03-26 | 北京京东振世信息技术有限公司 | 元数据读取方法及装置、更新方法及装置、存储装置 |
CN113010514A (zh) * | 2021-03-01 | 2021-06-22 | 中国工商银行股份有限公司 | 热加载方法及装置 |
CN113378096A (zh) * | 2021-07-07 | 2021-09-10 | 海信电子科技(深圳)有限公司 | 一种显示设备及浏览器残留帧清除方法 |
CN113742095A (zh) * | 2021-01-14 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种缓存数据处理方法、装置、电子设备及存储介质 |
CN115712397A (zh) * | 2023-01-05 | 2023-02-24 | 摩尔线程智能科技(北京)有限责任公司 | 缓存验证装置、方法及系统 |
-
2016
- 2016-02-23 CN CN201610097163.5A patent/CN107102896A/zh active Pending
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107977165A (zh) * | 2017-11-22 | 2018-05-01 | 用友金融信息技术股份有限公司 | 数据缓存优化方法、装置和计算机设备 |
CN107977165B (zh) * | 2017-11-22 | 2021-01-08 | 用友金融信息技术股份有限公司 | 数据缓存优化方法、装置和计算机设备 |
CN110162488A (zh) * | 2018-11-15 | 2019-08-23 | 深圳乐信软件技术有限公司 | 缓存一致性校验方法、装置、服务器和存储介质 |
CN112559560A (zh) * | 2019-09-10 | 2021-03-26 | 北京京东振世信息技术有限公司 | 元数据读取方法及装置、更新方法及装置、存储装置 |
CN110955682A (zh) * | 2019-11-22 | 2020-04-03 | 北京金山云网络技术有限公司 | 缓存数据的删除、数据缓存及缓存数据的读取方法及装置 |
CN113742095A (zh) * | 2021-01-14 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种缓存数据处理方法、装置、电子设备及存储介质 |
CN113010514A (zh) * | 2021-03-01 | 2021-06-22 | 中国工商银行股份有限公司 | 热加载方法及装置 |
CN113010514B (zh) * | 2021-03-01 | 2024-02-20 | 中国工商银行股份有限公司 | 热加载方法及装置 |
CN113378096A (zh) * | 2021-07-07 | 2021-09-10 | 海信电子科技(深圳)有限公司 | 一种显示设备及浏览器残留帧清除方法 |
CN113378096B (zh) * | 2021-07-07 | 2024-03-29 | Vidaa(荷兰)国际控股有限公司 | 一种显示设备及浏览器残留帧清除方法 |
CN115712397A (zh) * | 2023-01-05 | 2023-02-24 | 摩尔线程智能科技(北京)有限责任公司 | 缓存验证装置、方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107102896A (zh) | 一种多级缓存的操作方法、装置及电子设备 | |
CN102722432B (zh) | 追踪内存访问的方法和装置 | |
CN104246727B (zh) | 数据处理系统以及用于操作数据处理系统的方法 | |
CN106021445A (zh) | 一种加载缓存数据的方法及装置 | |
EP2291747A1 (en) | Data storage and access | |
CN109445685B (zh) | 一种用户态文件系统处理方法 | |
CN111352935B (zh) | 一种块链式账本中的索引创建方法、装置及设备 | |
CN105608162B (zh) | 文件处理方法和装置 | |
CN109471843A (zh) | 一种元数据缓存方法、系统及相关装置 | |
CN109558453B (zh) | 一种区块链数据网络化存储和移存的方法 | |
CN107817946A (zh) | 用于混合存储设备读写数据的方法以及装置 | |
CN116661910B (zh) | 一种应用调用的方法及装置 | |
US8972629B2 (en) | Low-contention update buffer queuing for large systems | |
CN106603673A (zh) | 基于纠删码的细粒度云存储调度方法 | |
CN111897828A (zh) | 数据批处理实现方法、装置、设备及存储介质 | |
CN113312386B (zh) | 一种基于分布式消息的批量入库方法 | |
CN115964389A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN106649530A (zh) | 云详单查询管理系统及方法 | |
CN107870922A (zh) | 一种用于数据去重的方法、设备和系统 | |
CN106815232A (zh) | 目录管理方法、装置及系统 | |
CN105677579A (zh) | 缓存系统中的数据访问方法和系统 | |
CN105468304A (zh) | 一种Native存储卡及其管理方法 | |
CN110288340A (zh) | 一种基于Java智能合约的数据集合存储方法 | |
CN105095352B (zh) | 应用于分布式系统的数据处理方法及装置 | |
JP5972455B2 (ja) | 情報を削除する方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170829 |
|
RJ01 | Rejection of invention patent application after publication |