概述
前言
对于一个高并发的应用,为了降低数据库的访问压力,缓存的使用是势在必得的,但多情况的业务场景或者是不合理的业务设计都可能导致缓存的失效。
理解
- 缓存穿透
缓存穿透指查询一个数据库不存在的数据。正常情况下,当查询一个数据时,缓存中如果没有则去数据库查询,但如果有恶意用户利用这个方式来频繁的访问一个数据库不存在的数据,会对数据库造成很大压力。
- 采取对查询条件进行基础的校验,例如商品id一般是通过某个规则生成的,不符合规则的直接打断。
- 可以将查询不到的信息设置为key-null的空对象,放入缓存并设置失效时间,防止恶意用户频繁使用一个信息进行攻击,但弊端就是缓存中可能存在大量的这些null对象占用空间。
- 缓存击穿
缓存击穿指高并发的访问一个key数据时,这个key到了失效时间,导致大量的请求击穿缓存,直接访问了数据库。
- 可以对热点数据的缓存设为永不失效或者失效时间比较长。
- 采用互斥锁,只有第一个获取到锁的去查询数据库,然后将查询到的数据放入缓存,后续的请求可能就只需要访问缓存就能拿到对应数据。
- 缓存雪崩
缓存雪崩指同一个时间点内大量的key数据失效,例如商品抢购,而这批商品的缓存失效,也导致了大量的查询落到了数据库上,对于数据库来说可能会产生周期性的压力风波甚至崩溃。
- 采取对数据缓存的失效时间设置为随机的或者永不失效,避免同一时间大量缓存失效。
- 采用Redis集群进行高可用设计,即使部分节点宕掉依然可以提供服务。
结束
最后
以上就是含蓄夕阳为你收集整理的Java_Redis_缓存失效前言的全部内容,希望文章能够帮你解决Java_Redis_缓存失效前言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复