Redis 相关知识点整理 📅 发布时间:2026/7/4 19:33:39 👁️ 浏览次数: 一、Redis 基础认知1. 核心定位Redis 是基于内存的键值型 NoSQL 数据库Java 开发中核心用于缓存减轻 MySQL 压力、分布式锁、计数器、排行榜、限流等场景是 Java 后端高性能架构的核心组件。2. 为什么快Java 面试必答Redis 高性能的核心原因需结合 Java 开发视角理解纯内存操作数据存储在内存读写延迟远低于磁盘Java 中需注意 Redis 内存占用避免 OOM单线程模型核心命令Redis 核心命令执行为单线程避免 Java 多线程的上下文切换、锁竞争开销补充Redis 6.0 引入多线程 IO仅处理网络读写命令执行仍为单线程Java 客户端无需适配多线程逻辑IO 多路复用基于 epoll 实现单线程处理数千个网络连接对应 Java NIO 的 Reactor 模式避免阻塞 IO 的性能瓶颈数据结构优化底层编码如 ziplist、跳表适配高频操作Java 开发无需关心底层但需知道不同数据结构的性能特性。3. 开发选型Redis vs Memcached维度RedisMemcachedJava 开发选型建议数据结构支持 String/Hash/List/ZSet 等仅支持 StringJava 复杂业务如排行榜、对象缓存选 Redis持久化支持 RDB/AOF不支持Java 项目需数据落地如缓存重启不丢失选 Redis集群方案原生 Cluster / 哨兵Java 客户端Redisson/Jedis原生支持需第三方集群方案Java 客户端支持弱分布式 Java 项目选 Redis客户端生态Jedis基础、Redisson高级封装分布式锁 / 集合成熟Java 客户端生态薄弱优先 Redis二、核心数据结构Java 开发高频场景数据结构核心特点Java 开发典型场景底层编码面试深问String二进制安全支持原子增减incr/decr1. 分布式 IDincr 生成2. 缓存简单对象JSON 序列化3. 计数器点赞数 / 阅读量短字符串→embstr长字符串→raw整数→intJava 序列化对象需控制长度避免编码切换Hash键值对集合适合存储对象减少 Key 数量缓存用户 / 商品对象如 user:1001 的 name/age/phone避免 String 序列化 / 反序列化开销少量字段→ziplist大量字段→hashtableJava 中需控制字段数量避免性能下降List双向链表支持阻塞读写1. 简单消息队列异步通知2. 最新消息列表少量元素→ziplist大量元素→linkedlistJava 中阻塞读取blpop需处理超时Set无序唯一支持交集 / 并集 / 差集1. 共同好友2. 抽奖去重3. 数据去重整数元素→intset其他→hashtableJava 中集合运算如 sinter需注意性能ZSet有序唯一按 score 排序支持范围查询1. 排行榜游戏积分 / 商品热度2. 延迟队列少量元素→ziplist大量元素→跳表 hashtableJava 中 zrevrange 是高频操作特殊数据结构拓展场景Bitmap按位存储极致省空间Java 中用于用户签到、在线状态统计HyperLogLog极小空间统计海量数据基数Java 中用于 UV 统计容忍 0.81% 误差Geospatial存储经纬度Java 中用于「附近的人」等 LBS 场景Stream持久化消息队列Java 中替代 List 解决消息丢失问题支持消费组类似 Kafka。三、Redis 核心特性1. 过期策略与内存淘汰1过期策略Redis 采用「惰性删除 定期删除」惰性删除访问 Key 时检查过期需注意过期 Key 若长期不访问会导致内存泄漏定期删除每 100ms 随机扫描部分 KeyJava 开发无需干预但需合理设置过期时间。2内存淘汰策略面试必答策略Java 应用场景volatile-lru业务缓存仅淘汰带过期时间的 KeyJava 项目中缓存用户 / 商品数据优先选allkeys-lru纯缓存场景所有 Key 都是缓存Java 中如缓存热点数据noeviction不淘汰拒绝写操作Java 中金融类项目不允许数据丢失可选2. 事务Redis 事务特性弱原子性、无回滚、无隔离级别Java 开发中几乎不直接使用 Redis 事务替代方案简单原子操作使用 Redis 单命令如 incr、hincrby天然原子复杂原子操作使用 Lua 脚本Jedis/Redisson 支持一次性执行多个命令分布式事务Java 中用 Seata Redis或 Redisson 的分布式事务组件。3. 管道Pipeline用于批量操作如批量插入数据核心价值减少网络往返次数RTTJedis/Redisson 均支持 Pipeline需注意Pipeline 无原子性Java 中需处理部分命令失败的情况批量操作时Pipeline 性能远高于循环单命令。四、Redis 持久化Java 开发核心配置1. RDB vs AOFJava 面试核心对比维度RDB快照AOF追加日志Java 项目选型建议原理定时将内存数据快照写入磁盘记录所有写命令重启重放-数据安全性低两次快照间数据丢失高最多丢 1 秒Java 核心业务如订单缓存选 AOF恢复速度快慢Java 项目重启时RDB 适合快速恢复性能开销低fork 子进程高写日志Java 高并发场景需平衡性能与安全2. Java 项目持久化配置原则生产环境开启「RDB AOF混合持久化」兼顾数据安全与恢复速度AOF 同步策略选 everysec平衡安全与性能Java 金融项目可考虑 always混合持久化Redis 4.0 支持Java 项目开启后重启时先加载 RDB再重放 AOF 增量日志。五、Redis 集群Java 开发核心方案1. 主从复制原理主库写、从库读Java 客户端可配置读写分离JedisPool 分主从池关注点主库宕机后需手动切换生产环境需配合哨兵。2. 哨兵Sentinel核心功能监控主从、自动故障转移Java 客户端Jedis/Redisson原生支持哨兵模式无需额外开发关注点配置哨兵地址列表客户端自动感知主库切换无需重启应用。3. Redis Cluster分片集群原理16384 个哈希槽数据按槽分布Java 客户端需支持槽位计算Java 适配Jedis使用 JedisCluster自动处理槽位重定向Redisson原生支持 Cluster封装更友好注意Java 中避免跨槽的批量操作如 mset 操作不同槽的 Key会降低性能。六、缓存核心问题1. 三大问题核心对比 面试高频问题定义Java 核心解决方案缓存穿透请求不存在的 Key打穿到 DB1. 缓存空值设置短过期2. 布隆过滤器Java 中用 Guava BloomFilter 或 Redis 布隆过滤器模块缓存击穿热点 Key 过期大量请求打 DB1. 热点 Key 永不过期2. 分布式锁仅一个请求查 DB缓存雪崩大量 Key 同时过期 / Redis 宕机所有请求打 DB1. 过期时间加随机值2. Redis 集群高可用3. 多级缓存本地缓存 Caffeine Redis2. 缓存与数据库一致性Java 核心方案核心原则禁止「先更缓存再更 DB」并发必出脏数据基础方案先更 DB再删缓存Java 中用 RedisTemplate.delete ()而非更新缓存进阶方案延迟双删删缓存→更 DB→延迟 1-2 秒再删缓存Java 中用线程池 / 定时任务实现延迟强一致性场景Java 中用分布式事务Seata或消息队列RocketMQ异步更新缓存。七、Redis 分布式锁Java 开发核心1. 基础实现RedisTemplate核心逻辑原子加锁set nx ex 原子释放Lua 脚本Java 中需注意加锁redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireTime, TimeUnit.SECONDS)requestId 避免误删释放Lua 脚本一次性执行原子性避免「查值 删除」非原子导致的误删。2. 进阶实现RedissonJava 中优先使用 Redisson封装了分布式锁的所有核心能力可重入锁RedissonLock 支持重入适配 Java 多线程重入场景锁续期Watch Dog 机制自动续期解决业务执行时间超过锁过期时间的问题公平锁避免线程饥饿适配 Java 公平锁场景RedLock多节点加锁避免 Redis 单点故障导致锁失效Java 中用 RedissonRedLock 实现。3. Java 开发避坑点必须设置过期时间避免死锁释放锁必须校验 requestId避免误删其他线程的锁高并发场景优先用 Redisson而非手动实现避免踩坑。八、面试高频题核心答案1. Redis 单线程为什么能支撑高并发答Redis 核心命令执行是单线程但结合以下特性支撑高并发纯内存操作无磁盘 IO 瓶颈IO 多路复用处理大量网络连接避免阻塞 IO单线程避免线程切换和锁竞争开销补充Redis 6.0 多线程仅处理网络读写命令执行仍为单线程Java 客户端无需适配多线程逻辑。2. 如何解决缓存穿透 / 击穿 / 雪崩答穿透缓存空值短过期 布隆过滤器Guava/Redis拦截无效请求击穿热点 Key 永不过期 分布式锁Redisson限制查 DB 的请求数雪崩过期时间加随机值 Redis 集群高可用 多级缓存Caffeine 本地缓存 Redis。3. 如何实现 Redis 分布式锁答基础版用 RedisTemplate 执行 set nx ex 原子加锁Lua 脚本原子释放进阶版使用 Redisson支持可重入、锁续期、公平锁、RedLock注意事项加锁设过期时间、释放锁校验 requestId、高可用场景用 RedLock。4. 如何保证缓存和数据库一致性答核心原则是「先更数据库再删缓存」基础场景更新 DB 后调用 RedisTemplate.delete () 删除缓存并发场景延迟双删删缓存→更 DB→延迟 1-2 秒再删强一致性场景用 Seata 分布式事务或 RocketMQ 异步更新缓存。总结Java 开发中 Redis 核心应用场景缓存、分布式锁、计数器、排行榜需结合数据结构特性选型缓存三大问题的核心解决思路拦截无效请求、避免批量过期、保证 Redis 高可用分布式锁优先用 Redisson遵循「原子加锁、原子释放、设置过期时间」三大原则缓存与 DB 一致性核心先更 DB 再删缓存避免先更缓存的脏数据问题。
互联网大厂Java求职者面试实录:严肃面试官与搞笑谢飞机 互联网大厂Java求职者面试实录:严肃面试官与搞笑谢飞机 第一轮提问 面试官: 请谈谈Java基础中的面向对象编程的三大特性是什么? 谢飞机: 这个简单啦,就是封装、继承和多态呗。 面试官: 很好,回答… 2026/5/17 10:20:21
RDPWrap-v1.6.2 + rdpwup-8 + RDP-win10系统远程多用户登录连接 Windows 10系统RDP远程多用户登录 目录 二.RDP Wrapper 的作用 三.RDP Wrapper 使用教程 3.1环境准备 3.1.1.添加用户账户 3.1.2.用户授权远程登录 3.2安装步骤 3.2.1. 从 GitHub 官方仓库下载RDP工具 3.2.2. 安装运行 3.2.3. RDP配置信息 3.… 2026/5/17 10:20:20
华为OD机试 双机位C卷 - 主次关联成环警告 (C语言 C++ Python JAVA JS GO) 主次关联成环警告 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 算法考点详解 题目描述 在ICT运维领域,现网运维工程师面向对设备上报的众多告警&… 2026/5/17 10:20:20
Pyfa终极指南:5个技巧快速掌握EVE Online免费Python舰船配装工具 Pyfa终极指南:5个技巧快速掌握EVE Online免费Python舰船配装工具 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 您是否曾因在EVE Online中反复登录游戏测… 2026/7/4 19:33:32
Elsevier投稿状态追踪插件:科研工作者的智能审稿监控工具 Elsevier投稿状态追踪插件:科研工作者的智能审稿监控工具 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为频繁登录Elsevier投稿系统查看论文审稿进度而烦恼吗?Elsevier投稿状态追踪插件… 2026/7/4 19:29:31
YOLOv26模型训练指南:从YOLOv5迁移到高效部署 1. YOLOv26模型训练概述 YOLOv26作为YOLO系列的最新成员,继承了YOLOv5的优秀特性并进行了多项架构改进。使用YOLOv5样本训练YOLOv26模型是一个典型的迁移学习场景,这种训练方式能充分利用已有标注数据的价值,同时发挥新模型架构的优势。在实际… 2026/7/4 19:25:30
YOLOv8本地部署实战指南与优化技巧 1. YOLOv8本地部署概述YOLOv8作为Ultralytics公司推出的最新目标检测算法,凭借其优异的性能和易用性,已经成为计算机视觉领域的热门选择。与云端部署相比,本地部署能够更好地保护数据隐私、降低长期使用成本,特别适合需要处理敏感… 2026/7/4 19:23:30
基于膨胀力反馈的自适应多段恒流快充与析锂检测 前言电动汽车续航里程的焦虑正在逐步缓解,但充电时间依然是制约其大规模普及的核心瓶颈。与传统燃油车几分钟即可完成加油的体验相比,当前电动汽车快充通常需要数十分钟甚至更长时间,这一差距成为影响消费者购买决策的关键因素。美国能源部已… 2026/7/4 19:23:30
InstructBLIP图像描述生成技术实践指南 1. InstructBLIP图像描述生成技术解析 InstructBLIP是近年来计算机视觉与自然语言处理交叉领域的一项重要突破,它基于BLIP-2架构改进而来,专门针对图像到文本的生成任务进行了优化。与传统的图像描述模型不同,InstructBLIP引入了指令微调&… 2026/7/4 19:23:30
STM32F745VG与MC6470 IMU的高性能姿态控制系统设计 1. MC6470与STM32F745VG的黄金组合解析在工业自动化和机器人控制领域,传感器与微控制器的协同工作能力直接决定了系统的响应速度和定位精度。MC6470作为一款6自由度惯性测量单元(6DOF IMU),与STM32F745VG这款基于ARM Cortex-M7内核的高性能微控制器组合&… 2026/7/4 0:00:28
Playwright自动化测试实战:从零搭建现代Web测试框架 1. 项目概述:为什么是 Playwright?如果你正在为现代 Web 应用的自动化测试头疼,尤其是面对那些充斥着动态加载、复杂交互的单页应用(SPA),那么 Playwright 的出现,很可能就是你的解药。我接触过… 2026/7/4 0:00:28
终极指南:如何将JSXBIN二进制文件转换为可读JSX源代码 终极指南:如何将JSXBIN二进制文件转换为可读JSX源代码 【免费下载链接】jsxbin-to-jsx-converter JSXBin to JSX Converter written in C# 项目地址: https://gitcode.com/gh_mirrors/js/jsxbin-to-jsx-converter 你是否曾经面对过Adobe产品的JSXBIN文件感到… 2026/7/4 0:02:28