CN115687402A - 一种实现缓存数据和数据库数据一致的方法 - Google Patents

一种实现缓存数据和数据库数据一致的方法 Download PDF

Info

Publication number
CN115687402A
CN115687402A CN202210653845.5A CN202210653845A CN115687402A CN 115687402 A CN115687402 A CN 115687402A CN 202210653845 A CN202210653845 A CN 202210653845A CN 115687402 A CN115687402 A CN 115687402A
Authority
CN
China
Prior art keywords
data
cache
database
memory queue
updating
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
CN202210653845.5A
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.)
Sichuan Hongmei Intelligent Technology Co Ltd
Original Assignee
Sichuan Hongmei Intelligent 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 Sichuan Hongmei Intelligent Technology Co Ltd filed Critical Sichuan Hongmei Intelligent Technology Co Ltd
Priority to CN202210653845.5A priority Critical patent/CN115687402A/zh
Publication of CN115687402A publication Critical patent/CN115687402A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种实现缓存数据和数据库数据一致的方法,初始化内存队列,并为内存队列创建监听器并启动;接收到更新请求时,把该数据的修改次数加1,加入内存队列末尾;接收到查询数据请求时,若不在更新中,则直接查询缓存,缓存中没有在查询数据库并保存数据到缓存中;若更新中,则加入内存队列末尾;监听器监听到内存队列有待处理数据时,根据请求类型执行更新数据流程或查询数据流程。本发明利用队列技术,在大量用户并发请求、同时存在更新数据和查询数据时,把并发请求转化为依次排队处理,避免了缓存数据和数据库数据不一致的情况,提高了系统的可靠性和稳定性。

Description

