Redis使用可能遇到的问题以及解决方法

47 阅读2分钟

Redis使用可能遇到的问题以及解决方法

一、穿透

原因:访问缓存中没有,数据库中也没有的数据,感觉像穿透了缓存层,直达数据库

解决方法:

  1. 查一个不存在的数据时,给一个设置一定过期间的key的数据,存入缓存
  2. 布隆过滤器:先把缓存中的数据的key存入到布隆过滤器中,查询缓存前,先判断当前key在布隆过滤器中是否存在,如果一定不存在则直接返回,如果可能存在就查询缓存,没有,再查询数据库。

布隆过滤器实现原理:

1、在将数据存入Redis时,会同时存储一个Redis的键到布隆过滤器中,会通过布隆过滤器提供的多个Hash函数对Key进行Hash运算,再对位数组长度进行取余,得到一个下标,将该下标值设置为1

2、在查询时,会先按存储Redis到布隆过滤器中的方法,去判断当前的Key是否在布隆过滤器中,结果有两种----一定不存在【位数组对应的下标上有一个或多个是0】,直接返回;有可能存在【位数组对应的下标上每个对应值都1】,查Redis。

二、击穿

原因:某一个热点数据的key突然过期,造成大量请求直达数据库

解决方法:

  1. 热点数据永不过期:设置定时任务,凌晨2点更新缓存数据【先删除缓存中的数据,再查询数据,再写入缓存】
  2. 接口限流或者降级
  3. 分布式锁

三、雪崩

原因:缓存中在同一个时间点有大量的key同时过期,请求查询缓存中没有,直达数据库

解决方法:

  1. 分布式锁
  2. 接口限流或者降级
  3. key随机过期时间