CN114911717A - 一种数据缓存方法、装置及电子设备和存储介质 - Google Patents

一种数据缓存方法、装置及电子设备和存储介质 Download PDF

Info

Publication number
CN114911717A
CN114911717A CN202110169029.2A CN202110169029A CN114911717A CN 114911717 A CN114911717 A CN 114911717A CN 202110169029 A CN202110169029 A CN 202110169029A CN 114911717 A CN114911717 A CN 114911717A
Authority
CN
China
Prior art keywords
data
cache
database
level cache
target data
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
Application number
CN202110169029.2A
Other languages
English (en)
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.)
Jingdong Technology Information Technology Co Ltd
Original Assignee
Jingdong Technology Information Technology Co 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 Jingdong Technology Information Technology Co Ltd filed Critical Jingdong Technology Information Technology Co Ltd
Priority to CN202110169029.2A priority Critical patent/CN114911717A/zh
Publication of CN114911717A publication Critical patent/CN114911717A/zh
Pending legal-status Critical Current

Links

Images

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
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据缓存方法、装置及电子设备和计算机可读存储介质,该方法应用于一缓存系统,缓存系统包括一级缓存和二级缓存,一级缓存和二级缓存均与数据库连接,一级缓存具体为Java虚拟机缓存;方法包括:通过一级缓存每隔预设时间段从二级缓存中加载目标数据;其中,目标数据为变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的数据;若二级缓存中不存在目标数据,则通过一级缓存向数据库请求分布式锁,以将数据库中的目标数据加载至二级缓存中。本申请将变更低频、读取高频、数据量小的目标数据通过Java虚拟机缓存进行纯内存级的存储和操作,减少了网络开销,提高了缓存性能,从而满足复杂场景下的缓存需求。

Description

