redis缓存安全

34 阅读2分钟

缓存穿透: 是指当用了redis作为缓存的时候,可以防止每次都读取数据库,就是当redis中存在,那么返回数据,查不到去数据库查询;穿透就是,每次查询在redis中都查询不到(不存在的key),那么每次都访问数据库,当此种情况为高压下会导致数据库压力骤增,这就是相当于越过了缓存,只查询数据库的一种情况,就叫做缓存穿透;

那么如何解决缓存穿透呢??
其实也很简单,就是每次查询的时候,都把这个数据缓存到redis中(查询到存入,查询不到空值也存入),那么当再次访问这个key的时候就能在redis中查询到,这样就不会走数据库了;
那么如果每次查询的key都是随机的,然后继续查询呢?也会先走数据库,那么也会导致数据库压力骤增,如何解决?
那么如果是随机key来查询,我们可以通过ddos防御,接口限流,ip限流等手段来解决 缓存穿透;

缓存击穿: 是指在高并发下,当一个热点key过期了,但是访问这个key的请求很多,那么就会去查询数据库,并且回写到redis中;那么此时,不仅数据库压力大,redis缓存压力也是骤增;

那么如何解决击穿呢??
当有很多个请求进入,访问这一个热点key,其实只需要有一个请求去请求数据库,并回写到redis中就够了,其他的请求再访问这个key的时候,就可以直接从缓存中拿到了,这样就ok了;
那么如何做到呢?
分布式锁!!!!!

具体代码参考这位大神

https://www.freesion.com/article/5723250795/

缓存雪崩: 是指大量的key 在同一时间突然失效(集中失效),类似于缓存击穿场景的一个高并发;

雪崩解决方案: 当key设置的时候,有效期时间随机;设置不同的过期时间;

===================================================================================

穿透: key不存在
击穿: 单个key失效(并发查询下)
雪崩: 多个key失效

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。