CN106446037A - 一种基于分布式锁实现Redis与MYSQL数据一致性的方法 - Google Patents

一种基于分布式锁实现Redis与MYSQL数据一致性的方法 Download PDF

Info

Publication number
CN106446037A
CN106446037A CN201610784212.2A CN201610784212A CN106446037A CN 106446037 A CN106446037 A CN 106446037A CN 201610784212 A CN201610784212 A CN 201610784212A CN 106446037 A CN106446037 A CN 106446037A
Authority
CN
China
Prior art keywords
record
database
data
lock
read
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
CN201610784212.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.)
Linewell Software Co Ltd
Original Assignee
Linewell Software 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 Linewell Software Co Ltd filed Critical Linewell Software Co Ltd
Priority to CN201610784212.2A priority Critical patent/CN106446037A/zh
Publication of CN106446037A publication Critical patent/CN106446037A/zh
Pending legal-status Critical Current

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/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

Abstract

本发明公开一种基于分布式锁实现Redis与MYSQL数据一致性的方法,包括以下步骤:一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;二、业务数据处理,分为:读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;三、业务数据处理完成后,对记录进行解锁。本发明解决现有缓存与数据库出现缓存更新失败而导致数据不一致的问题。

Description

一种基于分布式锁实现Redis与MYSQL数据一致性的方法
技术领域
本发明涉及一种基于分布式锁实现Redis与MYSQL数据一致性的方法。
背景技术
在平台开发过程中,常采用Redis作为缓存,MySql作为持久化数据库,由于操作缓存与操作数据库不能作为事务处理,因此在操作的过程中,我们采用第一步先写数据库(如图1所示),第二步更新Redis缓存(如图2所示),假设第一步、第二步都成功,则DB与Redis数据保持一致性,假设第一步写数据库操作成功,第二步更新缓存失败,则会出现DB中是新数据,Redis中是旧数据,数据不一致。
有鉴于此,本发明提出一种保持Redis与MYSQL的数据一致性的实现方式,以防止因缓存与数据库出现缓存更新失败而导致数据不一致。
发明内容
本发明为解决上述问题,提供了一种保持Redis与MYSQL的数据一致性的方法,以解决现有缓存与数据库出现缓存更新失败而导致数据不一致的问题。
为实现上述目的,本发明采用的技术方案为:
一种基于分布式锁实现Redis与MYSQL数据一致性的方法,包括以下步骤:
一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;
二、业务数据处理,分为:
读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;
写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;
三、业务数据处理完成后,对记录进行解锁。
采用上述技术方案后,本发明的有益效果为:基于Redis分布式同步锁机制,改进了对数据读写的方式,读写的方式采用“串行化”的方式实现,即在读写记录时,先对记录进行锁操作,读写完成之后,在释放锁,已达到对读写缓存数据库的操作“串行化”,防止出现Redis与数据库数据不一致的情况,通过引入了分布式同步锁。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1和图2分别为现有读写缓存、数据库的流程意图;
图3和4分别为本发明分半读写缓存、数据库的流程意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图及实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图3和4所示,本发明的一种基于分布式锁实现Redis与MYSQL数据一致性的方法,
一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;
二、业务数据处理,分为:
读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;
写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;
三、业务数据处理完成后,对记录进行解锁。
本发明所述的业务数据指的是业务相关表中的记录,当业务关联多张表时,需要对多张表中的对应记录进行同步锁,避免其他操作对相关业务中的其中一张表中的记录进行修改,从而导致数据的不一致性,当记录被锁时,记录只能被读取,但不能被除获取记录锁除外的其他操作修改。
本发明基于Redis分布式同步锁机制,改进了对数据读写的方式,为了防止出现Redis与数据库数据不一致的情况,引入了分布式同步锁,在原有的处理流程中,写的方式是采用先写数据库、再写缓存,读的方式是采用先读缓存、再读数据库,这种方式在并发请求的时候就容易出现缓存与数据库不一致性的情况,本发明的处理方法通过采用“串行化”的方式实现,即在读写记录时,先对记录进行锁操作,读写完成之后,在释放锁。已达到对读写缓存数据库的操作“串行化”。
上述说明示出并描述了本发明的优选实施例,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

Claims (1)

1.一种基于分布式锁实现Redis与MYSQL数据一致性的方法,包括以下步骤:
一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;
二、业务数据处理,分为:
读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;
写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;
三、业务数据处理完成后,对记录进行解锁。
CN201610784212.2A 2016-08-31 2016-08-31 一种基于分布式锁实现Redis与MYSQL数据一致性的方法 Pending CN106446037A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610784212.2A CN106446037A (zh) 2016-08-31 2016-08-31 一种基于分布式锁实现Redis与MYSQL数据一致性的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610784212.2A CN106446037A (zh) 2016-08-31 2016-08-31 一种基于分布式锁实现Redis与MYSQL数据一致性的方法

Publications (1)

Publication Number Publication Date
CN106446037A true CN106446037A (zh) 2017-02-22

Family

ID=58091096

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610784212.2A Pending CN106446037A (zh) 2016-08-31 2016-08-31 一种基于分布式锁实现Redis与MYSQL数据一致性的方法

Country Status (1)

