ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis 缓存问题

2021-11-11 18:02:37  阅读:129  来源: 互联网

标签:缓存 过期 数据库 Redis 问题 key MySQL


缓存穿透问题

什么是缓存穿透

缓存穿透就是指当用户在 Redis 缓存系统查询一条数据时,而 MySQL 数据库和 Redis 缓存里却没有关于这条数据的任何记录。这条数据在 Redis 缓存中查询不到自然会向 MySQL 数据库请求获取数据,MySQL 数据库也获取不到数据,导致 Redis 缓存会一直查询 MySQL 数据库,这样会对 MySQL 数据库的访问造成很大的压力。

缓存穿透解决方案一:缓存空对象

缓存空对象是指用户请求查询 Redis 缓存和 MySQL 数据库中都不存在的数据时,MySQL 数据库会返回一个空对象,并将这个空对象和用户请求关联起来存到 Redis 缓存中;当存在相同用户请求,这时 Redis 缓存就会命中,就直接从缓存中返回这个空对象,这样可以减少访问数据库的压力,提高当前数据库的访问性能。

优点

使用缓存空对象机制原理和实现比较简单(代码维护容易)

缺点

使用缓存空对象长时间会导致 Redis 缓存中存在大量空对象,不仅会占用许多的内存空间,还会浪费许多资源(推荐设置缓存空对象过期时间)

缓存穿透解决方案二:布隆过滤器(推荐)

布隆过滤器是一种过滤器,它的底层是一种基于概率的数据结构,主要使用来判断当前某个元素是否在该集合中,运行速度快。但布隆过滤器不是绝对精确,会有小小的误判概率,只要参数设置的合理,它的精确度可以控制的相对足够精确

采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的二进制 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层数据库的查询压力

布隆过滤器还有很多其他应用,比如网络爬虫去重复 URL 地址

缓存击穿问题

什么是缓存击穿

缓存击穿是指 Redis 缓存中有一些的热点数据 key 同时过期失效,或有一些非热点数据 key 突然有大量并发访问请求,这样会导致大量并发请求直接穿透 Redis 缓存,涌入 MySQL 数据库,瞬间增大数据库的访问压力,甚至导致数据库崩溃

缓存击穿解决方案一:永不过期

就是设置 key 永不过期,就不会出现大量 key 过期失效的问题, 优点是维护简单,缺点是占用空间。而却对于非热点数据的高并发访问无效。

缓存击穿解决方案二:加锁

对于 Redis 缓存中 key 过期时,在 key 要查询 MySQL 数据库的时候加锁,这时只能让第一个请求进行查询数据库,然后把从数据库中查询到的值存储到 Redis 缓存中,对于其他的相同的 key 查询,可以直接从 Redis 缓存中获取即可

缓存雪崩问题

什么是缓存雪崩

缓存雪崩是指在某一个时间段内,Redis 缓存突然宕机或大量 key 集中过期失效,如果这个时间段内有大量请求,而查询数据量巨大,所有的请求都会达到 MySQL 数据库,数据库的访问量会暴增,引起数据库压力过大甚至宕机

缓存雪崩解决方案
  • Redis 高可用

    搭建 Redis 主从架构或集群架构,负载均衡,分担压力

  • 限流降级

    在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量,对某个 key 只允许一个线程查询数据和写缓存,其他线程等待

  • 数据预热

    将部分可能大量访问的热点数据提前加载到 Redis 缓存中,或在即将发生高并发请求访问前手动触发加载缓存不同的 key

  • 不同的过期时间

    设置不同的过期时间,让缓存失效的时间点尽量均匀

标签:缓存,过期,数据库,Redis,问题,key,MySQL
来源: https://www.cnblogs.com/ccl971123/p/15540975.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有