目前后端用的缓存,主流的有Redis,对于高并发的系统,实际上会遇到以下的几个问题:
(前提是一般的业务代码中,缓存空则去请求数据库)
1、缓存雪崩现象:由于访问了没有缓存,或者已经过期的KEY,导致大量请求到达数据库
2、缓存击穿:单个KEY的高并发访问,高负载导致命中丢失,大量并发查询到达数据库
so,如何设计
针对第一个问题,围绕着解决缓存为空的空窗期,有两种方案: 一、读写分离。业务代码只负责读,定时脚本负责写
![447e852a6517361469bf6552e0a7df3b.png](https://i-blog.csdnimg.cn/blog_migrate/0863b1863855d36f27803d3bcc60b509.jpeg)
二、设置两个过期时间,一个是业务逻辑上的过期时间,另一个是相对滞后的实际过期时间,在两个时间点之间,对缓存进行更新
![ba6c86d65324f2f35c954ebb689a76b6.png](https://i-blog.csdnimg.cn/blog_migrate/36169dcc6f49d29d2a36ac8cbd3451e0.jpeg)
针对第二个问题,把单KEY节点的负载访问,随机分散到几个缓存副本节点中。更新的时候,缓存副本全部同步更新。
![2c17e62c5cc0027bbd55f33824889b7a.png](https://i-blog.csdnimg.cn/blog_migrate/3e9a21a390ab6d76d6212c5de1813deb.jpeg)
有一位旅客到乡间旅游,看到一位农夫把喂牛的草料铲到一间小茅屋的屋檐上,不免感到奇怪。于是就问道:“老伯伯,你为什么不把喂牛的草放在地上,让它好好的吃呢?”老伯伯回答道:“这种草质量不好,我要是放在地上它就不会吃,但是我放到让它可以勉强够得着的屋檐上,它会努力去吃,直到把全部草料吃个精光!”
这个小故事告诉我们学习PHP全栈laravel实战、swoole、redis、高并发等喂(xiaopingguo950321)
南极鸟团(722584796)