《JAVA八股真解》七、Redis

#JAVA##JAVA面经##JAVA内推#

1. Redis 为什么快?

Redis 的高性能主要得益于以下几个方面:

  • 内存存储:数据存储在内存中,读写速度远高于磁盘。
  • 单线程模型:避免了多线程竞争和上下文切换开销。
  • I/O 多路复用:通过 epoll 等机制高效处理大量并发连接。
  • 数据结构优化:内置多种高效数据结构,如哈希表、跳表、压缩列表等。
  • 持久化机制:支持 RDB 和 AOF,保证数据不丢失。

总结:Redis 的“快”源于其内存存储、单线程设计和高效的 I/O 模型。

2. Redis 可以用来做什么?

Redis 不仅是一个缓存工具,还可用于多种高并发场景:

  • 缓存:加速数据库访问,减轻后端压力。
  • 排行榜:利用有序集合(Sorted Set)实现排名功能。
  • 分布式锁:基于 SETNX 实现跨进程互斥控制。
  • 分页处理:结合 LISTHASH 实现分页查询。
  • 消息队列:使用 LISTPUB/SUB 实现异步通信。
  • 会话存储:替代传统 Session,提升扩展性。

应用场景示例

  • 用户登录状态缓存
  • 商品库存扣减
  • 实时统计与监控

3. Redis 的持久化机制

Redis 提供两种持久化方式:RDB(快照)AOF(追加日志)

特性 RDB AOF
持久化方式 定期生成数据快照 记录每条写操作命令
恢复速度
数据安全性 丢失部分数据 低风险,可配置同步策略
资源消耗 高/低
启动优先级 优先加载 RDB 文件 若无 RDB,则加载 AOF

RDB 优点

  • 备份速度快,适合全量备份。
  • 占用空间小,适合灾难恢复。

AOF 优点

  • 数据更安全,可配置同步频率(如每秒一次)。
  • 支持重写机制,减少日志体积。

建议

  • 生产环境推荐同时启用 RDB 和 AOF,兼顾性能与安全性。

4. Redis 常用的数据类型

Redis 支持五种基本数据类型:

类型 说明 常见命令
String 字符串,最基础类型,可用于缓存、计数器等 SET, GET, INCR, DECR
List 双向链表,支持从两端插入删除 LPUSH, RPUSH, LPOP, RPOP
Set 无序集合,不允许重复元素 SADD, SREM, SMEMBERS
Hash 键值对集合,适合对象存储 HSET, HGET, HDEL
Sorted Set 有序集合,每个元素关联一个分数 ZADD, ZRANGE, ZREVRANGE

典型应用

  • String:用户信息缓存
  • List:任务队列
  • Set:去重标签
  • Hash:用户属性存储
  • Sorted Set:排行榜

5. Redis 的缓存策略:缓存穿透、缓存击穿、缓存雪崩

缓存穿透

  • 定义:查询一个不存在的数据,导致每次请求都打到数据库。
  • 解决方案
    • 使用布隆过滤器(Bloom Filter)预判是否存在。
    • 将空结果缓存一段时间(如 30 秒),防止频繁查询。

缓存击穿

  • 定义:热点数据过期瞬间,大量请求直接访问数据库。
  • 解决方案
    • 设置永不过期或自动刷新机制。
    • 使用互斥锁(如 Redis 分布式锁),确保只有一个线程加载数据。

缓存雪崩

  • 定义:大量缓存同时失效,引发数据库压力骤增。
  • 解决方案
    • 设置不同的过期时间(随机分布)。
    • 使用 Redis 集群分散风险。
    • 引入本地缓存作为二级缓冲。

6. Redis 的哨兵模式(Redis Sentin

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
接好运
点赞 回复 分享
发布于 03-07 12:58 广东
专栏目录https://www.nowcoder.com/share/jump/1772859327707
点赞 回复 分享
发布于 03-07 12:58 广东
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏。
点赞 回复 分享
发布于 03-06 15:51 广东

相关推荐

03-07 01:06
门头沟学院 Java
一.实习问题1.日志追踪功能的核心标识以及传递方式是怎样的。2.多层关系挖掘的业务逻辑是怎么样的,资源的依赖关系是怎么样的,关系是怎么保存的。3.百万级数据导出的业务,导出的什么数据。二.项目问题1.抽象规则树当中都抽象了哪些规则,中间想要加规则可以加吗,怎么加。2.关于人群标签这块,如何去区分什么样的人群应该添加什么样的标签。3.关于人群标签这块,如果相对一些人的标签信息进行增删改查操作如何操作呢。4.关于redis的发布订阅,用来订阅什么。5.关于限流这块,限流的范围是什么。6.关于交易规则链路,核心的链路都是什么,即哪些节点,做了哪些规则校验。7.关于交易规则链路,如何想要添加一个新规则,如何将它快速接入呢。8.关于执行过程中会出现中断跳过的情况吗,如果出现了怎么办。9.关于拼团成功这样的消息提示有做推送的机制吗。10.下单支付成功后,会进行同步操作还是异步操作呢。11.关于库存的并发是怎么控制的。12.关于库存这块如果仅使用Mysql库存>0判断,为何还需要其他类似于分布式事务机制这样的操作来解决呢。三.八股问题1.springboot自定义配置这样的机制,自动配置的流程是什么样的,SPI机制。2.SPI机制有什么用。3.springboot如何实现一个start。4.redis的持久化机制有哪几种。5.redis的过期删除策略。6.redis实现分布式锁,用到了哪些命令。7.mysql慢查询分析如何分析,explain中的type字段有哪些类型。8.索引失效有哪些。9.事务的隔离界别有哪些,有哪些并发问题。10.threadLocal的使用场景。11.线程池的核心参数有哪些。12.拒绝策略有哪几种,平时使用哪一个。没想到小小厂还有二面。
发面经攒人品
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务