缓存都是部署在应用到数据库之间的,抗住流量高峰为数据库保驾护航。在分布式应用中,常见的问题有这些:
一、缓存穿透
描述:
缓存和数据库都没有的记录被频繁请求,缓存没有起到缓冲请求的作用,请求直接到达数据库。
解决方案:
1、应用中过滤数据库中绝对不可能出现的Key值,在到达缓存前拦截。比如:商品ID自增长从1开始,而外部请求频繁请求0或-1以及其他小于0的值。
2、记录这类数据KEY,设置KEY对应NULL值。
二、缓存击穿
描述:
缓存中热门KEY被频繁请求,然而该KEY有超时时长在该KEY超时的那一瞬间所有请求都会直接到达数据库。
解决方案:
1、更新锁。在更新的时候确保只有一个线程来更新缓存,缓存更新成功后才允许其他线程访问。
2、后台任务定时更新。在KEY超时之前强制更新一波缓存,但这个得精确计算每个KEY超时时间。
三、缓存雪崩
描述:
当缓存服务节点因为未知因素宕机了,缓存压力全部压在其他缓存服务节点,最后整个缓存服务集群崩了,应用所有请求直达数据库,最终导致数据库服务崩了。
解决方案:
实时监控缓存服务节点运行情况,纳入运维预警管理。提前预估流量高峰,水平扩展缓存服务节点
一些缓存常用概念及解决方案
最新推荐文章于 2022-11-21 09:53:05 发布