一种数据缓存方法、装置及电子设备和存储介质
技术领域
本申请涉及存储技术领域,更具体地说,涉及一种数据缓存方法、装置及电子设备和计算机可读存储介质。
背景技术
分布式可以理解为异地跨机房服务应用部署,Redis(中文全称:远程字典服务,英文全称:Remote Dictionary Server)缓存作为一种优越的分布式缓存服务已被广泛应用。在相关技术中,只使用Redis缓存作为唯一的缓存。但是,复杂场景下业务逻辑复杂,对缓存系统的性能要求较高,另外,依赖Redis存在网络开销,造成了缓存系统的性能瓶颈。可见,仅仅包括Redis缓存的缓存系统无法满足复杂场景下的缓存需求。
因此,如何提高缓存系统的性能,从而满足复杂场景下的缓存需求是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种数据缓存方法、装置及电子设备和计算机可读存储介质,提高了缓存系统的性能,从而满足复杂场景下的缓存需求。
为实现上述目的,本申请提供了一种数据缓存方法,应用于一缓存系统,所述缓存系统包括一级缓存和二级缓存,所述一级缓存和所述二级缓存均与数据库连接,所述一级缓存具体为Java虚拟机缓存;
所述方法包括:
通过所述一级缓存每隔预设时间段从所述二级缓存中加载目标数据;其中,所述目标数据为变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的数据;
若所述二级缓存中不存在所述目标数据,则通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
其中,所述一级缓存用于缓存所述目标数据,所述二级缓存用于缓存除所述目标数据之外的其他数据。
其中,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分包括多个分区,每个分区的数据结构为Map结构。
其中,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分的存储方式为序列化存储方式。
其中,所述二级缓存包括Redis缓存或Memcached缓存。
其中,所述Java虚拟机缓存通过分布式应用程序协调服务与所述数据库连接。
其中,还包括:
通过所述Java虚拟机缓存监听所述分布式应用程序协调服务的事件,并根据监听到的事件执行对应的操作;所述事件包括更新事件和会话事件,所述更新事件为更新所述数据库中目标数据的事件,所述会话事件为通信连接事件。
其中,若所述事件具体为所述更新事件,则所述根据监听到的事件执行对应的操作,包括:
所述Java虚拟机缓存监听所述分布式应用程序协调服务生成的通知消息;其中,所述通知消息包括更新后的目标数据的版本信息;
基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据。
其中,所述基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据,包括:
从所述数据库中拉取最新版本的目标数据;
判断拉取的目标数据的版本信息与所述通知消息中的版本信息是否一致;
若否,则重新进入从所述数据库中拉取最新版本的目标数据的步骤,直到拉取的目标数据的版本信息与所述通知消息中的版本信息一致。
其中,若所述事件具体为所述会话事件,则所述根据监听到的事件执行对应的操作,包括:
生成告警信息,或进入安全模式,或控制所述Java虚拟机缓存对应的服务下线。
其中,还包括:
若接收到业务请求,则判断所述缓存系统中是否存在所述业务请求对应的业务数据;
若是,则直接返回所述缓存系统中的所述业务数据;
若否,则向所述数据库请求分布式锁,请求成功后将所述业务请求发送至所述数据库,以在所述数据库中查询所述业务请求对应的业务数据。
其中,向所述数据库请求分布式锁之前,还包括:
将返回数据设置为空;
相应的,在所述数据库中查询所述业务请求对应的业务数据,包括:
若在所述数据库中查询到所述业务请求对应的业务数据,则基于所述业务数据更新所述缓存系统和所述返回数据,返回所述返回数据,并释放所述分布式锁;
若在所述数据库中未查询到所述业务请求对应的业务数据,则直接返回所述返回数据,并释放所述分布式锁。
为实现上述目的,本申请提供了一种数据缓存装置,应用于一缓存系统,所述缓存系统包括一级缓存和二级缓存,所述一级缓存和所述二级缓存均与数据库连接,所述一级缓存具体为Java虚拟机缓存;所述一级缓存用于缓存变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的目标数据;所述二级缓存用于缓存除所述目标数据之外的其他数据所述装置包括:
第一加载模块,用于通过所述一级缓存每隔预设时间段从所述二级缓存中加载所述目标数据;
第二加载模块,用于当所述二级缓存中不存在所述目标数据时,通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述数据缓存方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述数据缓存方法的步骤。
通过以上方案可知,本申请提供的一种缓存方法,应用于一缓存系统,所述缓存系统包括一级缓存和二级缓存,所述一级缓存和所述二级缓存均与数据库连接,所述一级缓存具体为Java虚拟机缓存;所述方法包括:通过所述一级缓存每隔预设时间段从所述二级缓存中加载目标数据;其中,所述目标数据为变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的数据;若所述二级缓存中不存在所述目标数据,则通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
在本申请中,将Java虚拟机(Java Virtual Machine,JVM)缓存作为一级缓存,外部依赖的缓存服务作为二级缓存。将变更低频、读取高频、数据量小的目标数据通过Java虚拟机缓存进行纯内存级的存储和操作,规避了外部依赖的二级缓存网络消耗带来的性能瓶颈。由此可见,本申请提供的缓存方法,减少了网络开销,提高了缓存性能,从而满足复杂场景下的缓存需求。本申请还公开了一种缓存装置及电子设备和计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为根据一示例性实施例示出的一种数据缓存方法的流程图;
图2为根据一示例性实施例示出的一种数据缓存系统的结构图;
图3为根据一示例性实施例示出的一种Java虚拟机缓存的结构图;
图4为根据一示例性实施例示出的另一种数据缓存方法的流程图;
图5为根据一示例性实施例示出的又一种数据缓存方法的流程图;
图6为根据一示例性实施例示出的一种数据缓存装置的结构图;
图7为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,在本申请实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例公开了一种数据缓存方法,提高了缓存系统的性能,从而满足复杂场景下的缓存需求。
参见图1,根据一示例性实施例示出的一种数据缓存方法的流程图,如图1所示,包括:
S101:通过一级缓存每隔预设时间段从二级缓存中加载目标数据;其中,所述目标数据为变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的数据;
本实施例的执行主体为缓存系统,该缓存系统如图2所示,包括一级缓存101和二级缓存102,所述一级缓存101和所述二级缓存102均与数据库103连接,所述一级缓存101具体为Java虚拟机缓存;所述一级缓存101用于缓存变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的目标数据;所述二级缓存102用于缓存除所述目标数据之外的其他数据。
在本实施例中,缓存系统包括多级缓存,即一级缓存101和二级缓存102。该一级缓存位于Java虚拟机内部,即Java虚拟机缓存。JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。二级缓存可以包括Redis缓存、Memcached缓存等,在此不进行具体限定。其中,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API(中文全称:应用程序接口,英文全称:Application ProgrammingInterface)。
Java虚拟机缓存101用于缓存变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的目标数据,此处不对第一预设值、第二预设值和第三预设值进行具体限定,可以根据实际的业务场景进行设置,当然也可以根据实际的业务场景设置缓存于Java虚拟机缓存的数据类型,原则是将变更低频、读取高频、数据量小的数据缓存于Java虚拟机缓存中。例如,对于用户认证系统来说,外部业务请求认证系统的目的是为了查询某用户的认证信息是否存在,若存在需要返回如用户姓名、身份证、手机号等较为敏感信息,为了保证数据交互安全需要明确业务调用方的专属渠道号和密钥来鉴权和身份识别。首先,渠道号、密钥生成后不会再变更,其次,每次业务请求都需要首先进行鉴权,通过后才可以请求到业务数据,因此存在业务请求就需要进行鉴权数据的读取,即鉴权数据的读取较为高频。另外,鉴权数据一般仅仅包括渠道号和密钥,每个业务请求方对应一份鉴权数据,即对应一个渠道号和密钥,业务请求方的数量是可控的,即鉴权数据的的存储量很小。可见,上述用于鉴权的鉴权数据即符合变更低频、读取高频、数据量小的原则,可以将鉴权数据缓存于Java虚拟机缓存中101。
在具体实施中,Java虚拟机缓存101可以包括HashMap、线程安全的ConcurrentHashMap、Caffeine等,在此不进行具体限定。上述三者均为都是Key-Value形式存储,即均包括索引部分(Key)和数据部分(Value),具体的实现细节不同,JDK(Java语言的软件开发工具包)自带的HashMap、ConcurrentHashMap操作和实现简单,而Caffeine则是一套封装良好天生为本地缓存服务的框架,提供了很多缓存特性。
可以理解的是,由于Java虚拟机缓存101采用Key-Value形式进行存储,只能支持索引部分(Key)单维度的数据存储,适合存储一对一的映射数据,例如,存储“姓名”和“身份证号”的一对一关系,存储形式为:<姓名,身份证号>。因此,对于复杂的数据存储与读取场景,可以对数据部分(Value)进行处理。
作为一种可行的实施方式,所述数据部分的存储方式为序列化存储方式。序列化存储方式是一种灵活变化的存储方式,若数据部分的数据格式非常复杂,则可以采用特定文本格式化的形式来存储。例如,将多维度的数据通过指定格式化方式降维成一维数据进行存储。
作为另一种可行的实施方式,所述数据部分包括多个分区,每个分区的数据结构为Map结构。在具体实施中,引入了分区(Region)使得Java虚拟机缓存支持多维度业务。如图3所示,每个Java虚拟机缓存101(图中的标注为LocalCache)实现内部都持有一个可见性的Map<Region,LocalCache<Object,Object>>,每个Region均为单例,即只会被初始化一次,Java虚拟机缓存可以简单理解为两个嵌套Map的数据结构,数据的存取都是基于Region分区来进行读取的,相当于对于一对一的映射关系增加分区概念。在上述“姓名”和“身份证号”的映射关系的例子中,若需要存储班级A、班级B中各同学的身份信息,可以创建RegionA和RegionB两个分区,RegionA用于存储班级A中各同学的<姓名,身份证号>,RegionB用于存储班级B中各同学的<姓名,身份证号>。可见,本实施方式优化了Java虚拟机缓存的数据结构,通过多维度哈希表进行数据Key-Value数据存储,减少序列化带来的性能消耗,支持O(1)时间复杂度数据查询匹配,相对于线性数据匹配进一步提升了性能。
进一步的,二级缓存102用于存储缓存除目标数据之外的其他数据,即业务数据量巨大,变更不可控,读取高频的数据。对于用户认证系统来说,二级缓存102中缓存的数据可以包括渠道值、授权码、业务授权、授权字段、脱敏字段和业务信息等,具体的数据类型和存储数据结构如表1所示:
表1
Figure BDA0002938335520000071
Figure BDA0002938335520000081
需要说明的是,在缓存系统服务初始化启动阶段,需要将变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的目标数据加载至Java虚拟机缓存中。在具体实施中,Java虚拟机缓存每隔预设时间段查询二级缓存中是否存在目标数据,即对二级缓存进行目标数据的轮询操作,若存在,则直接将二级缓存中的目标数据加载至Java虚拟机缓存中。
S102:若所述二级缓存中不存在所述目标数据,则通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
在具体实施中,若二级缓存中未查询到目标数据,则Java虚拟机缓存请求数据库进行目标数据的拉取。可以理解的是,为了避免同一时刻JVM集群中的多个Java虚拟机缓存频繁请求和拉取数据,本实施例采用分布式锁进行控制。某一Java虚拟机缓存请求分布式锁成功后,数据库将目标数据加载至二级缓存中,即二级缓存从数据库中拉取目标数据,同一时刻只发起一次数据拉取操作,未请求到分布式锁则说明其他Java虚拟机缓存请求分布式锁成功,二级缓存正在从数据库中拉取目标数据,未请求到分布式锁的Java虚拟机缓存等待下次异步轮询时进行目标数据的加载。也即,Java虚拟机缓存加载目标数据的过程中,需要二级缓存进行中转。
由此可见,本实施例通过分布式锁控制目标数据的加载,同一时刻分布式部署的JVM集群中仅存储一个获取分布式锁的Java虚拟机缓存,数据库中的目标数据被加载至二级缓存中,即数据库中的目标数据仅会被加载一次,JVM集群中的多个Java虚拟机缓存均从二级缓存中加载目标数据,提高了目标数据的加载效率。
本申请实施例提供的缓存方法应用于包括多级缓存的缓存系统,具体的,将Java虚拟机缓存作为一级缓存,外部依赖的缓存服务作为二级缓存。将变更低频、读取高频、数据量小的目标数据通过Java虚拟机缓存进行纯内存级的存储和操作,规避了外部依赖的二级缓存网络消耗带来的性能瓶颈。由此可见,本申请实施例提供的缓存方法,减少了网络开销,提高了缓存性能,从而满足复杂场景下的缓存需求。
需要说明的是,二级缓存的数据更新可以直接通过业务方法触发,而由于JVM集群为分布式集群,其中Java虚拟机缓存的数据更新需要通过分布式应用程序协调服务进行协调。
在上述实施例的基础上,作为一种优选实施方式,所述Java虚拟机缓存101通过分布式应用程序协调服务104与所述数据库103连接。在具体实施中,JVM可以进行分布式部署,JVM集群中包括多个Java虚拟机缓存101,通过分布式应用程序协调服务104对分布式部署的JVM集群中的多个Java虚拟机缓存101进行全局调度,协作二级缓存实现多级缓存方案。此处的分布式应用程序协调服务104可以包括ZooKeeper,其是一个分布式的、开放源码的分布式应用程序协调服务,为分布式应用提供一致性服务的软件。
相应的,上述实施例提供的缓存方法还包括:通过所述Java虚拟机缓存监听所述分布式应用程序协调服务的事件,并根据监听到的事件执行对应的操作;所述事件包括更新事件和会话事件,所述更新事件为更新所述数据库中目标数据的事件,所述会话事件为通信连接事件。
在具体实施中,JVM集群中的各Java虚拟机缓存通过监听分布式应用程序协调服务的事件执行对应的操作,此处的事件包括更新事件,更新事件用于驱动数据库目标数据的更新逻辑,可以包括数据变更、数据过期失效等,会话事件用于驱动通信连接的变更逻辑,例如中断连接等。
若上述事件具体为更新事件,则所述根据监听到的事件执行对应的操作的步骤包括:所述Java虚拟机缓存监听所述分布式应用程序协调服务生成的通知消息;其中,所述通知消息包括更新后的目标数据的版本信息;基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据。
可以理解的是,CAP原理为分布式开发中的一个基本原理,即C(一致性)、A(可用性)、P(分区容错性)三种特性,经过理论证实只能在同一时刻满足其中的两种特性。本实施例采用AP设计,即对数据一致性要求不高,但是对服务可用性要求高,也就是说,数据可以暂时不准确,但是服务必须时刻可用。在具体实施中,Java虚拟机缓存中的数据一致性依赖分布式应用程序协调服务进行实现,通过对其中的path进行监听,数据变更均会触发path变化从而产生更新事件,分布式应用程序协调服务将更新后的数据的版本号封装为通知消息,Java虚拟机缓存监听到该通知消息后,从数据库中拉取最新版本的目标数据,保证数据一致。
具体的,所述基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据的步骤包括:从所述数据库中拉取最新版本的目标数据;判断拉取的目标数据的版本信息与所述通知消息中的版本信息是否一致;若否,则重新进入从所述数据库中拉取最新版本的目标数据的步骤,直到拉取的目标数据的版本信息与所述通知消息中的版本信息一致。在具体实施中,Java虚拟机缓存持续的监听分布式应用程序协调服务的通知消息,同时从数据库中拉取当前最新版本的目标数据,具体的拉取过程与上一实施例中介绍的目标数据的加载过程类似,同样需要二级缓存进行中转,在此不再赘述。Java虚拟机缓存对比拉取的目标数据的版本信息与最新接收到的通知消息中的版本信息是否一致,若是,则说明数据一致,若否,则需要重新拉取。例如,目标数据A被更新为B,数据B对应的版本号为1,产生通知消息a,当Java虚拟机缓存监听到通知消息a后从数据库中拉取数据,此时数据B又被更新为C,数据C对应的版本号为2,产生通知消息b,此时Java虚拟机缓存拉取数据的版本号2与通知消息a中的版本号1不一致,继续拉取数据,此时Java虚拟机缓存接收到通知消息b,从数据库中拉取数据的版本号为2,与通知消息a中的版本号2一致,拉取完成。
需要说明的是,当数据库中的目标数据更新后,Java虚拟机缓存拉取更新后的数据的过程中,Java虚拟机缓存中的数据为脏数据,多个Java虚拟机缓存中的数据陆续更新最终与数据库一致,更新过程中即使数据不一致Java虚拟机缓存服务也可用。
若上述事件具体为会话事件,则所述根据监听到的事件执行对应的操作的步骤包括:生成告警信息,或进入安全模式,或控制所述Java虚拟机缓存对应的服务下线。
在具体实施中,分布式应用程序协调服务是Java虚拟机缓存与数据库之间的唯一通信信道,一旦出现网络或中间件异常,会出现无法通信无法变更数据的情况。对于这种极端情况,作为一种可行的实施方式,可以开启一个定时轮询的守护线程监控Java虚拟机缓存中的数据情况,守护线程用于开启轮询任务,每隔预设时间段对Java虚拟机缓存中的数据进行校验,异常则生成告警信息。作为另一种可行的实施方式,若Java虚拟机缓存与分布式应用程序协调服务之间存在通信异常,可以生成告警信息,或进入安全模式,或控制所述Java虚拟机缓存对应的服务下线。告警信息可以通过第三方服务进行推送,如电话、短信、APP等,进入安全模式即对Java虚拟机缓存对应的服务进行降级处理。
可见,本实施方式通过分布式应用程序协调服务对分布式部署的JVM集群进行分布式调度和管理,无需服务停机重启即可实现数据的即时加载和热更新,即实现了对服务无影响、业务无感知的数据更新,提高了系统的可维护性。
本申请实施例公开了另一种缓存方法,具体为:
参见图4,根据一示例性实施例示出的另一种缓存方法的流程图,如图4所示,包括:
S201:若接收到业务请求,则判断所述缓存系统中是否存在所述业务请求对应的业务数据;若是,则进入S202;若否,则进入S203;
S202:直接返回所述缓存系统中的所述业务数据;
S203:向所述数据库请求分布式锁,请求成功后将所述业务请求发送至所述数据库,以在所述数据库中查询所述业务请求对应的业务数据。
在本实施例中,业务请求到达时首先查询缓存系统中是否该业务请求对应的业务数据,若存在则直接返回。若不存在,则请求数据库。可以理解的是,为了避免多个业务请求同一时刻到达数据库,需要竞态获取分布式锁,获取分布锁成功的业务请求可以顺利抵达数据库进行数据获取。
本申请实施例公开了一种缓存方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图5,根据一示例性实施例示出的又一种缓存方法的流程图,如图5所示,包括:
S301:若接收到业务请求,则判断所述缓存系统中是否存在所述业务请求对应的业务数据;若是,则进入S302;若否,则进入S303;
S302:直接返回所述缓存系统中的所述业务数据;
S303:将返回数据设置为空;
S304:向所述数据库请求分布式锁,请求成功后将所述业务请求发送至所述数据库;
S305:判断在所述数据库中是否查询到所述业务请求对应的业务数据;若是,则进入S306;若否,则进入S307;
S306:基于所述业务数据更新所述缓存系统和所述返回数据,并进入S307;
S307:返回所述返回数据,并释放所述分布式锁。
在本实施例中,若缓存系统中不存在业务请求对应的业务数据,为了防止缓存穿透进行空值缓存,即将返回数据设置为空。如果在数据库中查询到业务数据则立刻更新缓存和返回数据,返回该返回数据,并释放所述分布式锁。未查询到则直接返回所述返回数据,并释放所述分布式锁。
需要说明的是,若业务方法涉及业务数据的变更时,需要进行切面环绕以保持第一时间清除缓存,保证缓存与数据库数据一致性。具体的,更新数据库后根据返回结果来判断是否需要进行缓存数据移除,如果更新数据库成功则立刻移除缓存数据,若不成功则不移除缓存数据。
下面对本申请实施例提供的一种数据缓存装置进行介绍,下文描述的一种数据缓存装置与上文描述的一种数据缓存方法可以相互参照。
参见图6,根据一示例性实施例示出的一种数据缓存装置的结构图,如图6所示,包括:
第一加载模块601,用于通过所述一级缓存每隔预设时间段从所述二级缓存中加载所述目标数据;
第二加载模块602,用于当所述二级缓存中不存在所述目标数据时,通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
本申请实施例提供的缓存装置应用于包括多级缓存的缓存系统,具体的,将Java虚拟机缓存作为一级缓存,外部依赖的缓存服务作为二级缓存。将变更低频、读取高频、数据量小的目标数据通过Java虚拟机缓存进行纯内存级的存储和操作,规避了外部依赖的二级缓存网络消耗带来的性能瓶颈。由此可见,本申请实施例提供的缓存装置,减少了网络开销,提高了缓存性能,从而满足复杂场景下的缓存需求。
在上述实施例的基础上,作为一种优选实施方式,所述一级缓存用于缓存所述目标数据,所述二级缓存用于缓存除所述目标数据之外的其他数据。
在上述实施例的基础上,作为一种优选实施方式,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分包括多个分区,每个分区的数据结构为Map结构。
在上述实施例的基础上,作为一种优选实施方式,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分的存储方式为序列化存储方式。
在上述实施例的基础上,作为一种优选实施方式,所述二级缓存包括Redis缓存或Memcached缓存。
在上述实施例的基础上,作为一种优选实施方式,所述Java虚拟机缓存通过分布式应用程序协调服务与所述数据库连接。
在上述实施例的基础上,作为一种优选实施方式,还包括:
监听模块,用于通过所述Java虚拟机缓存监听所述分布式应用程序协调服务的事件;所述事件包括更新事件和会话事件,所述更新事件为更新所述数据库中目标数据的事件,所述会话事件为通信连接事件;
执行模块,用于根据监听到的事件执行对应的操作。
在上述实施例的基础上,作为一种优选实施方式,若所述事件具体为所述更新事件,则所述执行模块包括:
监听单元,用于通过所述Java虚拟机缓存监听所述分布式应用程序协调服务生成的通知消息;其中,所述通知消息包括更新后的目标数据的版本信息;
拉取单元,用于基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据。
在上述实施例的基础上,作为一种优选实施方式,所述拉取单元包括:
拉取子单元,用于从所述数据库中拉取最新版本的目标数据;
判断子单元,用于判断拉取的目标数据的版本信息与所述通知消息中的版本信息是否一致;若否,则重新启动拉取子单元的工作流程,直到拉取的目标数据的版本信息与所述通知消息中的版本信息一致。
在上述实施例的基础上,作为一种优选实施方式,若所述事件具体为所述会话事件,则所述执行模块具体为生成告警信息,或进入安全模式,或控制所述Java虚拟机缓存对应的服务下线的模块。
在上述实施例的基础上,作为一种优选实施方式,还包括:
判断模块,用于在接收到业务请求时,判断所述缓存系统中是否存在所述业务请求对应的业务数据;若是,则启动返回模块的工作流程;若否,则启动查询模块的工作流程;
返回模块,用于直接返回所述缓存系统中的所述业务数据;
查询模块,用于向所述数据库请求分布式锁,请求成功后将所述业务请求发送至所述数据库,以在所述数据库中查询所述业务请求对应的业务数据。
在上述实施例的基础上,作为一种优选实施方式,向所述数据库请求分布式锁之前,还包括:
设置模块,用于在缓存系统中不存在所述业务请求对应的业务数据时,将返回数据设置为空;
相应的,所述查询模块包括:
第一返回单元,用于在所述数据库中查询到所述业务请求对应的业务数据时,基于所述业务数据更新所述缓存系统和所述返回数据,返回所述返回数据,并释放所述分布式锁;
第二返回单元,用于在所述数据库中未查询到所述业务请求对应的业务数据时,直接返回所述返回数据,并释放所述分布式锁。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备,图7为根据一示例性实施例示出的一种电子设备的结构图,如图7所示,电子设备包括:
通信接口1,能够与其它设备比如网络设备等进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的数据缓存方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统4。
本申请实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器2旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (15)

