CN113590661A - 数据缓存方法、装置、服务器和计算机可读存储介质 - Google Patents

数据缓存方法、装置、服务器和计算机可读存储介质 Download PDF

Info

Publication number
CN113590661A
CN113590661A CN202110879427.3A CN202110879427A CN113590661A CN 113590661 A CN113590661 A CN 113590661A CN 202110879427 A CN202110879427 A CN 202110879427A CN 113590661 A CN113590661 A CN 113590661A
Authority
CN
China
Prior art keywords
data
cache
read data
target read
mutual exclusion
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
CN202110879427.3A
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.)
Shanghai Pudong Development Bank Co Ltd
Original Assignee
Shanghai Pudong Development Bank 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 Shanghai Pudong Development Bank Co Ltd filed Critical Shanghai Pudong Development Bank Co Ltd
Priority to CN202110879427.3A priority Critical patent/CN113590661A/zh
Publication of CN113590661A publication Critical patent/CN113590661A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种数据缓存方法、装置、服务器和计算机可读存储介质。数据缓存方法包括:第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,互斥锁的初始失效时间为第一预设时间;若第一进程获取互斥锁成功,则将目标读取数据写入缓存空间,以执行目标读取数据的刷新操作,且完成刷新操作后将互斥锁的失效时间更新为第二预设时间;其中,第二预设时间大于第一预设时间;若第一进程获取互斥锁失败,则执行在缓存空间中查询并读取目标读取数据的操作;在到达互斥锁的失效时间后,释放互斥锁。与现有技术相比,本发明实施例提高了系统响应速度,以及有利于避免缓存击穿。

Description

