如何保证Redis和数据库数据一致性

修改数据库

当出现修改的请求时,建议直接将redis的数据清空,待之后客户查询不到时再向磁盘(一般是配合mysql),将数据存放到缓存中来。而不是直接进行redis的修改。因为清空相比修改更简单。

那么针对修改数据有两种手段。一是先操作redis,一是先操作mysql。

先操作redis

可能出现的问题:

假设此时有两个线程,一个线程修改了数据库的内容。那么会先和redis发起通信。会把redis的数据清空。之后向数据库进行修改操作。但是如果在这个阶段,出现了网络波动。导致redis没来得及和数据库交互。而同时又有一个线程想要读取数据。那么就会读到修改前的旧数据了。导致数据不一致问题。

如何解决:

等到数据库将新的数据返回给redis之后,再将数据清空。保证了redis里不会有旧的数据了,虽然有加锁保证强一致性的操作,但是这样会大大影响效率。不建议。

先操作数据库

当线程1发起修改操作的请求给数据库后。数据库会进行修改并返回给redis,要求redis删除数据。如果在数据库同步数据之前,有线程2进行读操作,那么可能会读到旧数据。但是这个手段保证了最终的数据一致性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值