Country Link
CN (1) CN106446037A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106934044A (zh) * 2017-03-16 2017-07-07 北京深思数盾科技股份有限公司 一种数据处理方法及装置
CN107092533A (zh) * 2017-03-29 2017-08-25 弘成科技发展有限公司 基于ActiveMQ+Redis的同步消息队列
CN108574697A (zh) * 2018-04-28 2018-09-25 广东亿迅科技有限公司 基于直播平台的防盗刷方法及装置
CN108874811A (zh) * 2017-05-10 2018-11-23 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
CN110162384A (zh) * 2019-04-19 2019-08-23 深圳壹账通智能科技有限公司 基于Redis分布式锁的超时时间动态调整方法及系统
CN111026771A (zh) * 2019-11-19 2020-04-17 拉货宝网络科技有限责任公司 一种保证缓存与数据库数据一致的方法
US10635597B2 (en) 2018-02-28 2020-04-28 Citrix Systems, Inc. Read caching with early refresh for eventually-consistent data store
CN112312148A (zh) * 2020-09-29 2021-02-02 北京达佳互联信息技术有限公司 业务功能开启方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858745A (zh) * 2006-04-05 2006-11-08 华为技术有限公司 实现内存数据和数据库数据事务一致性的处理方法
CN104657260A (zh) * 2013-11-25 2015-05-27 航天信息股份有限公司 控制分布式节点间访问共享资源的分布式锁的实现方法
CN105426271A (zh) * 2015-12-22 2016-03-23 华为技术有限公司 对分布式存储系统的锁管理的方法和装置
CN105631023A (zh) * 2015-12-30 2016-06-01 华为技术有限公司 分布式锁服务的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1858745A (zh) * 2006-04-05 2006-11-08 华为技术有限公司 实现内存数据和数据库数据事务一致性的处理方法
CN104657260A (zh) * 2013-11-25 2015-05-27 航天信息股份有限公司 控制分布式节点间访问共享资源的分布式锁的实现方法
CN105426271A (zh) * 2015-12-22 2016-03-23 华为技术有限公司 对分布式存储系统的锁管理的方法和装置
CN105631023A (zh) * 2015-12-30 2016-06-01 华为技术有限公司 分布式锁服务的方法和装置

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106934044B (zh) * 2017-03-16 2020-02-14 北京深思数盾科技股份有限公司 一种数据处理方法及装置
CN106934044A (zh) * 2017-03-16 2017-07-07 北京深思数盾科技股份有限公司 一种数据处理方法及装置
CN107092533A (zh) * 2017-03-29 2017-08-25 弘成科技发展有限公司 基于ActiveMQ+Redis的同步消息队列
CN108874811A (zh) * 2017-05-10 2018-11-23 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
CN108874811B (zh) * 2017-05-10 2021-01-26 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
US10635597B2 (en) 2018-02-28 2020-04-28 Citrix Systems, Inc. Read caching with early refresh for eventually-consistent data store
CN108574697A (zh) * 2018-04-28 2018-09-25 广东亿迅科技有限公司 基于直播平台的防盗刷方法及装置
CN110162384B (zh) * 2019-04-19 2023-04-28 深圳壹账通智能科技有限公司 基于Redis分布式锁的超时时间动态调整方法及系统
CN110162384A (zh) * 2019-04-19 2019-08-23 深圳壹账通智能科技有限公司 基于Redis分布式锁的超时时间动态调整方法及系统
CN111026771A (zh) * 2019-11-19 2020-04-17 拉货宝网络科技有限责任公司 一种保证缓存与数据库数据一致的方法
CN111026771B (zh) * 2019-11-19 2023-11-07 拉货宝网络科技有限责任公司 一种保证缓存与数据库数据一致的方法
CN112312148B (zh) * 2020-09-29 2023-02-28 北京达佳互联信息技术有限公司 业务功能开启方法、装置、电子设备及存储介质
CN112312148A (zh) * 2020-09-29 2021-02-02 北京达佳互联信息技术有限公司 业务功能开启方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN106446037A (zh) 一种基于分布式锁实现Redis与MYSQL数据一致性的方法
US9348883B2 (en) Systems and methods for replication replay in a relational database
US20170075950A1 (en) Reducing the cost of update, delete, and append-only insert operations in a database
US20210004364A1 (en) Reduce log contention by batching log record transfers to the log
EP3117348B1 (en) Systems and methods to optimize multi-version support in indexes
US10042910B2 (en) Database table re-partitioning using two active partition specifications
US10055440B2 (en) Database table re-partitioning using trigger-based capture and replay
EP3026578A1 (en) N-bit compressed versioned column data array for in-memory columnar stores
CN102331993B (zh) 分布式数据库的数据迁移方法和分布式数据库迁移系统
US20190129894A1 (en) Database Transaction Processing Method, Client, and Server
US10754854B2 (en) Consistent query of local indexes
US20150046413A1 (en) Delta store giving row-level versioning semantics to a non-row-level versioning underlying store
CN104484471B (zh) 一种高性能数据存储引擎的实现方法
US20110161300A1 (en) Dual access to concurrent data in a database management system
US9576038B1 (en) Consistent query of local indexes
US9165050B2 (en) Data availability during columnar table merges
CN105556519A (zh) 对oracle存储器中数据库的存储器中快照存储的多版本并行控制
CN105556520A (zh) 在存储器中镜像盘中的数据以提高查询性能
US20180189346A1 (en) Reducing Update Conflicts When Maintaining Views
CA2598592A1 (en) Systems and methods for modifying, creating, updating and replacing objects in a data storage system
CN105183915B (zh) 减少索引维护开销的多版本管理方法
US20170123934A1 (en) Techniques for application undo and redo using sql patchsets or changesets
CN111026771B (zh) 一种保证缓存与数据库数据一致的方法
US10650021B2 (en) Managing data operations in an integrated database system
US20160203197A1 (en) Method and System for Automatic Management of Dynamically Allocated Memory in a Computing Unit

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20170222

RJ01 Rejection of invention patent application after publication