数据缓存方法、装置、服务器和计算机可读存储介质
技术领域
本发明实施例涉及金融科技技术领域,尤其涉及一种数据缓存方法、装置、服务器和计算机可读存储介质。
背景技术
随着金融科技的不断发展,金融类服务器的应用范围越来越广泛,用户数量越来越多。在金融应用服务中,通常引入缓存技术以解决网络请求的响应速度的问题,以提升用户的体验。
然而,在现有的数据缓存方法中,在无法找到需要查询的缓存数据时,仍然需要多次从后台系统或者数据库中查询对应的数据,导致系统响应速度下降,存在缓存击穿的问题。
发明内容
本发明实施例提供一种数据缓存方法、装置、服务器和计算机可读存储介质,以提高系统响应速度,避免缓存击穿。
第一方面,本发明实施例提供了一种数据缓存方法,包括:
第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,所述互斥锁的初始失效时间为第一预设时间;
若所述第一进程获取所述互斥锁成功,则将所述目标读取数据写入缓存空间,以执行所述目标读取数据的刷新操作,且完成刷新操作后将所述互斥锁的失效时间更新为第二预设时间;其中,所述第二预设时间大于所述第一预设时间;
若所述第一进程获取所述互斥锁失败,则执行在所述缓存空间中查询并读取所述目标读取数据的操作;
在到达所述互斥锁的失效时间后,释放所述互斥锁。
第二方面,本发明实施例还提供了一种数据缓存装置,包括:
互斥锁获取模块,用于在第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,所述互斥锁的初始失效时间为第一预设时间;
缓存刷新模块,用于在所述第一进程获取所述互斥锁成功时,将所述目标读取数据写入缓存空间,以执行所述目标读取数据的刷新操作,且完成刷新操作后将所述互斥锁的失效时间更新为第二预设时间;其中,所述第二预设时间大于所述第一预设时间;
缓存查询模块,用于在所述第一进程获取所述互斥锁失败时,执行在所述缓存空间中查询并读取所述目标读取数据的操作;
互斥锁释放模块,用于在到达所述互斥锁的失效时间后,释放所述互斥锁。
第三方面,本发明实施例还提供了一种服务器,所述服务器包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例所述的数据缓存方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的数据缓存方法。
本发明实施例提供的数据缓存方法包括,第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;若第一进程获取互斥锁成功,则将目标读取数据写入缓存空间,以执行目标读取数据的刷新操作,且完成刷新操作后将互斥锁的失效时间重置延长;若第一进程获取互斥锁失败,则执行在缓存空间中查询并读取目标读取数据的操作;在到达互斥锁的失效时间后,释放互斥锁。由此可见,本发明实施例的第一进程在成功获取互斥锁,进行目标读取数据的刷新操作时,其他进程无法获取互斥锁;其他进程在成功获取互斥锁,进行目标读取数据的刷新操作时,第一进程可以直接从缓存空间中查询和读取目标读取数据。以及,本发明实施例通过在不同的阶段调整互斥锁的失效时间,有利于数据缓存的高效运行。因此,与现有技术相比,本发明实施例避免了多个进程多次从后台系统或者数据库中查询对应的数据,提升了系统的并发能力和响应速度,有利于避免缓存击穿。
附图说明
图1为本发明实施例一提供的一种数据缓存方法的流程示意图;
图2为本发明实施例二提供的一种生成缓存键的流程示意图;
图3为本发明实施例三提供的一种将目标读取数据写入缓存空间的流程示意图;
图4为本发明实施例三提供的一种从缓存空间中读取数据的流程示意图;
图5为本发明实施例五提供的一种数据缓存方法的流程示意图;
图6为本发明实施例五提供的一种数据缓存装置的结构示意图;
图7为本发明实施例六提供的一种服务器的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种数据缓存方法的流程示意图。本实施例可适用于在手机银行交易中缓存热点数据的应用场景,在大量终端需要访问某项业务服务的数据时,服务器经常会同时接收到大量的数据读取需求。可能多个数据读取需求的目标读取数据是相同的,并且,该目标读取数据可能在服务器的本地内存中缓存,也可能在其他位置缓存,还可能并未缓存,而是需要从数据源读取至缓存,再响应该数据读取需求。本发明实施例即适用于服务器支持终端读取数据的情况。该方法可以由数据缓存装置执行,该数据缓存装置可以由硬件和/或软件实现,一般可以集成在电子设备中,如支持终端数据访问服务的服务器等。参见图1,数据缓存方法包括以下步骤:
S110、第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,互斥锁的初始失效时间为第一预设时间。
第一进程是服务器中进行数据读取的进程。示例性地,对于金融类客户端,当有1000个用户同时访问基金列表时,基金列表就是目标读取数据,客户端将发起1000个数据读取请求给服务器,服务器接收到数据读取请求后则产生进程来进行数据读取。受限于进程资源,可能有部分数据读取请求能产生对应的进程来处理。进程可以是专门为了读取数据的,也可以是执行其他功能的过程中产生了数据读取需求。则在进程产生数据读取需求时,申请获取基金列表的互斥锁,但只有一个进程能够获取成功。互斥锁被配置有失效时间,在互斥锁的失效时间内,其他要读取该目标读取数据的进程无法获取基金列表的互斥锁,直至互斥锁的失效时间到期或被主动释放。其中,目标读取数据的互斥锁的作用是,在第一进程获取互斥锁成功后,在互斥锁的失效时间内,只能由第一进程对目标读取数据进行刷新操作,以保证刷新操作的完整性。
示例性地,互斥锁的初始失效时间为第一预设时间,第一预设时间为相对较短的时间,特别是相对于缓存数据刷新间隔来说是较短的时间,例如为5s。由此,当第一进程获得互斥锁之后,如果没有能够成功对目标读取数据进行刷新,则互斥锁会很快失效,允许其他进程获得该互斥锁。不会让第一进程的失败刷新占据太长时间。
S120、若第一进程获取互斥锁成功,则将目标读取数据写入缓存空间,以执行目标读取数据的刷新操作,且完成刷新操作后将互斥锁的失效时间更新为第二预设时间;其中,第二预设时间大于第一预设时间。
其中,仍以1000个进程申请获取基金列表的互斥锁为例,当第一进程获取基金列表的互斥锁成功后,能够对基金列表进行刷新操作。且在刷新成功时,重新设置互斥锁的失效时间,具体是将失效时间增大,则在互斥锁的失效时间内,由于没有进程能获取基金列表的互斥锁,所以基金列表不再进行刷新,直至互斥锁的失效时间到,有新的进程获取到基金列表的互斥锁,进行下一次刷新。在互斥锁的失效时间内,其他的999个进程无法获取基金列表的互斥锁,从而无法对基金列表进行刷新操作。可选地,第二预设时间为预设的最小缓存刷新时间间隔,最小缓存刷新时间间隔是系统的预设值,第二预设时间这样设置,可以使得刚被刷新过的缓存数据,不会由于其他进程获得互斥锁而立即被再次刷新,需要至少持续最小缓存刷新时间间隔,才可能由于其他进程获得互斥锁而被刷新。示例性地,定义变量refreshInterval表示最小缓存刷新时间间隔,默认为60s,即第二预设时间为60s;第一预设时间小于60s,例如是5s。第二预设时间也可以设置的更长,按照具体需求确定。
可选地,刷新操作具体可以是,第一进程从非缓存空间的数据源读取目标读取数据,并写入缓存空间。其中,非缓存空间例如可以是后台系统等其他系统、数据库。示例性地,可以执行注解的方法获取要缓存的数据,例如,被@CacheProperty注解。由于在互斥锁失效时间内,只有一个进程能够从非缓存空间读取目标读取数据,从而避免了多个进程同时读取非缓存的数据源,有利于解决缓存击穿的问题。
其中,虽然缓存空间中可能有目标读取数据,但第一进程占用互斥锁时,依然从非缓存空间读取。这样设置的原因是,在经过一段时间后,数据源中的数据可能已经被更新,不能保证缓存空间中的数据是最新的,所以只能再从数据源去读取一次。
S130、若第一进程获取互斥锁失败,则执行在缓存空间中查询并读取目标读取数据的操作。
其中,第一进程获取互斥锁失败,表明互斥锁被其他进程占用,其他进程可能在执行数据刷新操作。仍以1000个进程申请获取基金列表的互斥锁为例,当第一进程获取基金列表的互斥锁失败,而其他999个进程中的一个可能获取到基金列表的互斥锁,能够对基金列表进行刷新操作。此时,无论基金列表的互斥锁是否被其他进程获取成功,第一进程仍然可以执行在缓存空间中查询并读取基金列表的操作,若第一进程在基金列表刷新前进行查询和读取的操作,则第一进程查询和读取的基金列表是刷新前的数据;若第一进程在基金列表刷新后进行查询和读取的操作,则第一进程查询和读取的基金列表是刷新后的数据。总之,第一进程在获取互斥锁失败后,仍能够查询和读取到目标读取数据,有利于提升系统响应速度。
S140、在到达互斥锁的失效时间后,释放互斥锁释放。
其中,在设置互斥锁的失效时间时,存在由小到大的过程。具体地,在第一进程将目标读取数据成功刷新之前,设置互斥锁的失效时间较小;第一进程成功刷新目标读取数据时,设置互斥锁的失效时间较大。这样设置的原因在于,如果互斥锁的失效时间一开始就设置的较大,即使第一进程进行刷新操作失败也会始终占用互斥锁,其他进程无法重新得到互斥锁。因此,本发明实施例有利于避免互斥锁的无效占用时间,提升系统响应速度。
由此可见,本实施例的第一进程在成功获取互斥锁,进行目标读取数据的刷新操作时,其他进程无法获取互斥锁;其他进程在成功获取互斥锁,进行目标读取数据的刷新操作时,第一进程可以直接从缓存空间中查询和读取目标读取数据。以及,本实施例通过在不同的阶段调整互斥锁的失效时间,有利于数据缓存的高效运行。因此,与现有技术相比,本实施例避免了多个进程多次从后台系统或者数据库中查询对应的数据,提升了系统的并发能力和响应速度,有利于避免缓存击穿。
在上述各技术方案的基础上,可选地,在第一进程对目标读取数据进行刷新或读取的过程中,还包括:第二进程获取目标读取数据的互斥锁失败时,则执行在缓存空间中查询并读取目标读取数据的操作。其中,第二进程与第一进程的目标读取数据相同,第二进程与第一进程可以同时发起,第二进程也可以在第一进程前或后发起。
示例性地,以申请获取基金列表的互斥锁为例,当第一进程获取基金列表的互斥锁成功,对基金列表进行刷新操作的同时,第二进程可以执行在缓存空间中查询和读取基金列表的操作。当第一进程获取基金列表的互斥锁失败,执行在缓存空间中查询和读取基金列表的操作的同时,第二进程也可以执行在缓存空间中查询和读取基金列表的操作。在读取目标读取数据的过程中,只有个别进程能够在刷新间隔时成功获取互斥锁并刷新缓存,而几乎所有进程都是通过查询和读取缓存空间来获取目标读取数据。因此,本发明实施例提供的数据缓存方法的系统响应速度较快。
在上述各技术方案的基础上,可选地,在申请获取目标读取数据的互斥锁之前,还包括:若目标读取数据的缓存失效时间未设置或缓存失效时间小于预设的最小缓存刷新时间间隔,则将缓存失效时间重置为第三预设时间;其中,第三预设时间大于最小缓存刷新时间间隔,即缓存失效时间大于互斥锁的失效时间。优选地,第三预设时间为最小缓存刷新时间间隔的两倍,即缓存失效时间为互斥锁的失效时间的两倍。
其中,缓存失效时间是指缓存数据在缓存空间中的失效时间,在缓存失效时间之内,所有的进程可以执行在缓存空间中查询和读取目标读取数据的操作。当缓存失效时间到,所有进程不能执行在缓存空间中查询和读取目标读取数据的操作,需要等待缓存数据再次被刷新,重新设定缓存失效时间。本发明实施例设置缓存失效时间长于互斥锁的失效时间是防止在刷新时其他进程无法从缓存空间中查询和读取数据,导致其他进程都等着缓存数据加载成功,因此,本发明实施例有利于避免其他进程阻塞等待缓存刷新。
实施例二
本实施例以上述实施例为基础进行细化,可选地,第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁包括:第一进程在产生数据读取需求时,产生目标读取数据的缓存键,并根据缓存键申请获取目标读取数据的互斥锁。其中,缓存系统存储有至少一个具有缓存键的缓存数据,且第一进程在产生数据读取需求时,相当于缓存键的值已知。读取数据时产生的缓存键,与写入数据时产生的缓存键,由于规则相同,所以缓存键是相同的,缓存键作为刷新、查询、读取缓存数据的唯一标识。
示例性地,缓存空间包括一级本地内存和二级分布式缓存空间,二级分布式缓存空间例如可以是远程字典服务(Remote Dictionary Server,Redis),此时,定义变量rediskey表示目标读取数据的缓存键。
具体地,图2为本发明实施例二提供的一种生成缓存键的流程示意图。参见图2,在上述技术方案的基础上,可选地,产生目标读取数据的缓存键包括以下步骤:
S210、判断数据读取需求中的缓存键表达式是否为非空值。
示例性地,缓存空间包括一级本地内存和二级分布式缓存空间,二级分布式缓存空间例如可以是Redis,以变量redisKeyExpression表示缓存键表达式。其中,缓存键表达式非空的形式可以是声明缓存键表达式redisKeyExpression包括系统名(例如手机)、客户号或业务场景(例如卡列表)等。示例性地,声明redisKeyExpression="mobile:{masterId}:AccoutList",其中,变量mobile表示手机,变量masterId表示客户号、变量AccoutList表示卡列表。
若是,则执行S220、根据对象导航图语言表达式生成缓存键。
其中,对象导航图语言是指ognl语言,示例性地,以redisKey ognl表达式表示对象导航图语言表达式,即针对数据读取需求中的缓存键表达式为非空值的情况,采用redisKey ognl表达式产生缓存键。
若否,则执行S230、判断缓存键方法名称描述是否为非空值。
其中,以变量redisKeyMethodName表示缓存键方法名称描述。
若是,则执行S240、调用缓存键生成方法生成缓存键。
其中,针对变量redisKeyExpression为空值、变量redisKeyMethodName为非空值的情况,调用缓存键生成方法生成缓存键redis key。
若否,则执行S250、通过方法签名拼接参数序列化后生成的通用唯一识别码作为缓存键。
其中,通用唯一识别码(Universally Unique Identifier,UUID)是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定,每个进程都可以创建不与其它进程冲突的UUID。针对变量redisKeyExpression为空值,且变量redisKeyMethodName为空值的情况,通过方法签名拼接参数序列化后生成的通用唯一识别码UUID。
S260、返回缓存键。
通过S210-S260实现了生成缓存键的步骤,这些步骤可以作为一个子程序,示例性地,以generateCacheKey表示生成缓存键的子程序,其产生的缓存数据的缓存键值为cacheKey。当主程序需要时,可以调用名称为generateCacheKey的子程序。
实施例三
本实施例以上述各实施例为基础进行细化,可选地,将目标读取数据写入缓存空间包括:将目标读取数据写入二级分布式缓存空间,并写入一级本地内存。
其中,一级缓存使用本地内存,请求缓存速度快,没有过多的网络开销。二级缓存使用分布式缓存,示例性地,二级分布式缓存例如可以是Redis,Redis支持多种类型的数据结构,如字符串、散列、列表、集合、有序集合与范围查询、bitmaps、hyperloglogs和地理空间索引半径查询。Redis内置了复制、LUA脚本、LRU驱动事件、事务和不同级别的磁盘持久化,并通过Redis哨兵和自动分区提供高可用性。
本发明实施例采用一级本地内存+二级分布式缓存的结构,查询数据时可以先从一级缓存获取数据,如果一级缓存未获取到数据则从二级缓存获取数据,从而避免对后台系统或者数据库进行高并发查询,提高系统的并发能力和响应速度。
具体地,图3为本发明实施例三提供的一种将目标读取数据写入缓存空间的流程示意图。参见图3,在上述各技术方案的基础上,可选地,将目标读取数据写入二级分布式缓存空间,并写入一级本地内存,包括以下步骤:
S310、判断获取到目标读取数据的值域是否为非空值。
其中,目标读取数据的值域是空值是指缓存数据为空指针null;相应地,目标读取数据的值域是非空值是指缓存数据不是空指针null。
若是,则执行S320、将目标读取数据缓存到一级本地内存,作为一级缓存数据。
若否,则执行S330、将目标读取数据的值域设置为固定字符串,而后执行S320、将目标读取数据缓存到一级本地内存,作为一级缓存数据。
其中,固定字符串是指代表空数据的字符串,例如,以__EMPTY_DATA_INITIALIZED表示固定字符串。表示空数据的固定字符串在后续步骤中,可以转为空指针null。
S340、将一级缓存数据缓存到二级分布式缓存空间,作为二级缓存数据。
通过S310-S340实现了将目标读取数据写入缓存空间的步骤,这些步骤可以作为一个子程序,以chahe2Level表示将目标读取数据写入缓存空间的子程序,当主程序需要时,可以调用名称为chahe2Level的子程序。
可选地,与将目标读取数据写入二级分布式缓存空间,并写入一级本地内存相对应,从缓存空间中读取数据分别从一级本地内存和二级分布式缓存空间读取。具体地,图4为本发明实施例三提供的一种从缓存空间中读取数据的流程示意图。参见图4,在上述各技术方案的基础上,可选地,执行在缓存空间中查询并读取目标读取数据的操作包括以下步骤:
S410、从一级本地内存查询目标读取数据。
S420、判断是否从一级本地内存中查询到目标读取数据。
若从一级本地内存中查询到目标读取数据,则执行S430、返回目标读取数据。
否则,执行S440、从二级分布式缓存空间查询目标读取数据。
S450、判断是否从二级分布式缓存空间查询并读取目标读取数据。
若从二级分布式缓存空间查询并读取目标读取数据,则执行S460、将目标读取数据存到一级本地内存,而后返回目标读取数据。
否则,执行S470、返回空指针null。
通过S410-S470实现了从缓存空间中读取数据的步骤,这些步骤可以作为一个子程序,以getCache2Level表示从缓存空间中读取数据的子程序,当主程序需要时,可以调用名称为getCache2Level的子程序。
实施例四
图5为本发明实施例五提供的一种数据缓存方法的流程示意图。参见图5,在上述各实施例的基础上,可选地,在有进程产生数据读取需求时,数据缓存方法包括以下步骤:
S510、调用生成缓存键的子程序,例如,调用名称为generateCacheKey的子程序。
S520、判断缓存失效时间是否未设置或者缓存失效时间是否小于最小缓存刷新时间间隔。
若是,则执行S530、将缓存失效时间重置为最小缓存刷新时间间隔的2倍。
然后执行S540、申请获取目标读取数据的互斥锁。
否则,直接执行S540、申请获取目标读取数据的互斥锁。
S550、判断互斥锁是否获取成功。
若是,则执行S560、从非缓存空间的数据源读取目标读取数据。
S570、调用缓存刷新的子程序,例如,调用名称为cache2Level的子程序。
S580、判断互斥锁的失效时间是否小于最小缓存刷新时间间隔。
若是,则执行S590、将互斥锁的失效时间更新为最小缓存刷新时间间隔。
然后执行S5A0、返回目标读取数据。
否则,直接执行S5A0、返回目标读取数据。
若互斥锁获取失败,则执行S5B0、调用查询缓存的子程序,例如,调用名称为getCache2Level的子程序。
S5C0、判断两级缓存获取到的数据是否为空字符串。
若是,则执行S5D0、返回空指针null。
否则,执行S5E0、判断两级缓存获取到的数据是否需要重新缓存。
其中,当满足如下条件时,需要重新缓存:
(1)二级分布式缓存数据未初始化或失效时,等待数据初始化完成。示例性地,定义变量waitUntilCached表示二级分布式缓存数据,若变量waitUntilCached未初始化或失效时,判断是否等待数据初始化完成,若变量值为false,则无需等待数据初始化完成;若变量值为true,则需要等待数据初始化完成。
(2)从两级缓存获取到的数据为空指针null。
(3)重试次数大于0。
当且仅当同时满足以上三个条件时,需要重新缓存,从S510开始重新执行。
否则,执行S5A0、返回目标读取数据。即返回从两级缓存获取到的数据。
本实施例通过S510-S5E0,实现了数据缓存,并且由上述步骤可以看出,一个进程在进行目标读取数据的刷新或读取操作时,其他进程可以直接从缓存空间中查询和读取相同的目标读取数据。以及,在一个进程在进行目标读取数据的刷新操作时,其他进程无法执行目标数据的刷新操作。因此,与现有技术相比,本发明实施例无需采用多个进程多次从后台系统或者数据库中查询对应的数据,提升了系统的并发能力和响应速度,有利于避免缓存击穿。
实施例五
图6为本发明实施例五提供的一种数据缓存装置的结构示意图。该数据缓存装置可以由硬件和/或软件实现,一般可以集成在电子设备中,如支持终端数据访问服务的服务器等。参见图6,数据缓存装置包括:
互斥锁获取模块610,用于在第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,互斥锁的初始失效时间为第一预设时间;
缓存刷新模块620,用于在第一进程获取互斥锁成功时,将目标读取数据写入缓存空间,以执行目标读取数据的刷新操作,且完成刷新操作后将互斥锁的失效时间更新为第二预设时间;其中,第二预设时间大于第一预设时间;
缓存查询模块630,用于在第一进程获取互斥锁失败时,执行在缓存空间中查询并读取目标读取数据的操作;
互斥锁释放模块640,用于在到达互斥锁的失效时间后,释放互斥锁。
本发明实施例所提供的数据缓存装置可执行本发明任意实施例所提供的数据缓存方法,具备执行方法相应的功能模块和有益效果。
在上述各技术方案的基础上,可选地,缓存查询模块还用于在第二进程获取目标读取数据的互斥锁失败时,执行在缓存空间中查询并读取目标读取数据的操作。
在上述各技术方案的基础上,可选地,第二预设时间为预设的最小缓存刷新时间间隔。
在上述各技术方案的基础上,可选地,数据缓存装置还包括缓存失效时间重置模块,用于在目标读取数据的缓存失效时间未设置或缓存失效时间小于预设的最小缓存刷新时间间隔时,将缓存失效时间重置为第三预设时间;其中,第三预设时间大于最小缓存刷新时间间隔。
在上述各技术方案的基础上,可选地,第三预设时间为最小缓存刷新时间间隔的两倍。
在上述各技术方案的基础上,可选地,缓存刷新模块还用于第一进程从非缓存空间的数据源读取目标读取数据,并写入缓存空间。
在上述各技术方案的基础上,可选地,数据缓存装置还包括:缓存键产生模块,用于第一进程在产生数据读取需求时,产生目标读取数据的缓存键,并根据缓存键申请获取目标读取数据的互斥锁;其中,缓存系统存储有至少一个具有缓存键的缓存数据。
在上述各技术方案的基础上,可选地,缓存键产生模块还用于在数据读取需求中的缓存键表达式为非空值时,根据对象导航图语言表达式生成缓存键;在数据读取需求中的缓存键表达式为空值,且缓存键方法名称描述为非空值时,调用缓存键生成方法生成缓存键;在数据读取需求中的缓存键表达式为空值,且缓存键方法名称描述为空值时,通过方法签名拼接参数序列化后生成的通用唯一识别码作为缓存键。
在上述各技术方案的基础上,可选地,缓存刷新模块还用于将目标读取数据写入二级分布式缓存空间,并写入一级本地内存。
相应的,缓存查询模块还用于从一级本地内存查询目标读取数据;若从一级本地内存中查询到目标读取数据,则返回目标读取数据;否则,从二级分布式缓存空间查询目标读取数据;若从二级分布式缓存空间查询并读取目标读取数据,将目标读取数据存到一级本地内存,而后返回目标读取数据。
在上述各技术方案的基础上,可选地,缓存刷新模块还用于在获取到目标读取数据的值域为非空值时,将目标读取数据缓存到一级本地内存,作为一级缓存数据;在获取到目标读取数据为空指针时,将目标读取数据的值域设置为固定字符串,而后将固定字符串缓存到一级本地内存,作为一级缓存数据;将一级缓存数据缓存到二级分布式缓存空间,作为二级缓存数据。
实施例六
图7为本发明实施例六提供的一种服务器的结构示意图。参见图7,该服务器包括处理器710、存储器720、输入装置730和输出装置740;服务器中处理器710的数量可以是一个或多个,图7中以一个处理器710为例;服务器中的处理器710、存储器720、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线连接为例。
存储器720作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据缓存方法对应的程序指令/模块(例如,互斥锁获取模块、缓存刷新模块、缓存查询模块和互斥锁失效时间重置模块)。处理器710通过运行存储在存储器720中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述的数据缓存方法。
存储器720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器720可进一步包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置730可用于接收输入的数字或字符信息,以及产生与服务器的功能控制有关的键信号输入。输出装置740可包括显示屏等显示设备。
实施例七
本发明实施例七还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据缓存方法,该方法包括:
第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,互斥锁的初始失效时间为第一预设时间;
若第一进程获取互斥锁成功,则将目标读取数据写入缓存空间,以执行目标读取数据的刷新操作,且完成刷新操作后将互斥锁的失效时间更新为第二预设时间;其中,第二预设时间大于第一预设时间;
若第一进程获取互斥锁失败,则执行在缓存空间中查询并读取目标读取数据的操作;
在到达互斥锁的失效时间后,释放互斥锁。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据缓存方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述数据缓存装置的实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (13)

