CN111752977B - 一种数据读取请求、数据写入请求的处理方法及装置 - Google Patents

一种数据读取请求、数据写入请求的处理方法及装置 Download PDF

Info

Publication number
CN111752977B
CN111752977B CN202010551153.0A CN202010551153A CN111752977B CN 111752977 B CN111752977 B CN 111752977B CN 202010551153 A CN202010551153 A CN 202010551153A CN 111752977 B CN111752977 B CN 111752977B
Authority
CN
China
Prior art keywords
target data
cache
data
version number
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010551153.0A
Other languages
English (en)
Other versions
CN111752977A (zh
Inventor
王海彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Douyin Vision Co Ltd
Original Assignee
Douyin Vision 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 Douyin Vision Co Ltd filed Critical Douyin Vision Co Ltd
Priority to CN202010551153.0A priority Critical patent/CN111752977B/zh
Publication of CN111752977A publication Critical patent/CN111752977A/zh
Application granted granted Critical
Publication of CN111752977B publication Critical patent/CN111752977B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/22Indexing; Data structures therefor; Storage structures
    • 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

Landscapes

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

Abstract

本公开提供了一种数据读取请求、数据写入请求的处理方法及装置,其中,数据读取请求的处理方法包括响应基于目标对象的数据读取请求,若缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于无效状态,在持久化存储器中读取目标对象对应的第二目标数据,将第二目标数据用第一目标数据的第一版本号进行标记,此时,若缓存中存在的与第二目标数据匹配的第三目标数据的版本号为第一版本号,则将第三目标数据替换成第二目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以使缓存和持久化存储器中存储的数据保持一致。

Description

一种数据读取请求、数据写入请求的处理方法及装置
技术领域
本公开涉及数据处理技术领域,具体而言,涉及一种数据读取请求、数据写入请求的处理方法及装置。
背景技术
在高并发的数据读写业务中,为了提升数据存储***的性能,一般在业务流程中引入缓存,以分担持久化存储器的性能压力。这里,缓存常见的使用场景包括读写场景:当读取数据时,先从缓存中查找所需数据,若有则直接从缓存中读取,若无则查询持久化存储器,并将查询到的数据写入缓存中;当写入数据时,先将待写入的数据写入持久化存储器中进行存储,之后删除缓存中的无效数据或者将最新数据写入缓存中。
但是,在高并发的数据读写下,缓存中容易存储无效数据,从而出现缓存和持久化存储器中存储的数据不一致的情况。例如,在高并发场景下,读请求从持久化存储器中读取用户昵称为A,此时线程阻塞,暂停执行读请求,而写请求进行持久化存储器的更新,将用户昵称从A改为B,并且删除了缓存中的用户昵称A;此时,读请求恢复执行,将读取到的用户昵称A写入到缓存中;这样,就会造成缓存中存储的是旧的用户昵称A,而持久化存储器中存储的是更新的用户昵称B,此时缓存中的用户昵称A即为无效数据。
因此,如何使缓存和持久化存储器中存储的数据保持一致是目前亟待解决的技术问题。
发明内容
本公开实施例至少提供一种数据读取请求、数据写入请求的处理方法及装置,可以使缓存和持久化存储器中存储的数据保持一致。
第一方面,本公开实施例提供了一种数据读取请求的处理方法,所述处理方法包括:
响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存。
一种可选的实施方式中,在所述判断所述第三目标数据的版本号是否为所述第一版本号之后,所述处理方法还包括:
若不是所述第一版本号,则拒绝将所述第二目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
一种可选的实施方式中,在所述将所述第三目标数据替换成所述第二目标数据,并写入所述缓存之后,所述处理方法还包括:
将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
一种可选的实施方式中,在所述判断缓存中是否存在与所述目标对象对应的第一目标数据之后,所述处理方法还包括:
若不存在所述第一目标数据,在所述持久化存储器中读取所述第二目标数据,并将所述第二目标数据用第二版本号进行标记;
基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
若存在所述第三目标数据,则拒绝将所述第二目标数据写入所述缓存。
一种可选的实施方式中,在所述判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据之后,所述处理方法还包括:
若不存在所述第三目标数据,则将所述第二目标数据写入所述缓存,并将写入所述缓存的所述第二目标数据的所述第二版本号更新成第四版本号。
一种可选的实施方式中,在所述判断缓存中是否存在与所述目标对象对应的第一目标数据之后,所述处理方法还包括:
若存在所述第一目标数据,且所述第一目标数据处于有效状态,在所述缓存中读取所述第一目标数据。
第二方面,本公开实施例提供了一种数据写入请求的处理方法,所述处理方法包括:
响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
一种可选的实施方式中,在所述判断所述第三目标数据的版本号是否为所述第一版本号之后,所述处理方法还包括:
若不是所述第一版本号,则拒绝将所述第一目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
一种可选的实施方式中,在所述将所述第三目标数据替换成所述第一目标数据,并写入所述缓存之后,所述处理方法还包括:
将所述缓存中所述第一目标数据的所述第一版本号更新成第三版本号。
一种可选的实施方式中,在所述判断缓存中是否存在与所述数据写入请求中的第一目标数据匹配的第二目标数据之后,所述处理方法还包括:
若不存在所述第二目标数据,则将所述第一目标数据的版本号标记为第二版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
若不存在所述第三目标数据,将所述第一目标数据写入所述缓存,并将写入所述缓存中的所述第一目标数据的所述第二版本号更新成第四版本号。
一种可选的实施方式中,在所述判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据之后,所述处理方法还包括:
若存在所述第三目标数据,拒绝将所述第一目标数据写入所述缓存。
第三方面,一种数据读取请求的处理装置,所述处理装置包括:
第一判断模块,用于响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
标记模块,用于若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
第二判断模块,用于基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
第一写入模块,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存。
一种可选的实施方式中,所述第一写入模块包括:
设置单元,用于若不是所述第一版本号,则拒绝将所述第二目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
一种可选的实施方式中,所述第一写入模块还包括:
更新单元,用于将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
一种可选的实施方式中,所述标记模块,还用于若不存在所述第一目标数据,在所述持久化存储器中读取所述第二目标数据,并将所述第二目标数据用第二版本号进行标记;
所述第二判断模块,用于基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
所述第一写入模块,还用于若存在所述第三目标数据,则拒绝将所述第二目标数据写入所述缓存。
一种可选的实施方式中,所述第一写入模块还用于:
若不存在所述第三目标数据,则将所述第二目标数据写入所述缓存,并将写入所述缓存的所述第二目标数据的所述第二版本号更新成第四版本号。
一种可选的实施方式中,所述处理装置还包括:
第二写入模块,用于若存在所述第一目标数据,且所述第一目标数据处于有效状态,在所述缓存中读取所述第一目标数据。
第四方面,一种数据读取写入的处理装置,所述处理装置包括:
第一判断模块,用于响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
第一写入模块,用于若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
第二判断模块,用于基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
第二写入模块,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
一种可选的实施方式中,所述第二写入模块包括:
设置单元,用于若不是所述第一版本号,则拒绝将所述第一目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
一种可选的实施方式中,所述第二写入模块还包括:
更新单元,用于将所述缓存中所述第一目标数据的所述第一版本号更新成第三版本号。
一种可选的实施方式中,所述第一写入模块还用于,若不存在所述第二目标数据,则将所述第一目标数据的版本号标记为第二版本号;
所述第二判断模块,还用于基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
所述第二写入模块,还用于若不存在所述第三目标数据,将所述第一目标数据写入所述缓存,并将写入所述缓存中的所述第一目标数据的所述第二版本号更新成第四版本号。
一种可选的实施方式中,所述第二写入模块还用于:
若存在所述第三目标数据,拒绝将所述第一目标数据写入所述缓存。
第五方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,和/或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
第六方面,本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤,和/或执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
本公开实施例提供的数据读取请求、数据写入请求的处理方法及装置,通过缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,与现有技术在高并发的数据读写下,缓存中容易存储无效数据相比,可以避免使缓存中存储脏数据,可以使缓存和持久化存储器中存储的数据保持一致,以便可以利用缓存来提升数据读取或写入的效率。
进一步,本公开实施例提供的数据读取请求、数据写入请求的处理方法及装置,通过缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号不同时,拒绝该数据写入缓存,与现有技术在高并发的数据读写下,缓存中容易存储无效数据相比,可以避免使缓存中存储脏数据,可以使缓存和持久化存储器中存储的数据保持一致,以便可以利用缓存来提升数据读取或写入的效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种数据读取请求的处理方法的流程图;
图2示出了具体实施例中数据读取请求的处理方法的流程图;
图3示出了本公开实施例所提供的一种数据写入请求的处理方法的流程图;
图4示出了具体实施例中数据写入请求的处理方法的流程图;
图5示出了本公开实施例所提供的一种数据读取请求的处理装置的示意图之一;
图6示出了本公开实施例所提供的数据读取请求的处理装置中,第一写入模块的具体示意图;
图7示出了本公开实施例所提供的一种数据读取请求的处理装置的示意图之二;
图8示出了本公开实施例所提供的一种数据写入请求的处理装置的示意图;
图9示出了本公开实施例所提供的数据写入请求的处理装置中,第二写入模块的具体示意图;
图10示出了本公开实施例所提供的一种计算机设备的示意图。
图示说明:500-数据读取请求的处理装置;510-第一判断模块;520-标记模块;530-第二判断模块;540-第一写入模块;541-设置单元;542-更新单元;550-第二写入模块;800-数据写入请求的处理装置;810-第一判断模块;820-第一写入模块;830-第二判断模块;840-第二写入模块;841-设置单元;842-更新单元;1000-计算机设备;1100-处理器;1200-存储器;1210-内存;1220外部存储器;1300-总线。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,在高并发的数据读写业务中,为了提升数据存储***的性能,一般在业务流程中引入缓存,以分担持久化存储器的性能压力。但是,在高并发的数据读写下,缓存中容易存储无效数据,从而出现缓存和持久化存储器中存储的数据不一致的情况。例如,在高并发场景下,读请求从持久化存储器中读取用户昵称为A,此时线程阻塞,暂停执行读请求,而写请求进行持久化存储器的更新,将用户昵称从A改为B,并且删除了缓存中的用户昵称A;此时,读请求恢复执行,将读取到的用户昵称A写入到缓存中;这样,就会造成缓存中存储的是旧的用户昵称A,而持久化存储器中存储的是更新的用户昵称B,此时缓存中的用户昵称A即为无效数据。
对于上述出现的缓存和持久化存储器中存储的数据不一致的情况,现有技术中通常采用二种方式进行处理,方式一:通过缩短缓存的有效时间,来达到最终一致性;方式二:针对数据写入请求,延时删除缓存中的数据。对于方式一,在高并发场景下,缩短缓存有效时间,会导致持久化存储的读压力上升;对于方式二,延时删除缓存中的数据,会造成缓存存储的数据较多,降低处理数据读写请求的效率。
基于上述研究,本公开提供了一种数据读取请求、数据写入请求的处理方法及装置,其中,数据读取请求的处理方法包括响应基于目标对象的数据读取请求,若缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于无效状态,在持久化存储器中读取目标对象对应的第二目标数据,将第二目标数据用第一目标数据的第一版本号进行标记,此时,若缓存中存在的与第二目标数据匹配的第三目标数据的版本号为第一版本号,则将第三目标数据替换成第二目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以在使缓存和持久化存储器中存储的数据保持一致的同时,可以利用缓存来提升数据读取或写入的效率。
需要说明的是,缓存可以为单机缓存,如服务器内存,缓存也可以为集群缓存,如redis缓存;可持久化存储器可以为磁盘,可持久化存储器也可以为数据库(DataBase,DB),如mysql数据库。
本公开阐述的方案,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种数据读取请求的处理方法进行详细介绍,本公开实施例所提供的数据读取请求的处理方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无线电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该数据读取请求的处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为计算机设备为例对本公开实施例提供的数据读取请求的处理方法加以说明。
实施例一
参见图1所示,为本公开实施例提供的一种数据读取请求的处理方法的流程图,所述方法包括步骤S101~S104,其中:
S101:响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据。
缓存和持久化存储器中存储的数据均是以键值对的形式进行存储的,“键”即目标对象,“值”即目标对象对应的目标数据,比如,目标对象为用户A昵称,目标数据为用户A的昵称a。在接收到数据读取请求时,可以从数据读取请求中解析出目标对象,进而,根据目标对象,判断缓存中是否存在与目标对象对应的第一目标数据。
在该步骤中,在接收到针对目标对象的数据读取请求后,先判断缓存中是否存在请求读取的第一目标数据,通常情况下,在缓存中存在第一目标数据时,直接从缓存中读取第一目标数据,完成对该数据读取请求的处理;在缓存中不存在第一目标数据时,需要从持久化存储器中读取目标对象对应的第二目标数据,并在读取后,将读取到的第二目标数据写入缓存中,以便下次针对第二目标数据的读取请求时,可以从缓存中直接读取到第二目标数据,无需从持久化存储器中读取第二目标数据,可利用缓存来提升数据读取效率和数据存储***的性能。
进一步地,在所述判断缓存中是否存在与所述目标对象对应的第一目标数据之后,存在两种情况:
情况一:缓存中存在与目标对象对应的第一目标数据,但第一目标数据的状态分为两种,即有效状态和无效状态,当第一目标数据处于有效状态,则第一目标数据可用,即可以从缓存中直接读取第一目标数据;当第一目标数据处于无效状态,则第一目标数据不可用,需要从持久化存储器中读取数据。
这里,缓存中的数据除了具有版本号之外,还具有状态,具体地,可以将数据的一个字段用于显示状态,即该字段为状态位。对于处于有效状态的数据,可以直接使用,对于处于无效状态的数据,说明该数据不可信,不能被使用。下面对第一目标数据的有效状态和无效状态的情况分别展开说明:
状态一:第一目标数据处于有效状态;
若缓存中是存在与所述目标对象对应的第一目标数据,且所述第一目标数据处于有效状态,则在所述缓存中读取所述第一目标数据。
在该步骤中,当接收到数据读取请求时,若确定出缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于有效状态,说明缓存中的第一目标数据可用,可以从缓存中直接读取第一目标数据,完成对该数据读取请求的处理。
状态二:第一目标数据处于无效状态;
S102:若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号。
在该步骤中,当接收到数据读取请求时,若确定出缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于无效状态,说明缓存中的第一目标数据不可用,即缓存中的第一目标数据无效,需要从持久化存储器中读取目标对象对应的第二目标数据,并将读取到的第二目标数据用缓存中第一目标数据的第一版本号进行标记。即,将从持久化存储器中读取到的第二目标数据的版本号,设置为与当前缓存中存储的第一目标数据的版本号相同的版本号。这样,在判断是否可以将读取到的第二目标数据写入缓存时,可以通过版本号是否发生变化来判断,具体地,判断从持久化存储器读取第二目标数据之前,与从持久化存储器中读取到第二目标数据之间的一段时间内,与数据读取请求匹配的数据是否发生更新,若没有更新,可以直接将第二目标数据写入缓存,若没有发更新,拒绝将第二目标数据写入缓存。
需要说明的是,无论是缓存还是持久化存储器中的数据,均是以键值对(key-value)的形式存储数据的,例如,用户A的昵称a,用户A的昵称为“键”,a为“值”。对于本公开,缓存中的第一目标数据、第三目标数据,以及持久化存储器中的第二目标数据为同一“键”对应的数据,但第一目标数据、第二目标数据、第三目标数据的“值”可能不同,相同“键”不同“值”对应的数据的版本号可能不同。
这里,本公开缓存中的数据都具有版本号和状态信息,在接收到数据读取请求时,获取缓存中与目标对象对应的第一目标数据的状态信息和版本号。其中,版本号可以用数字进行表示,这样,在从持久化存储器中读取到第二目标数据,可以用第一目标数据的第一版本号对第二目标数据进行标记,即,标记出当前缓存中数据的版本号。
S103:基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据。
在该步骤中,在从持久化存储器中读取到与目标对象对应的第二目标数据之后,再次判断缓存中是否存在与第二目标数据匹配的第三目标数据,即判断是否存在一个与第二目标数据的目标对象相对应的第三目标数据,第三目标数据和第二目标数据的“键”均为目标对象。这里,第三目标数据可能与第一目标数据相同,第三目标数据也可能与第一目标数据不同,若第三目标数据与第一目标数据相同,说明在持久化存储器读取到第二目标数据,与第二目标数据即将写入缓存的这段时间内,缓存没有针对第一目标数据的更新;若第三目标数据与第一目标数据不同,说明缓存在读取到第二目标数据,与即将第二目标数据写入缓存的这段时间内,缓存发生了针对第一目标数据的更新。
这里,可以通过数据的版本号来判断数据是否发生更新,若现在缓存中第三目标数据的版本号与之前缓存中的第一目标数据的版本号不一致,说明缓存发生更新。在实际对数据读取请求处理时,将从持久化存储器中读取到的第二目标数据的版本号设置为之前缓存中第一目标数据的第一版本号,这样,通过判断第三目标数据的版本号是否为第一版本号,就可以判断出前后时间内,缓存是否发生更新。
S104:若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存。
在该步骤中,在从持久化存储器中读取到第二目标数据之后,需要将第二目标数据写入缓存中,此时,需要再次判断缓存中是否存在与第二目标数据匹配的第三目标数据。若存在,进一步地,判断第三目标数据的版本号是否为第一版本号。
若第三目标数据的版本号是第一版本号,说明在持久化存储器读取到第二目标数据、与第二目标数据即将写入缓存的这段时间内,缓存没有针对第一目标数据的更新,即,要写入的第二目标数据的版本号与要进行修改的第三目标数据的版本号一致。因此,可以将第二目标数据替换掉第三目标数据写入缓存,这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
这里,在将所述第二目标数据替换掉所述第三目标数据写入所述缓存之后,将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
在该步骤中,将第二目标数据替换掉第三目标数据写入缓存之后,说明缓存中的数据已经发生更新,通过将写入缓存中的第二目标数据的第一版本号进行更新,可以明确每次写入数据是针对哪一版本号的数据进行写入,这里,每次对版本号进行更新,可以是对当前版本号加上预设数值,预设数值优选为1,即第三版本号是由第一版本号与预设数值相加得到的。
进一步地,若第三目标数据的版本不是第一版本号,则拒绝将所述第二目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
在该步骤中,若第三目标数据的版本号不为第一版本号,说明当前缓存中的第三目标数据的版本号与之前缓存中第一目标数据的版本号不同,在持久化存储器读取到第二目标数据、与第二目标数据即将写入缓存的这段时间内,将第一目标数据更新成了第三目标数据,即,要写入的第二目标数据的版本号与要进行修改的第三目标数据的版本号不一致,要写入的第二目标数据可能是无效数据。因此,拒绝将第二目标数据写入缓存,并将缓存中的第三目标数据设为无效状态,即,不允许对第三目标数据进行操作,这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
一示例中,在高并发场景下,在接收到一个读取用户甲昵称的请求时,若判断缓存中存在用户甲昵称,但该用户甲昵称处于无效状态,则从持久化存储器中读取用户甲昵称为A,并将A的版本号设为与当前缓存中的用户甲昵称对应的版本号相同的版本号1,此时线程阻塞,暂停执行读请求。而写请求进行持久化存储器的更新,将用户甲昵称从A改为B,缓存中的用户甲昵称被修改为B,用户甲昵称B的版本号为2。此时,读请求恢复执行,在将读取到的用户甲昵称A写入缓存前,判断读取到的用户昵称A的版本号1与当前缓存中的用户甲昵称B的版本号2是否一致,1与2不同,说明缓存发生了针对用户昵称甲的更新,读取到的用户甲昵称A是旧数据,即无效数据,不能将用户甲昵称A写入缓存。这样,最终缓存和持久化存储器中存储的均为最新的用户甲昵称B,可以避免将无效数据A覆盖掉更新后的数据B的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
需要说明的是,本公开通过为缓存中的数据添加版本号和状态信息,通过判断版本号,确定是否允许数据写入缓存,通过增设状态信息,可以避免对不允许写入的数据进行重试,可以减小重试成本,而且,本公开在处理缓存与持久化存储器中数据一致性的问题时,在高并发性能要求高的场景下,也可以实现快速处理,甚至将处理时间控制在毫秒级。
情况二:缓存中不存在与目标对象对应的第一目标数据,下面对这种情况进行阐述:
步骤a1:响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据。
步骤a2:若不存在所述第一目标数据,在所述持久化存储器中读取所述第二目标数据,并将所述第二目标数据用第二版本号进行标记。
在该步骤中,当接收到数据读取请求时,若确定出缓存中不存在与目标对象对应的第一目标数据,需要从持久化存储器中读取目标对象对应的第二目标数据,并将读取到的第二目标数据用第二版本号进行标记。这里,第二版本号要不同于缓存中任何数据的版本号,比如,将第二版本号设为0,缓存中存储的任何数据的版本号不为0,这样,用第二版本号可以表征出当前缓存中没有第一目标数据。
步骤a3:基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据。
步骤a4:若存在所述第三目标数据,则拒绝将所述第二目标数据写入所述缓存。
在该步骤中,在从持久化存储器读取到第二目标数据之后,确定出当前缓存中存在与第二目标数据匹配的第三目标数据,说明在持久化存储器读取到第二目标数据、与第二目标数据即将写入缓存的这段时间内,与数据读取请求匹配的数据发生了更新,要写入的第二目标数据的版本号与当前存储的第三目标数据的版本号不一致,第二目标数据为无效数据,则拒绝将第二目标数据写入缓存。
步骤a5:若不存在所述第三目标数据,则将所述第二目标数据写入所述缓存,并将写入所述缓存的所述第二目标数据的所述第二版本号更新成第四版本号。
在该步骤中,在从持久化存储器中读取到第二目标数据之后,需要将第二目标数据写入缓存中,此时,需要再次判断缓存中是否存在与第二目标数据匹配的第三目标数据。若不存在,说明在持久化存储器读取到第二目标数据、与第二目标数据即将写入缓存的这段时间内,均没有存储与数据读取请求匹配的数据。因此,可以将第二目标数据写入缓存,并将写入缓存中的第二目标数据的所述第二版本号进行更新,第四版本号是由第二版本号与预设数值相加得到的,预设数值可以为1。这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
图2示出了具体实施例中数据读取请求的处理方法的流程图;其中,数据读取请求的处理方法包括以下步骤:
S201:响应针对用户乙的昵称读取请求,判断缓存中是否存在用户乙的昵称A,若存在,跳转至S202,若不存在,跳转至S209。
S202:若存在,判断用户乙的昵称A的状态是否为有效状态,若为有效状态,跳转至S203,若为无效状态,跳转至S204。
S203:若用户乙的昵称A处于有效状态,则从缓存中直接读取用户乙的昵称A,结束本次针对用户乙的昵称读取请求。
S204:若用户乙的昵称A处于无效状态,则从持久化存储器中读取用户乙的昵称B,并将读取到的用户乙的昵称B用缓存中用户乙的昵称A的版本号1进行标记,跳转至S205。
S205:判断缓存中是否存在与用户乙的昵称B匹配的用户乙的昵称C,跳转至S206。
S206:若存在,判断用户乙的昵称C的版本号是否为版本号1,若是,跳转至S207,若不是,跳转至S208。
S207:若是,则将用户乙的昵称B替换掉用户乙的昵称C写入缓存,将写入缓存中的用户乙的昵称B的版本号1改为版本号2,结束本次针对用户乙的昵称读取请求。
S208:若否,则拒绝将用户乙的昵称B写入缓存,并将缓存中的用户乙的昵称C设为无效状态,结束本次针对用户乙的昵称读取请求。
S209:若不存在,则从持久化存储器中读取用户乙的昵称B,并将读取到的用户乙的昵称B用版本号0进行标记,跳转至S210。
S210:判断缓存中是否存在与用户乙的昵称B匹配的用户乙的昵称C,若存在,跳转至S211,若不存在,跳转至S212。
S211:若存在,则拒绝将用户乙的昵称B写入缓存,结束本次针对用户乙的昵称读取请求。
S212:若不存在,则将用户乙的昵称B直接写入缓存,并将写入缓存中的用户乙的昵称B的版本号0改为版本号1,结束本次针对用户乙的昵称读取请求。
这里,由图2可知,只有在缓存中存储数据的版本与要写入数据的版本一致时,才允许将该数据写入缓存,其中,A、B、C均为用户乙的昵称,若A、B、C不同,则A、B、C属于不同版本的用户乙的昵称,通过上述步骤,可以使缓存和持久化存储器中存储的用户乙的昵称保持一致。
在本公开实施例中,通过响应基于目标数据的数据读取请求,若缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于无效状态,在持久化存储器中读取目标对象对应的第二目标数据,将第二目标数据用第一目标数据的第一版本号进行标记,此时,若缓存中存在的与第二目标数据匹配的第三目标数据的版本号为第一版本号,则将第三目标数据替换成第二目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以使缓存和持久化存储器中存储的数据保持一致。
实施例二
参见图3所示,为本公开实施例提供的一种数据写入请求的处理方法的流程图,所述方法包括步骤S301~S304,其中:
S301:响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据。
缓存和持久化存储器中存储的数据均是以键值对的形式进行存储的,“键”即目标对象,“值”即目标对象对应的目标数据,比如,目标对象为用户A昵称,目标数据为用户A的昵称a。在接收到数据写入请求时,可以从数据读写入请求中解析出目标对象,进而,根据目标对象,判断缓存中是否存在与该目标对象对应的第二目标数据,具体地,可以以目标对象作为“键”,在缓存中查找与目标对象关联存储的第二目标数据,这里的目标数据为“值”。
在该步骤中,在接收到数据写入请求后,通常先将请求写入的数据写入持久化存储器,之后再将请求写入的数据写入缓存中。这里,在接收到基于目标对象的数据写入请求时,解析出数据写入请求中需要写入的第一目标数据,基于目标对象,先判断缓存中是否存在与请求写入的第一目标数据匹配的第二目标数据,以便获知当前缓存中与第一目标数据匹配的数据的情况。进而,根据当前缓存的情况,确定写入持久化存储器中第一目标数据的版本号。若缓存中存在与第一目标数据匹配的第二目标数据,将第一目标数据用第一版本号进行标记,其中,第一版本号为缓存中第二目标数据的版本号;若缓存中不存在与第一目标数据匹配的第二目标数据,将第一目标数据用第二版本号进行标记,其中,第二版本号为预设版本号。
进一步地,在所述判断缓存中是否存在与所述数据写入请求中的第一目标数据匹配的第二目标数据之后,存在两种情况:
情况一:缓存中存在与数据写入请求中的第一目标数据匹配的第二目标数据,下面对这一情况进行阐述:
S302:若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号。
在该步骤中,在接收到数据写入请求时,若确定缓存中存在与数据写入请求中的第一目标数据匹配的第二目标数据,则获取第二目标数据的版本号,并将第一目标数据的版本号用第二目标数据的第一版本号进行标注,这样,要写入缓存的第一目标数据就带有当前缓存中第二目标数据的版本号,进而,根据第一版本号可以确定缓存针对第二目标数据是否发生更新。
S303:基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据。
在该步骤中,在将数据写入请求中的第一目标数据写入持久化存储器之后,再次判断缓存中是否存在与第一目标数据匹配的第三目标数据,这里,第三目标数据可能与第二目标数据相同,第三目标数据也可能与第二目标数据不同,若第三目标数据与第二目标数据相同,说明在将第一目标数据写入持久化存储器、与第一目标数据即将写入缓存的这段时间内,缓存没有针对第二目标数据的更新;若第三目标数据与第二目标数据不同,说明在将第一目标数据写入持久化存储器、与第一目标数据即将写入缓存的这段时间内,缓存发生了针对第二目标数据的更新。
这里,可以通过数据的版本来判断数据是否发生更新,若现在缓存中第三目标数据的版本号与之前缓存中的第二目标数据的版本号不一致,说明缓存发生更新,在实际对数据写入请求处理时,将写入持久化存储器中的第一目标数据的版本号设置为之前缓存中第二目标数据的第一版本号,这样,通过判断第三目标数据的版本号是否为第一版本号,就可以判断出前后时间内,缓存是否发生更新。
S304:若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
在该步骤中,在将第一目标数据写入持久化存储器之后,需要将第一目标数据写入缓存中,此时,需要再次判断缓存中是否存在与第一目标数据匹配的第三目标数据,若存在,进一步地,判断第三目标数据的版本号是否为第一版本号,若是,说明在将第一目标数据写入持久化存储器时的之前缓存,与将第一目标数据即将写入缓存时的当前缓存,针对第二目标数据没有发生更新,即,要写入的第一目标数据的版本号与要进行修改的第三目标数据的版本号一致,因此,可以将第三目标数据替换成第一目标数据写入缓存,这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
这里,在将所述第一目标数据替换掉所述第三目标数据写入所述缓存之后,将所述缓存中所述第一目标数据的所述第一版本号更新成第三版本号。
在该步骤中,将第一目标数据替换掉第三目标数据写入缓存之后,说明缓存中的数据已经发生更新,通过将写入缓存中的第一目标数据的第一版本号进行更新,可以明确每次写入数据是针对哪一版本号的数据进行写入,这里,每次对版本号进行更新,可以是对当前版本号加上预设数值,预设数值优选为1,即第三版本号是由第一版本号与预设数值相加得到的。
进一步地,判断所述第三目标数据的版本号是否为所述第一版本号之后,若不是所述第一版本号,则拒绝将所述第一目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
在该步骤中,若第三目标数据的版本号不为第一版本号,说明当前缓存中的第三目标数据的版本号与之前缓存中第二目标数据的版本号不同,在将第一目标数据写入持久化存储器、与第一目标数据即将写入缓存的这段时间内,将第二目标数据发生更新成了第三目标数据,即,要写入的第一目标数据的版本号与要进行修改的第三目标数据的版本号不一致,要写入的第一目标数据可能是无效数据。因此,拒绝将第一目标数据写入缓存,并将缓存中的第三目标数据设为无效状态,即,不允许对第三目标数据进行操作,这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
进一步地,在步骤S303所述基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据之后,还包括以下步骤:
若不存在所述第三目标数据,则拒绝将所述第一目标数据写入所述缓存。
在该步骤中,若不存在第三目标数据,说明在将第一目标数据写入持久化存储器、与第一目标数据即将写入缓存的这段时间内,将第二目标数据进行了删除,也可以说明要写入的第一目标数据可能是无效数据,因此,拒绝将第一目标数据写入缓存。
情况二:缓存中不存在与数据写入请求中的第一目标数据匹配的第二目标数据,下面对这一情况进行阐述:
步骤b1:响应基于目标数据的数据写入请求,基于所述数据写入请求中的第一目标数据和目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据。
步骤b2:若不存在所述第二目标数据,则将所述第一目标数据的版本号标记为第二版本号。
在该步骤中,当接收到数据写入请求时,若确定出缓存中不存在与数据写入请求中的第一目标数据匹配的第二目标数据,将数据写入请求中的第一目标数据用第二版本号进行标记,这里,第二版本号要不同于缓存中任何数据的版本号,比如,将第二版本号设为0,缓存中存储的任何数据的版本号不为0,这样,用第二版本号可以表征出当前缓存中没有第二目标数据。
步骤b3:基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据。
步骤b4:若不存在所述第三目标数据,将所述第一目标数据写入所述缓存,并将写入所述缓存中的所述第一目标数据的所述第二版本号更新成第四版本号。
在该步骤中,在将第一目标数据写入持久化存储器之后,需要将第一目标数据写入缓存中。此时,需要再次判断缓存中是否存在与第一目标数据匹配的第三目标数据,若不存在,说明在将第一目标数据写入持久化存储器、与第一目标数据即将写入缓存的这段时间内,,均没有存储与数据写入请求匹配的数据,因此,可以将第一目标数据写入缓存,并将写入缓存中的第一目标数据的所述第二版本号进行更新,第四版本号是由第二版本号与预设数值相加得到的,预设数值可以为1。这样,可以避免将无效数据覆盖掉更新的数据的情况发生,以此实现可持久化存储器和缓存之间数据的一致性。
步骤b5:若存在所述第三目标数据,拒绝将所述第一目标数据写入所述缓存。
在该步骤中,在将第一目标数据写入持久化存储器之后,确定出当前缓存中存在与第一目标数据匹配的第三目标数据,说明在将第一目标数据写入持久化存储器的之前缓存,与当前的缓存之间发生了更新,要写入的第一目标数据的版本号与当前存储的第三目标数据的版本号不一致,第一目标数据为无效数据,则拒绝将第一目标数据写入缓存。
图4示出了具体实施例中数据写入请求的处理方法的流程图;其中,数据写入请求的处理方法包括以下步骤:
S401:响应针对用户乙的昵称A写入请求,判断缓存中是否存在与用户乙的昵称A匹配的用户乙昵称B,若存在,跳转至S402,若不存在,跳转至S407。
S402:若存在,将用户乙的昵称A用缓存中用户乙的昵称B的版本号1进行标记,并将用户乙的昵称A写入持久化存储器,跳转至S403。
S403:判断缓存中是否存在与用户乙的昵称A匹配的用户乙的昵称C,若存在跳转至S404。
S404:若存在,判断用户乙的昵称C的版本号是否为版本号1,若是,跳转至S405,若不是,跳转至S406。
S405:若是,则将用户乙的昵称A替换掉用户乙的昵称C写入缓存,将写入缓存中的用户乙的昵称A的版本号1改为版本号2,结束本次针对用户乙的昵称读取请求。
S406:若否,则拒绝将用户乙的昵称A写入缓存,并将缓存中的用户乙的昵称C设为无效状态,结束本次针对用户乙的昵称读取请求。
S407:若不存在,则将用户乙的昵称A用版本号0进行标记,跳转至S408。
S408:判断缓存中是否存在与用户乙的昵称A匹配的用户乙的昵称C,若存在,跳转至S409不存在,跳转至S410。
S409:若存在,则拒绝将用户乙的昵称A写入缓存,结束本次针对用户乙的昵称读取请求。
S410:若不存在,则将用户乙的昵称A直接写入缓存,并将写入缓存中的用户乙的昵称A的版本号0改为版本号1,结束本次针对用户乙的昵称写入请求。
在本公开实施例中,通过响应基于目标对象的数据写入请求,若缓存中存在与数据写入请求中的第一目标数据匹配的第二目标数据,将第一目标数据的版本号用第二目标数据的第一版本号进行标记,并将第一目标数据写入持久化存储器,此时,若缓存中存在与第一目标数据匹配的第三目标数据,且第三目标数据的版本号为第一版本号,则将第三目标数据替换成第一目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以使缓存和持久化存储器中存储的数据保持一致。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与数据读取请求的处理方法对应的数据读取请求的处理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述数据读取请求的处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例三
参照图5-图7所示,图5示出了本公开实施例所提供的一种数据读取请求的处理装置500的示意图之一;图6示出了本公开实施例所提供的数据读取请求的处理装置500中,第一写入模块540的具体示意图;图7示出了本公开实施例所提供的一种数据读取请求的处理装置500的示意图之二。
如图5所示,所述数据读取请求的处理装置500包括:
第一判断模块510,用于响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
标记模块520,用于若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
第二判断模块530,用于基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
第一写入模块540,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存。
在一种可能的实施方式中,如图6所示,所述第一写入模块540包括:
设置单元541,用于若不是所述第一版本号,则拒绝将所述第二目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
在一种可能的实施方式中,如图6所示,所述第一写入模块540还包括:
更新单元542,用于将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
在一种可能的实施方式中,如图5所示,所述标记模块520,还用于若不存在所述第一目标数据,在所述持久化存储器中读取所述第二目标数据,并将所述第二目标数据用第二版本号进行标记;
所述第二判断模块530,用于基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
所述第一写入模块540,还用于若存在所述第三目标数据,则拒绝将所述第二目标数据写入所述缓存。
在一种可能的实施方式中,如图5所示,所述第一写入模块540还用于:
若不存在所述第三目标数据,则将所述第二目标数据写入所述缓存,并将写入所述缓存的所述第二目标数据的所述第二版本号更新成第四版本号。
在一种可能的实施方式中,如图7所示,所述数据读取请求的处理装置500还包括:
第二写入模块550,用于若存在所述第一目标数据,且所述第一目标数据处于有效状态,在所述缓存中读取所述第一目标数据。
在本公开的实施例中,通过响应基于目标对象的数据读取请求,若缓存中存在与目标对象对应的第一目标数据,且第一目标数据处于无效状态,在持久化存储器中读取目标对象对应的第二目标数据,将第二目标数据用第一目标数据的第一版本号进行标记,此时,若缓存中存在的与第二目标数据匹配的第三目标数据的版本号为第一版本号,则将第三目标数据替换成第二目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以使缓存和持久化存储器中存储的数据保持一致。
实施例四
参照图8、图9所示,图8示出了本公开实施例所提供的一种数据写入请求的处理装置800的示意图;图9示出了本公开实施例所提供的数据写入请求的处理装置800中,第二写入模块840的具体示意图。
如图8所示,所述数据写入请求的处理装置800包括:
第一判断模块810,用于响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
第一写入模块820,用于若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
第二判断模块830,用于基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
第二写入模块840,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
在一种可能的实施方式中,如图9所示,所述第二写入模块840包括:
设置单元841,用于若不是所述第一版本号,则拒绝将所述第一目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
在一种可能的实施方式中,如图9所示,所述第二写入模块840还包括:
更新单元842,用于将所述缓存中所述第一目标数据的所述第一版本号更新成第三版本号。
在一种可能的实施方式中,如图8所示,所述第一写入模块820还用于,若不存在所述第二目标数据,则将所述第一目标数据的版本号标记为第二版本号;
所述第二判断模块830,还用于基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
所述第二写入模块840,还用于若不存在所述第三目标数据,将所述第一目标数据写入所述缓存,并将写入所述缓存中的所述第一目标数据的所述第二版本号更新成第四版本号。
在一种可能的实施方式中,如图8所示,所述第二写入模块840还用于:
若存在所述第三目标数据,拒绝将所述第一目标数据写入所述缓存。
在本公开的实施例中,通过响应基于目标对象的数据写入请求,若缓存中存在与数据写入请求中的第一目标数据匹配的第二目标数据,将第一目标数据的版本号用第二目标数据的第一版本号进行标记,并将第一目标数据写入持久化存储器,此时,若缓存中存在与第一目标数据匹配的第三目标数据,且第三目标数据的版本号为第一版本号,则将第三目标数据替换成第一目标数据写入缓存。本公开缓存中存储的数据具有版本号,进而,在请求写入的数据的版本号与当前缓存中相应的数据的版本号相同时,才允许该数据写入缓存,这样,可以使缓存和持久化存储器中存储的数据保持一致。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
实施例五
基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图10所示,为本公开实施例提供的计算机设备1000的结构示意图,包括处理器1100、存储器1200、和总线1300。其中,存储器1200用于存储执行指令,包括内存1210和外部存储器1220;这里的内存1210也称内存储器,用于暂时存放处理器1100中的运算数据,以及与硬盘等外部存储器1220交换的数据,处理器1100通过内存1210与外部存储器1220进行数据交换,当计算机设备1000运行时,处理器1100与存储器1200之间通过总线1300通信,使得处理器1100在执行以下指令:
响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存。
这里,还可以使得处理器1100在执行以下指令:
响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
实施例六
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的数据读取请求的处理方法的步骤,和/或执行上述方法实施例中所述的数据写入请求的处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的数据读取请求、数据写入请求的处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的数据读取请求的处理方法的步骤,和/或执行上述方法实施例中所述的数据写入请求的处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存储,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (14)

1.一种数据读取请求的处理方法,其特征在于,所述处理方法包括:
响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存;将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
2.根据权利要求1所述的处理方法,其特征在于,在所述判断所述第三目标数据的版本号是否为所述第一版本号之后,所述处理方法还包括:
若不是所述第一版本号,则拒绝将所述第二目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
3.根据权利要求1所述的处理方法,其特征在于,在所述判断缓存中是否存在与所述目标对象对应的第一目标数据之后,所述处理方法还包括:
若不存在所述第一目标数据,在所述持久化存储器中读取所述第二目标数据,并将所述第二目标数据用第二版本号进行标记;
基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
若存在所述第三目标数据,则拒绝将所述第二目标数据写入所述缓存。
4.根据权利要求3所述的处理方法,其特征在于,在所述判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据之后,所述处理方法还包括:
若不存在所述第三目标数据,则将所述第二目标数据写入所述缓存,并将写入所述缓存的所述第二目标数据的所述第二版本号更新成第四版本号。
5.根据权利要求1所述的处理方法,其特征在于,在所述判断缓存中是否存在与所述目标对象对应的第一目标数据之后,所述处理方法还包括:
若存在所述第一目标数据,且所述第一目标数据处于有效状态,在所述缓存中读取所述第一目标数据。
6.一种数据写入请求的处理方法,其特征在于,所述处理方法包括:
响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
7.根据权利要求6所述的处理方法,其特征在于,在所述判断所述第三目标数据的版本号是否为所述第一版本号之后,所述处理方法还包括:
若不是所述第一版本号,则拒绝将所述第一目标数据写入所述缓存,并将所述缓存中的所述第三目标数据设为无效状态。
8.根据权利要求6所述的处理方法,其特征在于,在所述将所述第三目标数据替换成所述第一目标数据,并写入所述缓存之后,所述处理方法还包括:
将所述缓存中所述第一目标数据的所述第一版本号更新成第三版本号。
9.根据权利要求6所述的处理方法,其特征在于,在所述判断缓存中是否存在与所述第一目标数据匹配的第二目标数据之后,所述处理方法还包括:
若不存在所述第二目标数据,则将所述第一目标数据的版本号标记为第二版本号;
基于所述目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
若不存在所述第三目标数据,将所述第一目标数据写入所述缓存,并将写入所述缓存中的所述第一目标数据的所述第二版本号更新成第四版本号。
10.根据权利要求9所述的处理方法,其特征在于,在所述判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据之后,所述处理方法还包括:
若存在所述第三目标数据,拒绝将所述第一目标数据写入所述缓存。
11.一种数据读取请求的处理装置,其特征在于,所述处理装置包括:
第一判断模块,用于响应基于目标对象的数据读取请求,判断缓存中是否存在与所述目标对象对应的第一目标数据;
标记模块,用于若存在所述第一目标数据,且所述第一目标数据处于无效状态,在持久化存储器中读取所述目标对象对应的第二目标数据,将所述第二目标数据用第一版本号进行标记;其中,所述第一版本号为所述缓存中所述第一目标数据的版本号;
第二判断模块,用于基于所述目标对象,判断所述缓存中是否存在与所述第二目标数据匹配的第三目标数据;
写入模块,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,将所述第三目标数据替换成所述第二目标数据,并写入所述缓存;将写入所述缓存的所述第二目标数据的所述第一版本号更新成第三版本号。
12.一种数据写入请求的处理装置,其特征在于,所述处理装置包括:
第一判断模块,用于响应基于目标对象的数据写入请求,基于所述数据写入请求中的第一目标数据和所述目标对象,判断缓存中是否存在与所述第一目标数据匹配的第二目标数据;
第一写入模块,用于若存在所述第二目标数据,将所述第一目标数据用第一版本号进行标记,并将所述第一目标数据写入持久化存储器;其中,所述第一版本号为所述缓存中所述第二目标数据的版本号;
第二判断模块,用于基于所述第一目标数据的目标对象,判断所述缓存中是否存在与所述第一目标数据匹配的第三目标数据;
第二写入模块,用于若存在所述第三目标数据,判断所述第三目标数据的版本号是否为所述第一版本号,若是所述第一版本号,则将所述第三目标数据替换成所述第一目标数据,并写入所述缓存。
13.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至5任一所述的数据读取请求的处理方法的步骤,和/或执行如权利要求6至10任一所述的数据写入请求的处理方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至5任一所述的数据读取请求的处理方法的步骤,和/或执行如权利要求6至10任一所述的数据写入请求的处理方法的步骤。
CN202010551153.0A 2020-06-16 2020-06-16 一种数据读取请求、数据写入请求的处理方法及装置 Active CN111752977B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010551153.0A CN111752977B (zh) 2020-06-16 2020-06-16 一种数据读取请求、数据写入请求的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010551153.0A CN111752977B (zh) 2020-06-16 2020-06-16 一种数据读取请求、数据写入请求的处理方法及装置

Publications (2)

Publication Number Publication Date
CN111752977A CN111752977A (zh) 2020-10-09
CN111752977B true CN111752977B (zh) 2024-01-19

Family

ID=72675733

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010551153.0A Active CN111752977B (zh) 2020-06-16 2020-06-16 一种数据读取请求、数据写入请求的处理方法及装置

Country Status (1)

Country Link
CN (1) CN111752977B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106557278A (zh) * 2015-09-30 2017-04-05 腾讯科技(深圳)有限公司 一种缓存数据持久化的方法
CN107577775A (zh) * 2017-09-08 2018-01-12 北京奇艺世纪科技有限公司 一种读取数据方法、装置、电子设备及可读存储介质
CN109558421A (zh) * 2018-10-29 2019-04-02 中国建设银行股份有限公司 基于缓存的数据处理方法、***、装置及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106557278A (zh) * 2015-09-30 2017-04-05 腾讯科技(深圳)有限公司 一种缓存数据持久化的方法
CN107577775A (zh) * 2017-09-08 2018-01-12 北京奇艺世纪科技有限公司 一种读取数据方法、装置、电子设备及可读存储介质
CN109558421A (zh) * 2018-10-29 2019-04-02 中国建设银行股份有限公司 基于缓存的数据处理方法、***、装置及存储介质

Also Published As

Publication number Publication date
CN111752977A (zh) 2020-10-09

Similar Documents

Publication Publication Date Title
CN107273455B (zh) 区块链数据访问方法和装置
CN109076021B (zh) 数据处理的方法和装置
CN105512222A (zh) 数据查询方法及***和数据读取方法及***
CN109358874B (zh) 业务规则更新方法、装置、计算机设备和存储介质
CN109213450B (zh) 一种基于闪存阵列的关联元数据删除方法、装置及设备
CN104978278B (zh) 数据处理方法和装置
CN111752977B (zh) 一种数据读取请求、数据写入请求的处理方法及装置
CN113254470B (zh) 一种数据更改方法、装置、计算机设备及存储介质
CN111190899A (zh) 一种埋点数据处理方法、装置、服务器及存储介质
CN108228842B (zh) Docker镜像库文件存储方法、终端、设备以及存储介质
CN111752919A (zh) 一种数据写入方法、数据读取方法及装置
CN108984124B (zh) 减少写放大的方法、装置、计算机设备及存储介质
CN109542872B (zh) 数据读取方法、装置、计算机设备和存储介质
CN108804342B (zh) 对永久性存储装置写入和读取数据的方法和***
CN116233254A (zh) 业务切流方法、装置、计算机设备和存储介质
CN115712584A (zh) 数据存储方法、装置、电子设备及存储介质
CN112800123B (zh) 数据处理方法、装置、计算机设备和存储介质
CN109299067B (zh) 页面访问方法、装置和存储介质
CN110309149B (zh) 一种数据表处理方法、装置、电子设备及存储介质
CN113885801A (zh) 一种内存数据的处理方法及装置
CN113157603A (zh) 数据读取装置、方法、芯片、计算机设备及存储介质
CN111131051A (zh) 路由下发方法和装置
CN111294786B (zh) 移动终端的写卡保护方法、装置、移动终端和存储介质
US11445036B1 (en) Cluster management method and apparatus, electronic device and storage medium
CN113342275B (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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Douyin Vision Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: Tiktok vision (Beijing) Co.,Ltd.

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Tiktok vision (Beijing) Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant