首页 > 数据库 >【Redis】缓存穿透、缓存击穿、缓存雪崩

【Redis】缓存穿透、缓存击穿、缓存雪崩

时间:2022-09-29 11:55:06浏览次数:52  
标签:缓存 请求 过期 数据库 Redis 雪崩 数据

 

缓存雪崩

缓存雪崩是指缓存同一时间大面积失效,所以后面的请求都会落在数据库上,造成数据库短时间内承受大量请求而崩掉。

目前电商首页以及热点数据都会缓存,一般缓存都是定时刷新或者查不到之后更新缓存。定时任务刷新就会存在一个问题。假如,所有的缓存数据失效时间都是12个小时,中午12点刷新缓存,双十一零点会有大量用户涌入,假设每秒6000个请求,本来缓存可以抗下请求,但此时缓存中的key都过期了,此时6000个请求全部落在数据库上,直接宕机。

解决方案:
1、缓存数据的过期时间设置随机值,防止同一时间大量数据过期。
2、缓存预热
3、设置热点数据永不过期,有更新操作就更新缓存。
4、互斥锁,保证只有一个线程访问数据库,其余都等待。

缓存穿透

缓存穿透指缓存和数据库中都没有数据,导致所有的请求都落在数据库上,造成数据库短时间内承受大量请求而崩掉。

例如:数据库id是从1开始自增的,如果黑客大量访问id=-1的数据,这样不断攻击会导致数据库压力特别大,严重时会击垮数据库。

解决方案:
1、接口层增加校验,比如用户鉴权,参数校验,比如id<=0 直接拦截
2、缓存获取不到数据,数据库也获取不到,这时可以在redis中缓存key-null,缓存有效时间可以设置短点。这样可以防止攻击者反复使用同一个id暴力攻击。
3、采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据一定会被bitmap拦截,从而避免对底层存储系统的查询压力。

缓存击穿

缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,没有从缓存中读取到数据,同时到数据库读取数据。

一个商品10点进行秒杀,但是10点的时候缓存恰好过期,这就导致所有的请求都走的数据库。

解决方案:
1、设置热点数据永不过期
2、加互斥锁。

标签:缓存,请求,过期,数据库,Redis,雪崩,数据
From: https://www.cnblogs.com/cuipengchong/p/16740956.html

相关文章

  • Golang Redis有序集合(sorted set)
    Redis有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,这个分数主要用于集合元素排序。引用git......
  • docker 简介和使用总结:image,container,dockfile,nginx,redis,compose
    硬件发展速度:asp.net+sql+redis+nginx:资源利用率太低,多软件工具不能隔离,相互影响,不能快速部署 0.docker简介和使用总结:image,container,dockfile,nginx,redis,compose......
  • 虚拟机的Linux系统安装redis
    在虚拟机的Linux系统安装redis时出现make:***[install]错误2百度了一下发现是因为没有安装gcc因为Redis是C实现的,需要gcc来进行编译执行安装gcc依赖和gcc:yum-yins......
  • redis有序集合中是否存在某个成员
    redis命令使用参考网页:​​http://redis.cn/commands.html​​有序集合中,redis没有命令直接判断有序集合中是否存在某个成员,自行通过代码实现,示例代码如下:#include<stdio.h......
  • 利用redis实现倒计时任务
    示例如下:importredisimporttimedefevent_handler(msg):'''监听到任何key过期后,得到的消息如下msg={'type':'pmessage',#返回值类型'pattern':'__k......
  • Memcached vs Redis, 挑选哪一个?
    MemcachedvsRedis,挑选哪一个?标签:MencachedRedisMemchached还是Redis?该用哪一个?当我们讨论改进性能的时候,这是每次技术讨论中最常见的一个问题。每当性能需要改善时......
  • 使用Spring boot基于Redis快速搭建分布式Session缓存方案
    使用Springboot基于Redis快速搭建分布式Session缓存方案大型web应用中,session的管理非常重要,这是单机存储满足不了的.通常有以下几种方法:将session持久化到数据库中.但......
  • docker 安装 redis
    1、启动镜像dockerrun--restart=always--log-optmax-size=100m--log-optmax-file=2-p6379:6379--namemyredis-v/opt/myredis/redis.conf:/etc/redis/redis.co......
  • Redis笔记
    Redis建议参考目录使用!!!Redis(RemoteDictionaryServer),即远程字典服务redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现了主从......
  • 【Redis】切片集群
    如何保存更多的数据为了保存更多的数据,通常使用大内存云主机和切片集群两种方法。实际上,这两种方法分别对应着redis应对数据量增多的两种方法:纵向扩展和横向扩展。纵向......