redis 清空缓存_java中如何保证Redis和数据库数据的一致性?

1.给数据加过期时间。(假如说今天的数据明天就需要更新,就把那些明天需要更新的数据加上过期时间)

2.在我们的实际开发当中往往采用如下方式实现实现Mysql和Redis数据同步:当我们在MySQL数据库中进行增删改的时候,我们在增删改的service层将缓存中的数据清除,这个时候用户在此请求的时候我们缓存中没有数据了,直接去数据库中查询,查询回来之后将缓存中的数据放缓存当中,这个时候缓存中的数据就是最新的数据。
问题来了增删改的时候,是先更新数据库呢还是先删除缓存呢?

ce599dfdf459dadf06bdd7304e5458bc.png

我个人认为是
1.给方法上加上事物防止断电。断电了在启动项目的时候清空redis。
2.redis不支持事务,不会回滚。(要是删除缓存失败的情况)需要在catch里面写redis的清空操作。(保证一致性)
3.(高并发的情况下)加上了事物,有原子性,一致性,隔离性,持久性。不会出现脏读数据的情况,不会出现一个事物更新,一个事物查询,更新的事物还没有运行完成就被另一个读取的情况。

26b750ca69a8fa457cda8a7ad3b5453b.png
REPEATABLE_READ可重复读取级别保证同一事务中先后执行的多次查询将返回同一结果,不受其他事务影响。以操作同一行数据为前提,读事务禁止其他写事务,但允许其他读事务,未提交的写事务禁止其他读事务和写事务。此隔离级别可以防止更新丢失、脏读、不可重复读,但不能防止幻读。

加上上面图片中的隔离性。就会一个事物更新完成提交之后,另一个事务才会读取。
上面的操作全是个人观点,如有不对的地方,欢迎小伙伴们留言

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值