一种实现缓存数据和数据库数据一致的方法
技术领域
本发明涉及数据存储技术领域,具体的说,是一种实现缓存数据和数据库数据一致的方法。
背景技术
为了提高系统性能,支撑大量用户的并发访问,系统一般会使用缓存技术,业界常用redis中间件来缓存数据。使用redis缓存可以减少磁盘IO的读操作,减轻磁盘IO的压力,提高数据库的可用性和可扩展性,减轻数据库的压力,提高了系统的稳定性。
现有技术中常用的缓存的查询和更新数据库的方法有基于边缘缓存模式即Cache-Aside Pattern,具体流程如下:当用户请求查询数据时,首先查询缓存,如果缓存中有数据,则直接返回。如果缓存中没有查询到数据,则去数据库中查询,再把查询的数据放入到缓存中,最后返回。当更新数据库中的数据时,首先更新数据库数据,再删除缓存中的数据。由于缓存和数据库是两个不同的存储系统,以下场景,在查询数据和更新数据时,会出现缓存中的数据和数据库中的数据不一致的情况,造成系统数据错误,降低系统的可靠性,影响用户的正常使用:
1.删除缓存失败场景:在更新数据时,如果更新数据库成功了,但是删除缓存失败了,此时缓存中的数据和数据库中的数据不一致,用户查询数据时,总是从缓存中得到错误的数据。
2.数据库读写分离场景:数据库是读写分离架构时即修改数据是在主数据库,查询数据在从数据库,主数据库定时同步数据到从数据库。当用户A在主数据库更新完某条数据,并且删除缓存后,如果主数据库的数据还没有同步到从数据库,这时用户B查询这条数据,先查询缓存,发现已被删除,再查询从数据库,获取到旧数据,然后把旧数据写入到缓存中,从而造成缓存数据和数据库数据不一致的情况,同样用户查询数据时,总是从缓存中得到错误的数据。
3.缓存失效场景:当用户A发起请求1-更新某条数据,还没有更新完成时,用户B发起请求2-查询该条数据,如果缓存中该条数据已失效,那么请求2会直接查询到数据库中的旧数据。在这个时候,如果请求1更新数据库完成,同时已执行了删除缓存操作,然后请求2继续执行,则把旧数据再写入到缓存中。从而造成缓存数据和数据库数据不一致的情况,同样用户查询数据时,总是从缓存中得到错误的数据。
发明内容
本发明的目的在于提供一种实现缓存数据和数据库数据一致的方法,用于解决现有技术中更新数据和查询数据方法中存在缓存数据和数据库数据不一致的问题。
本发明通过下述技术方案解决上述问题:
一种实现缓存数据和数据库数据一致的方法,包括:
步骤S1、系统启动时初始化内存队列,并为内存队列创建监听器,并启动监听器;
步骤S2、当接收到更新数据请求时,使用写锁判断该数据的修改次数是否为空,若为空则初始化该数据修改次数为1,否则该数据修改次数加1,把该数据和请求类型加入内存队列末尾;当接收到查询数据请求时,采用读锁判断该数据的修改次数是否为0或空,如果是,查询缓存数据,如果缓存中没有该数据,则查询数据库,将数据返回用户同时保存数据到缓存中;否则,把数据唯一标识和请求类型加入内存队列末尾;
步骤S3、监听器监听到内存队列有待处理数据时,取出内存队列数据,并根据请求类型执行更新数据流程或查询数据流程,其中:
更新数据流程为:删除缓存数据,再更新数据库,然后使用写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型;
查询数据流程为:查询缓存数据,如果缓存中没有该数据,则查询数据库,并保存数据到缓存中,从内存队列中删除该数据唯一标识和请求类型。
本发明中,系统首先收到查询数据请求时,数据的修改次数为空,说明该数据不在更新过程中,则直接读取缓存,提高并发处理能力。
系统收到对更新数据请求时,将数据和请求类型(更新数据还是查询数据)放入内存队列的队尾,同时通过设置该数据的修改次数为1,标识该条数据的状态为更新中,当队列监听器发现队列中有数据时,按照先进先出的顺序依次处理数据,首先删除缓存数据,然后再更新数据库数据,更新数据库完成后同时设置该数据的修改次数为0,并从内存队列删除该数据。当更新完数据库时,系统收到对该数据的查询数据请求时,此时该首先判断该数据的修改次数,此时修改次数为0,于是查询缓存,由于更新过程中该缓存数据删除,因此,此时缓存中没有该数据,查询数据库,查询到更新后的数据,并将数据保存到缓存中,此时缓存和数据库中的数据是一致的。若查询数据请求先于更新数据请求,此时数据的修改次数为空,同样查询缓存,由于更新过程中该缓存数据删除,因此,此时缓存中没有该数据,查询数据库,查询到更新后的数据,并将数据保存到缓存中,此时缓存和数据库中的数据是一致的。
假如在数据更新过程中,系统收到对查询数据请求时,由于此时该数据的修改次数仍为1,则说明还在更新状态中,此时把数据唯一标识和请求类型加入内存队列末尾,同样进入内存队列,排队处理。执行完数据更新请求时,监听器取出内存队列数据,根据查询数据请求,查询缓存数据,由于更新过程首先删除缓存数据,此时缓存中没有该数据,那么此时则查询数据库,此时查询到数据库是更新后的数据,并将更新后的数据保存至缓存,数据库数据和缓存数据是一致的。
系统启动时初始化多个内存队列,并为每个内存队列分别创建一个监听器,在把数据和请求类型,或者数据唯一标识和请求类型加入内存队列末尾前,还需要根据数据的数据唯一标识采用哈希算法计算出该数据需要放入的内存队列。同一数据的查询数据请求和更新数据请求在同一内存队列,依靠先进先出的顺序执行,利用队列技术,把并发请求转化为依次排队处理,,保障了并发场景下缓存数据和数据库数据的一致性,提高了系统的可靠性和稳定性。而不同数据的请求,存于不同的内存队列,可以实现处理用户并发请求,提高处理速度和效率。
所述更新数据流程中,当删除缓存失败时或者删除缓存成功更新数据库失败时,写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型,系统直接返回步骤S2,并反馈更新数据失败。
更新数据流程中,当删除缓存失败时,不会再执行后续的步骤,缓存中仍然存在数据,数据库中仍然是更新前的数据,缓存与数据库中的数据一致。下一次执行查询数据请求时,由于该数据的修改次数已修改为0,于是查询缓存,得到的仍然是更新前的数据。当更新数据流程中,删除缓存成功,更新数据库失败时,不会再执行后续的步骤,缓存中数据为空,该数据的修改次数已修改为0,若此后遇到的是查询数据请求时,查询缓存数据,此时缓存数据为空,则去查询数据库,将从数据库查询到的数据保存至缓存,二者仍然是一致的。
更新数据流程中,当删除缓存失败或者删除缓存成功更新数据库失败时,若此后遇到数据更新请求,则正常执行。
本发明在大量用户并发请求,同时存在更新数据和查询数据时,通过排队按顺序依次处理避免了缓存数据和数据库数据不一致的情况,解决了现有技术中在删除缓存失败、数据库主从同步延迟和缓存失效的情况下导致的缓存数据和数据库数据不一致的问题。
本发明与现有技术相比,具有以下优点及有益效果:
(1)该发明利用队列技术,在大量用户并发请求、同时存在更新数据和查询数据时,把并发请求转化为依次排队处理,避免了缓存数据和数据库数据不一致的情况,提高了系统的可靠性和稳定性。
(2)本发明使用哈希算法,把每条数据都放到同一内存队列,不同数据的存放不同内存队列,提高并发处理能力,提高处理效率。
(3)本发明解决了现有技术中在删除缓存失败、数据库主从同步延迟和缓存失效的情况下导致的缓存数据和数据库数据不一致的问题。
附图说明
图1为本发明的原理框图。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例1:
结合附图1所示,一种实现缓存数据和数据库数据一致的方法,包括:
步骤S1、系统启动时初始化内存队列,并为内存队列创建监听器,并启动监听器;
步骤S2、当接收到更新数据请求时,使用写锁判断该数据的修改次数是否为空,若为空则初始化该数据修改次数为1,否则该数据修改次数加1,把该数据和请求类型加入内存队列末尾;当接收到查询数据请求时,采用读锁判断该数据的修改次数是否为0或空,如果是,查询缓存数据,如果缓存中没有该数据,则查询数据库,将数据返回用户同时保存数据到缓存中;否则,把数据唯一标识和请求类型加入内存队列末尾;
步骤S3、监听器监听到内存队列有待处理数据时,取出内存队列数据,并根据请求类型执行更新数据流程或查询数据流程,其中:
更新数据流程为:删除缓存数据,再更新数据库,然后使用写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型;
查询数据流程为:查询缓存数据,如果缓存中没有该数据,则查询数据库,并保存数据到缓存中,从内存队列中删除该数据唯一标识和请求类型。
本发明中,系统首先收到查询数据请求时,数据的修改次数为空,说明该数据不在更新过程中,则直接读取缓存,提高并发处理能力。
系统收到对更新数据请求时,将数据和请求类型(更新数据还是查询数据)放入内存队列的队尾,同时通过设置该数据的修改次数为1,标识该条数据的状态为更新中,当队列监听器发现队列中有数据时,按照先进先出的顺序依次处理数据,首先删除缓存数据,然后再更新数据库数据,更新数据库完成后同时设置该数据的修改次数为0,并从内存队列删除该数据。当更新完数据库时,系统收到对该数据的查询数据请求时,此时该首先判断该数据的修改次数,此时修改次数为0,于是查询缓存,由于更新过程中该缓存数据删除,因此,此时缓存中没有该数据,查询数据库,查询到更新后的数据,并将数据保存到缓存中,此时缓存和数据库中的数据是一致的。若查询数据请求先于更新数据请求,此时数据的修改次数为空,同样查询缓存,由于更新过程中该缓存数据删除,因此,此时缓存中没有该数据,查询数据库,查询到更新后的数据,并将数据保存到缓存中,此时缓存和数据库中的数据是一致的。
假如在数据更新过程中,系统收到对查询数据请求时,由于此时该数据的修改次数仍为1,则说明还在更新状态中,此时把数据唯一标识和请求类型加入内存队列末尾,同样进入内存队列,排队处理。执行完数据更新请求时,监听器取出内存队列数据,根据查询数据请求,查询缓存数据,由于更新过程首先删除缓存数据,此时缓存中没有该数据,那么此时则查询数据库,此时查询到数据库是更新后的数据,并将更新后的数据保存至缓存,数据库数据和缓存数据是一致的。
系统启动时初始化多个内存队列,并为每个内存队列分别创建一个监听器,在把数据和请求类型,或者数据唯一标识和请求类型加入内存队列末尾前,还需要根据数据的数据唯一标识采用哈希(hash)算法计算出该数据需要放入的内存队列。同一数据的查询数据请求和更新数据请求在同一内存队列,依靠先进先出的顺序执行,利用队列技术,把并发请求转化为依次排队处理,,保障了并发场景下缓存数据和数据库数据的一致性,提高了系统的可靠性和稳定性。而不同数据的请求,存于不同的内存队列,可以实现处理用户并发请求,提高处理速度和效率。
所述更新数据流程中,当删除缓存失败时或者删除缓存成功更新数据库失败时,写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型,系统直接返回步骤S2,并反馈更新数据失败。
更新数据流程中,当删除缓存失败时,不会再执行后续的步骤,缓存中仍然存在数据,数据库中仍然是更新前的数据,缓存与数据库中的数据一致。下一次执行查询数据请求时,由于该数据的修改次数已修改为0,于是查询缓存,得到的仍然是更新前的数据。当更新数据流程中,删除缓存成功,更新数据库失败时,不会再执行后续的步骤,缓存中数据为空,该数据的修改次数已修改为0,若此后遇到的是查询数据请求时,查询缓存数据,此时缓存数据为空,则去查询数据库,将从数据库查询到的数据保存至缓存,二者仍然是一致的。
更新数据流程中,当删除缓存失败或者删除缓存成功更新数据库失败时,若此后遇到数据更新请求,则正常执行。
本发明在大量用户并发请求,同时存在更新数据和查询数据时,通过排队按顺序依次处理避免了缓存数据和数据库数据不一致的情况,解决了现有技术中在删除缓存失败、数据库主从同步延迟和缓存失效的情况下导致的缓存数据和数据库数据不一致的问题。
尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。

