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

文档序号:12271424阅读:2744来源:国知局
一种基于分布式锁实现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与数据库数据不一致的情况,引入了分布式同步锁,在原有的处理流程中,写的方式是采用先写数据库、再写缓存,读的方式是采用先读缓存、再读数据库,这种方式在并发请求的时候就容易出现缓存与数据库不一致性的情况,本发明的处理方法通过采用“串行化”的方式实现,即在读写记录时,先对记录进行锁操作,读写完成之后,在释放锁。已达到对读写缓存数据库的操作“串行化”。

上述说明示出并描述了本发明的优选实施例,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1