Redis 缓存常见问题以及处理方式

Redis

1.穿透

简单来说就是查询了一个不存在的数据;数据请求查询透到了DB层,但是DB层查询后结果也是空;导致没有生成缓存对应的数据。

处理方式:

1.1 建立空对象的缓存key。但是会增加内存消耗,需要考虑成本问题

1.2 利用布隆过滤器。难保证双写数据一致,无法删除元素;小概率遇到hash碰撞导致误判;极端情况下会导致大量请求同时达到DB层。

2.击穿

访问的key刚好失效导致全部请求打到了DB层,同时如果该key是热key,就有可能导致DB服务宕机。

处理方式

2.1 设置失效期为永不失效

2.2 增加互斥锁,后面的请求都hold住

2.3 设置二级缓存(本地缓存);无法保证本地缓存的数据是最新的数据;

3.雪崩

在同一时间点大量key失效过期,导致所有请求透到DB层

处理方式

3.1 为预计的热key设置过期时间时增加一个随机时间,防止同时过期

3.2 设置为永久不过期

3.3 保证redis服务的高可用

3.4 使用互斥锁逐步重新创建所有缓存。

3.5 异步任务全量重新创建缓存

4热KEY

业务中被大量访问的key过期导致的击穿后果。

处理方式

4.1同击穿方式处理吧

4.2 拆分热key的构建方式;如果是集群分布需要考虑横向分割(保证每个key落在不同的节点)

5.持久化

深度理解Redis持久化:https://blog.csdn.net/qq_45656077/article/details/129613273

5.1 RDB(Redis Database),快照方式;按照设定值每隔X秒建立快照。分为手动触发和自动触发;每次执行save时会触发;(默认开启)。

利用COW(Copy On Write)写时复制方案达到非阻塞方式实现快照持久化。fork主进程的子进程进行操作,理论上是不会阻塞主进程的,但是如果快照建立的间隔时间太短且内容过大,就会陷入争抢磁盘I/O和fork子进程的问题进而导致主进程阻塞

优点:恢复快,适合大数据模式下的全量恢复

缺点:无法保证数据实时性

5.2 AOF(Append only file),追加模式;将每次执行的命令追加到日志文件的末尾;先执行命令,后记录日志(默认关闭)

优点:能保证数据的实时性

缺点:大量数据恢复时会很慢,它记录的是每一条执行的命令;恢复时其实也就是按照原来的执行日志重新执行一次。如果写时磁盘压力,写入文件很慢就会导致主进程阻塞。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值