前言
在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据。
为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大家踩踩坑。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gz6FGWcO-1621930200754)(https://upload-images.jianshu.io/upload_images/22932333-ff6b3323dcb9b771?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
缓存雪崩
我们首先看下这个正常的缓存流程是怎样的?如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRs1k5Gs-1621930200757)(https://upload-images.jianshu.io/upload_images/24195226-526956d562982f32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
可以看到,首先这个用户访问这个某东,然后这个某东去访问这个 Redis,如果 Redis 有该访问数据,就会直接返回查缓存拿到的数据;如果 Redis 缓存没有查到该数据,就会去 MySql 数据库中查询,查询到有结果把从 MySql 中查到的数据同步至 Redis 缓存中去,同时会把这个查询到的结果返回回去。
这是一个简单的正常的缓存流程。 那么我们基于这个正常的缓存流程,来看下什么是缓存的雪崩。
首先给大家举个例子,就是在双十一的时候,在某东买东西,进入它的这