Redis缓存介绍以及常见缓存问题:穿透、雪崩和击穿

概念

缓存就是数据交换的缓冲区(Cache),是存贮数据的临时地方,一般读写性能较高。

作用:

  • 降低后端负载

  • 提高读写效率,降低相应时间

成本:

  • 数据一致性成本

  • 代码维护成本

  • 运维成本

缓存更新策略

内存淘汰 超时剔除 主动更新
说明 不用自己维护,利用redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次 查询时更新缓存 给缓存数据添加TTL时间,到期后自动删除缓存,下次查询时更新缓存 编写业务 逻辑,在修改数据库的同时,更新缓存
一致性 一般
维护成本

应用场景:

  • 低一致性需求:使用redis自带的内存淘汰策略

  • 高一致性需求:主动更新,并以超时剔除作为 兜底方案

    • 读操作:

      • 缓存命中直接返回

      • 缓存未命中则查询数据库,并写入缓存,设定超时时间

    • 写操作

      • 先写数据库,然后再删除缓存

      • 要确保数据库于缓存操作的原子性

缓存穿透

缓存穿透是指客户端请求的 数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打在数据库。

常见解决方案:

  • 缓存空对象

    • 优点:实现简单,维护方便

    • 缺点:

      • 额外的内存消耗

      • 可能造成短期的不一致

  • 布隆过滤

    • 优点:内存占用较少,没有多余key

    • 缺点:

      • 实现复杂

      • 存在误判可能                

缓存雪崩

指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大的压力

解决方案:

  • 给不同的key的ttl添加随机值

  • 利用redis集群提高服务的可用性

  • 给缓存业务添加降级限流策略

  • 给业务添加多级缓存

缓存击穿

缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务叫复杂的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击

 

解决方案:

  • 互斥锁

    • 优点:

      • 没有额外的内存消耗

      • 保证一致性

      • 实现简单

    • 缺点:

      • 线程需要等待,性能受影响

      • 可能有死锁风险

  • 逻辑过期

    • 优点:线程无需等待,性能较好

    • 缺点:

      • 不保证一致性

      • 有额外内存消耗

      • 实现复杂

相关推荐

  1. Redis中的缓存雪崩缓存击穿缓存穿透问题

    2024-04-30 07:04:04       22 阅读
  2. Redis缓存击穿缓存雪崩缓存穿透

    2024-04-30 07:04:04       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 07:04:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 07:04:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 07:04:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 07:04:04       20 阅读

热门阅读

  1. 贪心算法基础题(第三十三天)

    2024-04-30 07:04:04       11 阅读
  2. 从零手写实现 apache Tomcat-01-入门介绍

    2024-04-30 07:04:04       10 阅读
  3. 微信小程序实现用户手机号授权

    2024-04-30 07:04:04       13 阅读
  4. 人工智能论文:GPT, GPT-2, GPT-3 对比和演进的思路

    2024-04-30 07:04:04       11 阅读
  5. webpack 区分环境

    2024-04-30 07:04:04       10 阅读
  6. 图搜索算法详解

    2024-04-30 07:04:04       9 阅读
  7. 第18天 map

    2024-04-30 07:04:04       10 阅读
  8. Objective-C学习计划

    2024-04-30 07:04:04       9 阅读