失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > redis 数据库 缓存一致性

redis 数据库 缓存一致性

时间:2020-03-17 19:11:31

相关推荐

redis 数据库 缓存一致性

1.常用的缓存图如下:

高频查找某数据时,可以考虑使用redis缓存。当查找时,首先从redis中查找,如果已存在就直接从redis读取返回,如果redis中不存在,就从数据库中查找,再写入Redis中,这样下次可以直接从缓存中读取,通过缓存大大提高了服务的查询性能。

但是如果是数据需要更新,此时先操作数据库还是先操作缓存,操作缓存又有两种方式,是对缓存进行更新,还是对缓存进行删除都有讲究,下面分别进行讨论。

2.删除缓存而不是更新缓存,因为有并发性的问题

问题说明:线程1更新数据库,线程2更新数据库,线程2先更新缓存,线程1再更新缓存,此时就会导致缓存中的是旧的数据,数据库里是新的数据。并且在缓存失效时间内,都是读取的旧的数据。

3.不能使用先删除缓存,再写库的

问题说明,线程1删除了缓存,此时线程2查询,会将数据库的值写入缓存,线程1进行更新,此时会发现缓存和数据库不一致。

4.缓存双删解决极端情况:

还有一种极端的情况,因为某些原因,如下图所示,某一个时刻缓存失效,此时线程2查数据,缓存无,就从数据库中查,再从数据库中查完还没有来得及写入缓存时,线程1来了,更新了数据库,并且删除了缓存,然后线程2接着写入缓存。此时缓存中就是旧的数据。

解决办法,缓存双删:线程1隔一段时间后,第二次删除缓存,这样避免了线程2的影响。

5.总结:

要保证缓存和数据库强一致,最好的办法是使用分布式锁,但是这样影响会影响并发性能。所以我们能做的是尽可能减少不一致的概率。我们一般采用的是:

1)使用删除缓存的方式,而不是更新缓存的方式

2)先操作数据库,再操作缓存

参考:

1) bilibili 老齐300讲

2)缓存和数据库一致性问题,看这篇就够了 ()

如果觉得《redis 数据库 缓存一致性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。