CN106446037A - 一种基于分布式锁实现Redis与MYSQL数据一致性的方法 - Google Patents
一种基于分布式锁实现Redis与MYSQL数据一致性的方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Abstract
本发明公开一种基于分布式锁实现Redis与MYSQL数据一致性的方法,包括以下步骤:一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;二、业务数据处理,分为:读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;三、业务数据处理完成后,对记录进行解锁。本发明解决现有缓存与数据库出现缓存更新失败而导致数据不一致的问题。
Description
技术领域
本发明涉及一种基于分布式锁实现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数据一致性的方法,包括以下步骤:
一、加锁:对要读写的记录先添加分布式同步锁,该分布式同步锁只针对记录进行锁操作,当记录添加分布式同步锁之后,其他线程无法对记录进行读写操作;
二、业务数据处理,分为:
读:先从缓存查询数据,如果数据存在,则返回结果,否则读取数据库,获取数据之后,更新缓存并返回结果;
写:先写数据库,如果失败直接返回失败,否则操作缓存,若干缓存操作成功,直接返回结果,否则退回数据库操作;
三、业务数据处理完成后,对记录进行解锁。
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)
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)
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 | 华为技术有限公司 | 分布式锁服务的方法和装置 |
-
2016
- 2016-08-31 CN CN201610784212.2A patent/CN106446037A/zh active Pending
Patent Citations (4)
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)
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 |