首页 > 其他分享 >缓存雪崩、缓存穿透

缓存雪崩、缓存穿透

时间:2023-05-09 22:55:29浏览次数:36  
标签:缓存 过期 数据库 查询 穿透 雪崩 哈希

缓存雪崩:指在某个时间段内,缓存中的大量数据同时过期失效或者缓存集群挂掉,导致大量请求直接打到数据库上,使得数据库瞬间压力过大,甚至瘫痪的情况。这种情况下,系统的响应时间急剧增加,甚至会出现错误和超时等问题。

解决方法:

  1. 设置不同的缓存过期时间:将缓存设置成不同的过期时间,避免大量数据同时过期失效。

  2. 增加缓存容错能力:对缓存集群进行多机部署,当其中某一台机器发生故障时,其他机器可以顶替其工作,避免整个缓存集群挂掉。

  3. 实时监控缓存状态:定期检查缓存的命中率、使用量等指标,预测可能会出现的问题,并采取相应的措施。

  4. 限流降级:在高并发情况下,可以通过限制请求访问频率、降低服务质量等方式来减轻缓存和数据库的负载压力。

缓存穿透:指恶意攻击者通过构造不存在于缓存和数据库中的数据作为查询条件,从而导致大量请求直接打到数据库上,使得数据库瞬间压力过大,甚至瘫痪的情况。这种情况下,系统的响应时间急剧增加,甚至会出现错误和超时等问题。

解决方法:

  1. 建立布隆过滤器:将所有可能存在的数据哈希到一个足够大的向量空间中,使用多个不同哈希函数对一个查询值进行计算,如果所有的哈希函数值都为true,则说明该值可能存在于缓存或者数据库中;否则则可以直接拒绝请求。

  2. 对查询结果为空的情况进行缓存:由于查询结果为空的情况比较少见,因此可以将这些数据缓存一段时间,避免频繁访问数据库。

  3. 限制用户输入参数:限制用户输入参数的长度、格式等,避免攻击者通过构造特殊的查询参数来绕过缓存。

  4. 实时监控缓存状态:定期检查缓存的命中率、使用量等指标,预测可能会出现的问题,并采取相应的措施。

  5. 使用云服务提供商的防御服务:许多云服务提供商都提供了针对缓存穿透攻击的防御服务,可以使用这些防御服务来保护应用程序。

标签:缓存,过期,数据库,查询,穿透,雪崩,哈希
From: https://www.cnblogs.com/ererjie520/p/17386550.html

相关文章

  • 使用vue的keep-alive缓存组件,三级菜单组件无法缓存问题解决
    使用vue做后台管理系统,需求是所有的菜单打开之后,下次点击的时候的使用缓存,这里很简单的做法就是用来包裹住;但是一级菜单和二级菜单都没有问题,三级菜单就会出现无法缓存的问题,网上找资料说是vue中keep-alive本身存在的缺陷,需要在路由守卫中将matched属性做一下优化,具体如下//......
  • 【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存
    不要跳过这部分知识,对了解NodeManager本地目录结构,和熟悉Container启动流程有帮助。一、分布式缓存介绍主要作用就是将用户应用程序执行时,所需的外部文件资源下载缓存到各个节点。YARN分布式缓存工作流程如下:客户端将应用程序所需的文件资源(外部字典、JAR包、二进制......
  • 几个常用切比较流行的WpordPress缓存插件,提高用户体验,以及优化SEO。
    W3TotalCache:这是一个免费的插件,可以通过缓存页面、数据库查询和对象来提高网站的速度,减少加载时间。WPSuperCache:这也是一个免费的插件,其主要功能是在服务器端生成静态HTML文件,以减少动态页面的生成次数。WPFastestCache:这个插件可以缓存页面、最小化HTML和CSS、延......
  • vue中手动清除KeepAlive缓存
    首先,这是vue的官方文档 KeepAlive|Vue.js(vuejs.org) KeepAlive组件能够保存当前组件状态,在进行路由跳转时变为【不活跃状态】而非卸载。但是官方并没有提供清除缓存的方法(除了刷新页面,整体重建)  假设以下是我们路由&对应组件的代码<router-viewv-slot="{Component}"......
  • 在一个进程中通过队列的方式缓存opencv视频帧,并在另一个进程中读取
    import_threadimportqueueimporttimeimportcv2fromflaskimportFlask,Responseapp=Flask(__name__)max_size=3q1=queue.Queue(maxsize=max_size)q2=queue.Queue(maxsize=max_size)open_flag=1defopen_and_show(ip_camera_url,title):......
  • 内网穿透
    内网穿透(也称端口映射)是指通过某种技术手段,将位于内部网络中的计算机服务映射到公网上,从而实现公网用户访问内部网络中的服务。在实际应用中,由于某些原因,比如安全考虑、防火墙等,内部网络的计算机服务可能无法被公网访问,而内网穿透技术可以解决这个问题。通过内网穿透技术,公网用户......
  • Hibernate4之二级缓存配置
    缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快。 缓存的范围分为3类: 1.事务范围(单Session即一级缓存)   事务范围......
  • Mybatis缓存机制
    1.ORM映射:将数据库中的一条语句映射到Java对象。2.MyBatis缓存机制:执行查询语句时候,将查询结果放到缓存当中(内存),如果下一次还是执行完全相同的查询语句,直接从缓存中拿数据。不再查数据库。不再去硬盘上找数据。目的是为了提高效率,通过减少IO的方式提高效率。3.缓存指针对查询语......
  • 在vue3中使用elementPlus的el-select时样式穿透问题
    下拉框的option样式只能在全局样式里改,千万不能用scope,否则不生效<el-selectclass="select":popper-append-to-body="false"v-model="selectValue"placeholder="请选择"popper-class="select-option"><......
  • laravel-permission 缓存导致的Redis带宽占用问题
     先决条件spatie/laravel-permission:3.18.0权限数:634角色数:94问题laravel-permission的缓存机制设计的不太合理将所有的权限存放在一个大set中,且存放了许多不必要的信息。当项目拥有大量的角色权限,使得这个set达到了11mb,非常影响性能。解决方案spatie/laravel......