Claims (3)

1.一种实现缓存数据和数据库数据一致的方法,其特征在于,包括:
步骤S1、系统启动时初始化内存队列,并为内存队列创建监听器,并启动监听器;
步骤S2、当接收到更新数据请求时,使用写锁判断该数据的修改次数是否为空,若为空则初始化该数据修改次数为1,否则该数据修改次数加1,把该数据和请求类型加入内存队列末尾;当接收到查询数据请求时,采用读锁判断该数据的修改次数是否为0或空,如果是,查询缓存数据,如果缓存中没有该数据,则查询数据库,将数据返回用户同时保存数据到缓存中;否则,把数据唯一标识和请求类型加入内存队列末尾;
步骤S3、监听器监听到内存队列有待处理数据时,取出内存队列数据,并根据请求类型执行更新数据流程或查询数据流程,其中:
更新数据流程为:删除缓存数据,再更新数据库,然后使用写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型;
查询数据流程为:查询缓存数据,如果缓存中没有该数据,则查询数据库,并保存数据到缓存中,从内存队列中删除该数据唯一标识和请求类型。
2.根据权利要求1所述的一种实现缓存数据和数据库数据一致的方法,其特征在于,系统启动时初始化多个内存队列,并为每个内存队列分别创建一个监听器,在把数据和请求类型,或者数据唯一标识和请求类型加入内存队列末尾前,还需要根据数据的数据唯一标识采用哈希算法计算出该数据需要放入的内存队列。
3.根据权利要求1或2所述的一种实现缓存数据和数据库数据一致的方法,其特征在于,所述更新数据流程中,当删除缓存失败时或者删除缓存成功更新数据库失败时,写锁将该数据的修改次数减1,从内存队列中删除该数据和请求类型,系统直接返回步骤S2,并反馈更新数据失败。
CN202210653845.5A 2022-06-10 2022-06-10 一种实现缓存数据和数据库数据一致的方法 Pending CN115687402A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210653845.5A CN115687402A (zh) 2022-06-10 2022-06-10 一种实现缓存数据和数据库数据一致的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210653845.5A CN115687402A (zh) 2022-06-10 2022-06-10 一种实现缓存数据和数据库数据一致的方法