1.一种数据缓存方法,其特征在于,应用于一缓存系统,所述缓存系统包括一级缓存和二级缓存,所述一级缓存和所述二级缓存均与数据库连接,所述一级缓存具体为Java虚拟机缓存;
所述方法包括:
通过所述一级缓存每隔预设时间段从所述二级缓存中加载目标数据;其中,所述目标数据为变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的数据;
若所述二级缓存中不存在所述目标数据,则通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
2.根据权利要求1所述数据缓存方法,其特征在于,所述一级缓存用于缓存所述目标数据,所述二级缓存用于缓存除所述目标数据之外的其他数据。
3.根据权利要求1所述数据缓存方法,其特征在于,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分包括多个分区,每个分区的数据结构为Map结构。
4.根据权利要求1所述数据缓存方法,其特征在于,所述Java虚拟机缓存包括索引部分和数据部分,所述数据部分的存储方式为序列化存储方式。
5.根据权利要求1所述数据缓存方法,其特征在于,所述二级缓存包括Redis缓存或Memcached缓存。
6.根据权利要求1所述数据缓存方法,其特征在于,所述Java虚拟机缓存通过分布式应用程序协调服务与所述数据库连接。
7.根据权利要求6所述数据缓存方法,其特征在于,还包括:
通过所述Java虚拟机缓存监听所述分布式应用程序协调服务的事件,并根据监听到的事件执行对应的操作;所述事件包括更新事件和会话事件,所述更新事件为更新所述数据库中目标数据的事件,所述会话事件为通信连接事件。
8.根据权利要求7所述数据缓存方法,其特征在于,若所述事件具体为所述更新事件,则所述根据监听到的事件执行对应的操作,包括:
通过所述Java虚拟机缓存监听所述分布式应用程序协调服务生成的通知消息;其中,所述通知消息包括更新后的目标数据的版本信息;
基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据。
9.根据权利要求8所述数据缓存方法,其特征在于,所述基于所述通知消息中的版本信息从所述数据库中拉取最新版本的目标数据,包括:
从所述数据库中拉取最新版本的目标数据;
判断拉取的目标数据的版本信息与所述通知消息中的版本信息是否一致;
若否,则重新进入从所述数据库中拉取最新版本的目标数据的步骤,直到拉取的目标数据的版本信息与所述通知消息中的版本信息一致。
10.根据权利要求7所述数据缓存方法,其特征在于,若所述事件具体为所述会话事件,则所述根据监听到的事件执行对应的操作,包括:
生成告警信息,或进入安全模式,或控制所述Java虚拟机缓存对应的服务下线。
11.根据权利要求1所述数据缓存方法,其特征在于,还包括:
若接收到业务请求,则判断所述缓存系统中是否存在所述业务请求对应的业务数据;
若是,则直接返回所述缓存系统中的所述业务数据;
若否,则向所述数据库请求分布式锁,请求成功后将所述业务请求发送至所述数据库,以在所述数据库中查询所述业务请求对应的业务数据。
12.根据权利要求11所述数据缓存方法,其特征在于,向所述数据库请求分布式锁之前,还包括:
将返回数据设置为空;
相应的,在所述数据库中查询所述业务请求对应的业务数据,包括:
若在所述数据库中查询到所述业务请求对应的业务数据,则基于所述业务数据更新所述缓存系统和所述返回数据,返回所述返回数据,并释放所述分布式锁;
若在所述数据库中未查询到所述业务请求对应的业务数据,则直接返回所述返回数据,并释放所述分布式锁。
13.一种数据缓存装置,其特征在于,应用于一缓存系统,所述缓存系统包括一级缓存和二级缓存,所述一级缓存和所述二级缓存均与数据库连接,所述一级缓存具体为Java虚拟机缓存;所述一级缓存用于缓存变更频率低于第一预设值、读取频率高于第二预设值和数据量小于第三预设值的目标数据;所述二级缓存用于缓存除所述目标数据之外的其他数据
所述装置包括:
第一加载模块,用于通过所述一级缓存每隔预设时间段从所述二级缓存中加载所述目标数据;
第二加载模块,用于当所述二级缓存中不存在所述目标数据时,通过所述一级缓存向数据库请求分布式锁,以将所述数据库中的目标数据加载至所述二级缓存中。
14.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至12任一项所述数据缓存方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至12任一项所述数据缓存方法的步骤。
CN202110169029.2A 2021-02-07 2021-02-07 一种数据缓存方法、装置及电子设备和存储介质 Pending CN114911717A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110169029.2A CN114911717A (zh) 2021-02-07 2021-02-07 一种数据缓存方法、装置及电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110169029.2A CN114911717A (zh) 2021-02-07 2021-02-07 一种数据缓存方法、装置及电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN114911717A true CN114911717A (zh) 2022-08-16

Family

ID=82761146

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110169029.2A Pending CN114911717A (zh) 2021-02-07 2021-02-07 一种数据缓存方法、装置及电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN114911717A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115840862A (zh) * 2023-02-21 2023-03-24 南京赛宁信息技术有限公司 一种网络靶场大规模场景中靶标的快速查询方法与系统
CN116561825A (zh) * 2023-07-12 2023-08-08 北京亿赛通科技发展有限责任公司 数据安全管控方法、装置及计算机设备
CN117707657A (zh) * 2023-07-05 2024-03-15 荣耀终端有限公司 应用界面的显示方法、电子设备及计算机可读存储介质
CN118363884A (zh) * 2024-04-29 2024-07-19 北京泰迪未来科技股份有限公司 一种分布式多级缓存方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115840862A (zh) * 2023-02-21 2023-03-24 南京赛宁信息技术有限公司 一种网络靶场大规模场景中靶标的快速查询方法与系统
CN117707657A (zh) * 2023-07-05 2024-03-15 荣耀终端有限公司 应用界面的显示方法、电子设备及计算机可读存储介质
CN116561825A (zh) * 2023-07-12 2023-08-08 北京亿赛通科技发展有限责任公司 数据安全管控方法、装置及计算机设备
CN116561825B (zh) * 2023-07-12 2023-09-26 北京亿赛通科技发展有限责任公司 数据安全管控方法、装置及计算机设备
CN118363884A (zh) * 2024-04-29 2024-07-19 北京泰迪未来科技股份有限公司 一种分布式多级缓存方法及装置