1.一种数据缓存方法,其特征在于,包括:
第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,所述互斥锁的初始失效时间为第一预设时间;
若所述第一进程获取所述互斥锁成功,则将所述目标读取数据写入缓存空间,以执行所述目标读取数据的刷新操作,且完成刷新操作后将所述互斥锁的失效时间更新为第二预设时间;其中,所述第二预设时间大于所述第一预设时间;
若所述第一进程获取所述互斥锁失败,则执行在所述缓存空间中查询并读取所述目标读取数据的操作;
在到达所述互斥锁的失效时间后,释放所述互斥锁。
2.根据权利要求1所述的数据缓存方法,其特征在于,在所述第一进程对所述目标读取数据进行刷新或读取的过程中,还包括:
第二进程获取所述目标读取数据的所述互斥锁失败时,执行在所述缓存空间中查询并读取所述目标读取数据的操作。
3.根据权利要求1所述的数据缓存方法,其特征在于,所述第二预设时间为预设的最小缓存刷新时间间隔。
4.根据权利要求1所述的数据缓存方法,其特征在于,在申请获取所述目标读取数据的互斥锁之前,还包括:
若所述目标读取数据的缓存失效时间未设置或所述缓存失效时间小于预设的最小缓存刷新时间间隔,则将所述缓存失效时间重置为第三预设时间;其中,所述第三预设时间大于所述最小缓存刷新时间间隔。
5.根据权利要求4所述的数据缓存方法,其特征在于,所述第三预设时间为所述最小缓存刷新时间间隔的两倍。
6.根据权利要求1所述的数据缓存方法,其特征在于,所述第一进程将所述目标读取数据写入缓存空间包括:
所述第一进程从非缓存空间的数据源读取目标读取数据,并写入所述缓存空间。
7.根据权利要求1所述的数据缓存方法,其特征在于,所述第一进程在产生数据读取需求时,申请获取所述目标读取数据的互斥锁包括:
所述第一进程在产生数据读取需求时,产生所述目标读取数据的缓存键,并根据所述缓存键申请获取所述目标读取数据的互斥锁;其中,缓存系统存储有至少一个具有缓存键的缓存数据。
8.根据权利要求7所述的数据缓存方法,其特征在于,产生所述目标读取数据的缓存键包括:
若所述数据读取需求中的缓存键表达式为非空值,则根据对象导航图语言表达式生成所述缓存键;
若所述数据读取需求中的缓存键表达式为空值,且缓存键方法名称描述为非空值,则调用缓存键生成方法生成所述缓存键;
若所述数据读取需求中的缓存键表达式为空值,且所述缓存键方法名称描述为空值,则通过方法签名拼接参数序列化后生成的通用唯一识别码作为所述缓存键。
9.根据权利要求1所述的数据缓存方法,其特征在于:
将所述目标读取数据写入缓存空间包括:将所述目标读取数据写入二级分布式缓存空间,并写入一级本地内存;
相应的,执行在所述缓存空间中查询并读取所述目标读取数据的操作包括:
从所述一级本地内存查询所述目标读取数据;
若从所述一级本地内存中查询到所述目标读取数据,则返回所述目标读取数据;
否则,从所述二级分布式缓存空间查询所述目标读取数据;
若从所述二级分布式缓存空间查询并读取所述目标读取数据,将所述目标读取数据存到所述一级本地内存,而后返回所述目标读取数据。
10.根据权利要求9所述的数据缓存方法,其特征在于,所述将所述目标读取数据写入二级分布式缓存空间,并写入一级本地内存,包括:
若获取到所述目标读取数据的值域为非空值,则将所述目标读取数据缓存到所述一级本地内存,作为一级缓存数据;
若获取到所述目标读取数据为空指针,则将所述目标读取数据的值域设置为固定字符串,而后将所述固定字符串缓存到所述一级本地内存,作为一级缓存数据;
将所述一级缓存数据缓存到二级分布式缓存空间,作为二级缓存数据。
11.一种数据缓存装置,其特征在于,包括:
互斥锁获取模块,用于在第一进程在产生数据读取需求时,申请获取目标读取数据的互斥锁;其中,所述互斥锁的初始失效时间为第一预设时间;
缓存刷新模块,用于在所述第一进程获取所述互斥锁成功时,将所述目标读取数据写入缓存空间,以执行所述目标读取数据的刷新操作,且完成刷新操作后将所述互斥锁的失效时间更新为第二预设时间;其中,所述第二预设时间大于所述第一预设时间;
缓存查询模块,用于在所述第一进程获取所述互斥锁失败时,执行在所述缓存空间中查询并读取所述目标读取数据的操作;
互斥锁释放模块,用于在到达所述互斥锁的失效时间后,释放所述互斥锁。
12.一种服务器,其特征在于,所述服务器包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的数据缓存方法。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-10中任一所述的数据缓存方法。
CN202110879427.3A 2021-08-02 2021-08-02 数据缓存方法、装置、服务器和计算机可读存储介质 Pending CN113590661A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110879427.3A CN113590661A (zh) 2021-08-02 2021-08-02 数据缓存方法、装置、服务器和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110879427.3A CN113590661A (zh) 2021-08-02 2021-08-02 数据缓存方法、装置、服务器和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN113590661A true CN113590661A (zh) 2021-11-02

