首页 > 数据库 >redis缓存穿透、雪崩、击穿

redis缓存穿透、雪崩、击穿

时间:2024-10-14 14:17:10浏览次数:8  
标签:缓存 数据库 redis 限流 内存 key 缺点 雪崩

缓存穿透

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

解决方案

  • 缓存空对象(常用)

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

缺点:额外的内存消耗;可能造成短期的不一致(可以设置TTL时间,缓解不一致的情况)

  • 布隆过滤器(常用)

优点:内存占用少,没用多余的key

缺点:实现复杂;存在误判可能性

  • 增强id的复杂度,避免被猜测id规律
  • 做好数据的基础格式校验
  • 加强用户权限的限流
  • 做好热点参数的限流

缓存雪崩

缓存雪崩:是指同一时间大量的缓存key失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案

  • 给不同的key的TTL添加随机值
  • 利用Redis集群提高服务的可用性
  • 给缓存业务添加降级限流策略
  • 给业务添加多级缓存

缓存击穿

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

解决方案

  • 互斥锁

优点:没用额外的内存消耗;保证一致性;实现简单。

缺点:线程需要等待,性能收影响;可能有死锁的风险。

  • 逻辑过期

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

缺点: 不保证一致性;有额外的内存消耗;实现复杂;

标签:缓存,数据库,redis,限流,内存,key,缺点,雪崩
From: https://blog.csdn.net/gs2516230558/article/details/142909200

相关文章

  • Redis 缓存预热,缓存雪崩,缓存击穿,缓存穿透
    Spring-data-redis说明:在SpringBoot2.x之后,原来使用的jedis被替换为了lettucejedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedispool连接池lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了1......
  • 滚雪球学Redis[3.3讲]:Redis数据持久化深入探讨:从 AOF 到混合持久化的演进
    全文目录:前言混合持久化1.RDB与AOF之间的权衡2.混合持久化的工作原理工作机制详解3.配置与实践实例演示4.实际应用中的案例分析5.深入探讨混合持久化的优势与局限6.扩展思考:如何选择Redis的持久化策略?总结附:案例与代码配置文件示例:测试代码:模拟数据恢复:下......
  • Redis 必知概念
    Redis为什么快基于内存实现:Redis将数据存储在内存中,读写操作不会受到磁盘IO速度限制;CPU不是Redis的瓶颈,Redis的瓶颈在于机器内存的大小或者网络带宽I/O多路复用模型的使用:Redis线程不会阻塞在某一个特定的客户端请求处理上;可以同时和多个客户端连接并处理请求,从......
  • SpringBoot利用redission实现延迟队列
    1.引入依赖<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.3</version></dependency>2、注入redissonClient@AutowiredprivateRedissonClientredissonClient;......
  • 利用Redis的BitMap统计每月用户连续签到
    利用Redis的BitMap统计每月用户连续签到我们按月来统计用户签到信息,签到记录为1,未签到则记录为0.把每一个bit位对应当月的每一天,形成了映射关系。用0和1标示业务状态,这种思路就称为位图(BitMap)。这样我们就用极小的空间,来实现了大量数据的表示Redis中是利用string类型数据......
  • Redisson分布式锁
    目录一、SETNX+EXPIRERedis分布式锁误删问题业务阻塞造成锁超时释放问题二、SETNX+LUA脚本Lua脚本解决多条命令原子性问题利用Java代码调用Lua脚本改造分布式锁 锁无法续期问题三、Redisson分布式锁 背景和定义使用方式Redisson的大致流程Redisson的可重入原理......
  • Redis教程
    (原创)Redis教程......
  • 基于nodejs+vue基于Redis的网约车系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着城市化进程的加速和共享经济的蓬勃发展,网约车系统已成为现代城市交通的重要组成部分。它不仅为乘客提供了便捷、灵活的出行方式,也为司机提供了增加收入......
  • 高级java每日一道面试题-2024年10月13日-数据库篇[Redis篇]-怎么保证缓存和数据库数据
    如果有遗漏,评论区告诉我进行补充面试官:怎么保证缓存和数据库数据的一致性?我回答:在分布式系统中,保证缓存和数据库数据的一致性是一个常见的挑战。由于缓存的引入主要是为了提高系统的性能和响应速度,但这也带来了数据一致性的问题。以下是一些常用的方法来保证缓存和......
  • 高级java每日一道面试题-2024年10月11日-数据库篇[Redis篇]-Redis都有哪些使用场景?
    如果有遗漏,评论区告诉我进行补充面试官:Redis都有哪些使用场景?我回答:Redis是一个开源的、基于键值对的数据结构存储系统,,它支持多种数据类型,包括字符串、散列、列表、集合和有序集合。它可以用作数据库、缓存和消息中间件。由于其高性能、丰富的数据结构支持以及多种......