news 2026/2/4 0:04:00

华为OD技术面真题 - 数据库Redis - 1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD技术面真题 - 数据库Redis - 1

文章目录

  • 简单介绍一下Redis
  • 为什么Redis这么快?
  • 分别解释缓存穿透、缓存击穿、缓存雪崩,以及如何解决
  • Redis的适用场景有哪些

简单介绍一下Redis

Redis(Remote Dictionary Server)远程数据服务,是一个基于 C 语言开发的开源 NoSQL 数据库。使用KV键值对存储数据,数据直接保存在内存中,因此读写速度快,同时也提供持久化机制。为了满足不同的业务场景,Redis 内置了多种数据类型实现(比如 String、Hash、Sorted Set、Bitmap、HyperLogLog、GEO)。并且,Redis 还支持事务、持久化、Lua 脚本、发布订阅模型、多种开箱即用的集群方案。

为什么Redis这么快?

Redis快的原因主要基于以下几个方面:

  1. 纯内存操作:Redis 数据读写操作都发生在内存中,访问速度是纳秒级别,而传统数据库频繁读写磁盘的速度是毫秒级别,两者相差数个数量级。
  2. 内置高效数据结构:Redis提供多种数据类型(String,List,Hash等)其内部采用高度优化编码方式。Redis 会根据数据大小和类型动态选择最合适的内部编码,以在性能和空间效率之间取得最佳平衡。
  3. 高效I/O模型:Redis 使用单线程事件循环配合 I/O 多路复用技术,让单个线程可以同时处理多个网络连接上的 I/O 事件(如读写),避免了多线程模型中的上下文切换和锁竞争问题。处理数据库操作命令使用单线程执行,高效简单,无需进行锁竞争、CPU上下文切换等操作。
  4. 简单高效的通信协议:Redis使用自身设计的RESP协议。客户端/服务端通信对数据进行序列化/反序列化开销小,有助于提升整体交互速度。

分别解释缓存穿透、缓存击穿、缓存雪崩,以及如何解决

先说明一下使用Redis缓存的核心目的:热点数据缓存,减轻数据库压力,高频热点数据查询每次查关系数据库,系统性能瓶颈可能直接转换为DB,引入Redis进行缓存的作用,分担数据库压力,从而提升系统并发能力。基于这个点,再来解释上面问题:

  • 缓存穿透:简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。
    • 常见解决方案:
      • 缓存无效key:出现缓存穿透的核心原因是数据不存在就不进行缓存,导致每次都查库,如果对于无效key也进行缓存并设置过期时间,就可以避免每次都查库。
      • 接口限流:根据用户/IP对接口限流,对于频繁异常查询行为,限制短时间访问次数。
      • 布隆过滤器:使用布隆过滤器先过滤大部分不存在数据请求。
  • 缓存击穿:缓存击穿中,请求的 key 对应的是 热点数据,该数据 存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期)。这就可能会导致瞬时大量的请求直接打到了数据库上,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。
    • 常见解决方案:
      • 永不过期:针对热点数据可以设置永不过期或者过期时间比较长。更甚可以等数据热点持续时间过了之后,手动管理。
      • 提前预热:针对有预期的热点数据,可以提前手动将热点数据缓存,并免用户访问的时候采取查询集中查询。
      • 加锁访问:在缓存失效后,通过设置互斥锁确保只有一个请求去查询数据库并更新缓存,其它请求自旋等待缓存更新。
  • 缓存雪崩:缓存在同一时间大面积的失效,导致大量的请求都直接落到了数据库上,对数据库造成了巨大的压力。同时当服务器宕机也会导致缓存雪崩。
    • 常见解决方案:
      • 避免缓存同一时间失效:可将数据设置随机时间失效/不失效,保证避免同一时间大量缓存失效。
      • 避免系统崩溃宕机:使用redis分布式集群,提高系统可靠性。

Redis的适用场景有哪些

  • 热点数据缓存:缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。
  • 限时业务使用:redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码过期等业务场景。
  • 计时器相关场景:redis由于incrby命令可以实现原子性的递增,可用于分布式有序编号生成、接口限流等场景使用。
  • 分布式锁:利用redissetnx方法,只有不存在时才能添加成功,返回true。分布式场景使用redis协调多服务同步。
  • 分布式Session:利用 String 或者 Hash 数据类型保存 Session 数据,所有的服务器都可以访问。
  • 限定场景下使用:通过 Bitmap 统计活跃用户、通过 Sorted Set 维护排行榜、通过 HyperLogLog 统计网站 UV 和 PV。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 23:31:37

小程序毕设选题推荐:微信小程序的个人运动健康管理平台基于SpringBoot+Vue的个人运动健康小程序的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/1/29 21:43:10

【Vue知识点总结】API封装全指南:参数类型、场景选择与企业实战

一、API 封装的核心价值 在企业级 Vue 项目中,API 封装不仅是为了代码整洁,更是为了: 统一接口管理:集中维护所有后端接口地址 参数标准化:规范请求/响应数据格式 错误处理:统一拦截异常和状态码 提高复用性:减少重复代码 便于测试:模块化接口更易mock和测试 二、API …

作者头像 李华
网站建设 2026/1/30 18:03:01

全球股市估值与基因治疗的医疗保险政策框架

全球股市估值与基因治疗的医疗保险政策框架 关键词:全球股市估值、基因治疗、医疗保险政策、金融与医疗融合、投资分析 摘要:本文深入探讨了全球股市估值与基因治疗的医疗保险政策框架之间的关系。首先介绍了研究的背景、目的、预期读者等内容。接着阐述了全球股市估值和基因…

作者头像 李华
网站建设 2026/2/3 1:19:55

Claude:开启AI原生应用领域新时代

Claude与AI原生应用:从工具革命到生态重构 关键词 Claude、AI原生应用、Constitutional AI、长上下文处理、生成式AI、prompt工程、安全可控性 摘要 当我们谈论"AI原生应用"时,我们究竟在谈论什么?是将ChatGPT嵌入App的"A…

作者头像 李华
网站建设 2026/1/30 7:25:55

亲测高中自习室全托供应商,案例复盘分享

亲测高中自习室全托供应商,案例复盘分享在高中教育焦虑持续升温的背景下,越来越多家长开始重视“自习室”这一新兴学习场景。不同于传统补习班的“讲授式”学习,现代高中自习室强调自主性、系统性和精准性。近年来,【高中自习室】…

作者头像 李华