Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时它也带来了一些问题,其中最重要的就是数据一致性问题,从严格意义上讲,这个问题无解,如果对数据一致性要求很高,那么就不能使用缓存。
另外的一些典型问题就是 缓存穿透
缓存雪崩
和 缓存击穿
。
缓存穿透
用户想要查询一个数据,发现 Redis 数据库中没有,也就是缓存没有命中,于是向数据库持久层查询,发现也没有,本次查询失败。当用户很多时,缓存都没有命中(比如秒杀),于是都去请求持久层数据库,这会给持久层数据库造成很大压力,这就是缓存穿透。
解决方案
- 布隆过滤器
- 缓存空对象
缓存击穿
缓存击穿是指一个 key 非常热点,大并发集中对这一个点进行访问,当这个 key 在失效的瞬间,持续的大并发就穿透缓存,直接请求数据库。
解决方案
- 设置热点 key 永不过期。
- 加互斥锁:使用分布式锁,保证每个 key 同一时间只有一个线程去查询,其它线程没有获得分布式锁的权限,只需等待即可。
缓存雪崩
缓存雪崩是指在某一时间段,缓存集体过期失效,Redis 宕机。
解决方案
- Redis 高可用:布置多个 Redis,一台挂掉还可以有其他台工作。
- 限流降级:加锁或者队列来控制读数据库缓存的线程数量。
- 数据预热:在正式部署之前把可能的数据预先访问一遍,并设置不同过期时间,让失效的时间均匀。
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。