Similar Documents

Publication Publication Date Title
CN114911717A (zh) 一种数据缓存方法、装置及电子设备和存储介质
CN111258725B (zh) 一种基于区块链的数据处理方法、装置、设备和介质
WO2019179026A1 (zh) 电子装置、集群访问域名自动生成方法及存储介质
CN110968603B (zh) 一种数据访问方法及装置
US11245762B1 (en) Data request servicing using smart network interface cards
CN111416836B (zh) 基于Nginx的服务器维护方法、装置、计算机设备及存储介质
US20220129458A1 (en) Method for generating identification id, and apparatus implementing the same method
WO2019169771A1 (zh) 电子装置、访问指令信息获取方法及存储介质
CN112434278A (zh) 一种裸机认证方法、装置、设备及介质
CN112948399A (zh) 序列号生成方法、装置、计算机设备和存储介质
CN112783866A (zh) 数据读取方法、装置、计算机设备和存储介质
CN112559131A (zh) 更新容器镜像的方法、装置、设备及计算机可读存储介质
CN112015563A (zh) 消息队列切换方法、装置、电子设备及存储介质
CN113360172B (zh) 应用部署方法、装置、计算机设备及存储介质
CN107632893B (zh) 消息队列处理方法及装置
CN116800845A (zh) 数据更新方法、装置、服务器及存储介质
CN109460291B (zh) 电子装置、弹性控制服务器集群的方法及存储介质
CN114741628A (zh) 一种网页加载方法及相关装置
CN113741912A (zh) 模型管理系统、方法、装置及设备
CN117591248B (zh) 基于容器化虚拟机的终端系统处理方法及电子设备
CN113805855B (zh) 一种方法级别的幂等性解决方法、装置及存储介质
EP4365740A1 (en) Chip monitoring method and apparatus
CN112307083B (zh) 数据处理方法、装置及服务器
CN112383633B (zh) 会话管理方法和系统
US20210397478A1 (en) Resource-usage notification framework in a distributed computing environment

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