栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java

前言

对于一个高并发的应用,为了降低数据库的访问压力,缓存的使用是势在必得的,但多情况的业务场景或者是不合理的业务设计都可能导致缓存的失效。

理解
  • 缓存穿透

缓存穿透指查询一个数据库不存在的数据。正常情况下,当查询一个数据时,缓存中如果没有则去数据库查询,但如果有恶意用户利用这个方式来频繁的访问一个数据库不存在的数据,会对数据库造成很大压力。

  1. 采取对查询条件进行基础的校验,例如商品id一般是通过某个规则生成的,不符合规则的直接打断。
  2. 可以将查询不到的信息设置为key-null的空对象,放入缓存并设置失效时间,防止恶意用户频繁使用一个信息进行攻击,但弊端就是缓存中可能存在大量的这些null对象占用空间。
  • 缓存击穿

缓存击穿指高并发的访问一个key数据时,这个key到了失效时间,导致大量的请求击穿缓存,直接访问了数据库。

  1. 可以对热点数据的缓存设为永不失效或者失效时间比较长。
  2. 采用互斥锁,只有第一个获取到锁的去查询数据库,然后将查询到的数据放入缓存,后续的请求可能就只需要访问缓存就能拿到对应数据。
  • 缓存雪崩

缓存雪崩指同一个时间点内大量的key数据失效,例如商品抢购,而这批商品的缓存失效,也导致了大量的查询落到了数据库上,对于数据库来说可能会产生周期性的压力风波甚至崩溃。

  1. 采取对数据缓存的失效时间设置为随机的或者永不失效,避免同一时间大量缓存失效。
  2. 采用Redis集群进行高可用设计,即使部分节点宕掉依然可以提供服务。
结束
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号