Publications (1)

Publication Number Publication Date
CN115687402A true CN115687402A (zh) 2023-02-03

Family

ID=85060181

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210653845.5A Pending CN115687402A (zh) 2022-06-10 2022-06-10 一种实现缓存数据和数据库数据一致的方法

Country Status (1)

Country Link
CN (1) CN115687402A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116383250A (zh) * 2023-03-07 2023-07-04 深圳市丰宜科技有限公司 一种生成缓存的方法、存储介质
CN117193670A (zh) * 2023-11-06 2023-12-08 之江实验室 一种清除缓存的方法、装置、存储介质以及电子设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116383250A (zh) * 2023-03-07 2023-07-04 深圳市丰宜科技有限公司 一种生成缓存的方法、存储介质
CN117193670A (zh) * 2023-11-06 2023-12-08 之江实验室 一种清除缓存的方法、装置、存储介质以及电子设备
CN117193670B (zh) * 2023-11-06 2024-01-30 之江实验室 一种清除缓存的方法、装置、存储介质以及电子设备

Similar Documents

Publication Publication Date Title
CN115687402A (zh) 一种实现缓存数据和数据库数据一致的方法
US5140689A (en) Data recovery system and method of distributed transaction processing system
US6295610B1 (en) Recovering resources in parallel
US7363444B2 (en) Method for taking snapshots of data
US9672244B2 (en) Efficient undo-processing during data redistribution
US20220004542A1 (en) Method and apparatus for updating database by using two-phase commit distributed transaction
US7979401B2 (en) Time based file system for continuous data protection
CN113239013B (zh) 分布式系统及存储介质
CN112612799B (zh) 一种数据同步方法及终端
CN112367149B (zh) 消息获取方法、装置、设备及存储介质
CN116383227B (zh) 一种分布式缓存和数据存储一致性处理系统及方法
WO2020025049A1 (zh) 数据同步的方法、装置、数据库主机及存储介质
CN109582686B (zh) 分布式元数据管理一致性保证方法、装置、系统及应用
US9330153B2 (en) System, method, and computer readable medium that coordinates between devices using exchange of log files
US20030126163A1 (en) Method for file deletion and recovery against system failures in database management system
US20090248760A1 (en) Backup method of computer system
CN113438275B (zh) 数据迁移方法、装置、存储介质及数据迁移设备
CN115658245A (zh) 一种基于分布式数据库系统的事务提交系统、方法及装置
CN111949725A (zh) 数据的查询方法、装置、电子设备及计算机可读存储介质
JPH10289217A (ja) ログ・ストリーム管理システム
CN113190281B (zh) 一种基于rowid区间的初始化装载方法与装置
CN112114757B (zh) 对象存储系统中的存储方法及系统、计算设备和介质
JP2002222107A (ja) データ同期装置
CN112699325B (zh) 一种缓存二次淘汰保障数据一致性的方法及其系统
CN111782622B (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