Redis教程

redis缓存穿透

本文主要是介绍redis缓存穿透,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

概念:

查的数据是缓存和数据库中都不存在的数据。比如通过id查询商品信息,id一般大于0,攻击者会故意传id为-1去查询,由于缓存不命中则从DB中获取数据,这将会导致每次缓存都不命中数据导致每个请求都访问DB,造成缓存穿透。

解决方案:

1.利用互斥锁,缓存失效的时候,先去获得锁,得到了锁,再去请求数据库。没得到锁,则休眠一段时间重试。

2.采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,如果缓存过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热(项目启动前,先加载缓存)操作。

3.提供一个能迅速判断请求是否有效的机制,比如,利用布隆过滤器内部维护一系列合法有效的key。迅速判断出,请求所带的key是否合法有效,如果不合法,则直接返回。

4.如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒。

这篇关于redis缓存穿透的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!