Family

ID=78253536

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110879427.3A Pending CN113590661A (zh) 2021-08-02 2021-08-02 数据缓存方法、装置、服务器和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN113590661A (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110909025A (zh) * 2018-09-17 2020-03-24 深圳市优必选科技有限公司 数据库的查询方法、查询装置及终端
CN112035496A (zh) * 2020-08-28 2020-12-04 平安科技(深圳)有限公司 一种数据处理方法、相关设备及计算机可读存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110909025A (zh) * 2018-09-17 2020-03-24 深圳市优必选科技有限公司 数据库的查询方法、查询装置及终端
CN112035496A (zh) * 2020-08-28 2020-12-04 平安科技(深圳)有限公司 一种数据处理方法、相关设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN107943594B (zh) 数据获取方法和装置
CN111464615B (zh) 请求处理方法、装置、服务器及存储介质
CN109491928B (zh) 缓存控制方法、装置、终端及存储介质
CN110909025A (zh) 数据库的查询方法、查询装置及终端
CN110109958B (zh) 缓存处理方法、装置、设备及计算机可读存储介质
US11250395B2 (en) Blockchain-based transaction processing methods and apparatuses and electronic devices
CN109358874B (zh) 业务规则更新方法、装置、计算机设备和存储介质
CN110427386B (zh) 数据处理方法、装置及计算机存储介质
CN111475519B (zh) 数据缓存方法及装置
US11018860B2 (en) Highly available and reliable secret distribution infrastructure
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN109614271B (zh) 多个集群数据一致性的控制方法、装置、设备及存储介质
CN113010549A (zh) 基于异地多活系统的数据处理方法、相关设备及存储介质
CN110866011B (zh) 数据表同步方法、装置、计算机设备和存储介质
CN114780615A (zh) 错误码管理方法及其装置
US9569519B2 (en) Client-side directed commands to a loosely coupled database
CN112866339B (zh) 数据传输方法、装置、计算机设备和存储介质
CN112783866B (zh) 数据读取方法、装置、计算机设备和存储介质
US10467143B1 (en) Event-driven cache
CN113590661A (zh) 数据缓存方法、装置、服务器和计算机可读存储介质
CN115587119A (zh) 一种数据库查询方法、装置、电子设备及存储介质
CN114637969A (zh) 目标对象的鉴权方法及装置
CN113157722A (zh) 一种数据处理方法、装置、服务器、系统及存储介质
CN108694209B (zh) 基于对象的分布式索引方法和客户端
CN113760465A (zh) 一种事务执行方法、装置、服务器、设备和存储介质

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