当前位置: 首页 > news >正文

北京JAVA基础面试30天打卡05

一、Redis 的持久化机制有哪些?**

Redis 提供两种主要的持久化机制:

RDB(Redis DataBase)快照持久化
  • 定期将 Redis 中的数据以“快照”的形式写入磁盘(生成 .rdb 文件)。
  • 启动 Redis 时会加载 .rdb 文件恢复数据。
  • 触发方式:
    • 手动执行 SAVEBGSAVE 命令。
    • 根据配置(如 save 900 1)定期自动触发。
  • 优点:
    • 恢复速度快,占用磁盘小。
  • 缺点:
    • 异常宕机可能会丢失最近修改的数据(非实时)。
AOF(Append Only File)追加日志持久化
  • 将每次写操作(如 SET, HSET, INCR 等)以日志方式记录到 .aof 文件中。
  • 启动 Redis 时重放 .aof 日志以恢复数据。
  • 刷新策略:
    • always:每次操作都写入磁盘,最安全但性能差。
    • everysec(默认):每秒写一次,性能与安全的折中。
    • no:完全由操作系统控制刷盘时机。
  • 优点:
    • 持久化更可靠,可恢复最近的数据。
  • 缺点:
    • 文件比 RDB 大,恢复速度慢。
混合持久化(Redis 4.0+)
  • 同时使用 AOF 和 RDB 优势。
  • RDB 保存大部分数据,AOF 记录最后的增量变化。
  • 适用于既要快速恢复也要数据尽量完整的场景。

总结一张图(文字版):

机制类型描述优缺点
RDB快照形式保存数据到硬盘快速恢复、可能丢数据
AOF每次写操作记录日志数据更完整、文件大
主从复制主节点写、从节点读高可用、读写分离
过期删除定时 / 惰性 / 定期兼顾性能和内存释放

🏢 实际大厂方案举例(简化版)

公司/场景持久化策略说明
阿里巴巴关闭持久化(缓存场景)Redis 宕机自动重建缓存,不做持久化
字节跳动AOF everysec + RDB 混合用于关键服务,定期冷备 RDB
京东主从复制 + AOF + 异地灾备高可用架构,主机持久化 AOF,从节点只读
腾讯云 Redis默认开启 AOF everysec + RDB提供用户可选关闭
美团自研容器化 Redis + AOF everysec使用混合持久化恢复用户 session 数据

🧠 总结建议

需求类型推荐持久化方案理由
缓存为主、能容忍丢失不持久化最佳性能
数据重要、不能丢AOF everysec + RDB高可靠性恢复
启动速度要求高RDB + 备份定期触发恢复快,节省磁盘
高可用架构主从 + 哨兵 + 持久化容灾能力强

二、Redis 主从复制的实现原理

Redis 主从复制(Replication)用于实现读写分离、数据备份和高可用架构。

实现流程:
  1. 从节点发送 SYNC 请求:
    • 启动后通过配置或命令(如 SLAVEOF)向主节点发起复制请求。
  2. 主节点执行 RDB 快照:
    • 执行 BGSAVE 生成 RDB 快照,将数据发送给从节点。
  3. 从节点加载快照:
    • 清空原有数据后加载主节点传过来的 RDB 文件。
  4. 复制增量写命令:
    • 主节点在 RDB 传输完后将期间的写命令缓存在 replication backlog buffer 中,一并发给从节点。
    • 此后主节点每执行一次写命令就同步给所有从节点。
特点:
  • 异步复制: 默认是异步,但 Redis 6.0 起支持部分同步机制。
  • 断线重连:
    • 若断线,从节点尝试“部分重同步”(基于 runIdoffset)。
    • 不行时才进行完整的 RDB + AOF 同步。

三、 Redis 数据过期后的删除策略

Redis 为了释放内存,提供了三种删除过期 key 的策略:

定时删除(主动删除)
  • 给 key 设置了过期时间后,Redis 会为其设置一个定时器,到时间自动删除。
  • 优点: 内存及时释放。
  • 缺点: 会影响 CPU 性能(每个 key 都定时检查代价高)。
惰性删除(被动删除)
  • 客户端访问某个 key 时,Redis 会先检查是否过期,若过期就删除。
  • 优点: 不浪费 CPU。
  • 缺点: 若没有访问,过期 key 会长期占内存。
定期删除(定期抽样删除)
  • Redis 会周期性(默认 100ms)随机抽取部分 key 进行过期检查并删除。
  • 优点: 兼顾性能与内存控制。
  • 缺点: 某些 key 可能在长时间内未被检查到,造成内存浪费。

四、淘汰策略

策略名称 策略说明 适用场景
noeviction 不淘汰,直接拒绝写入操作(默认策略) 数据不能丢的场景(如金融)
allkeys-lru 所有键中,淘汰最久未使用的(Least Recently Used) 通用缓存、Web缓存
volatile-lru 只在设置了过期时间(TTL)的键中,淘汰最久未使用的 局部热数据缓存
allkeys-random 所有键中随机淘汰 对访问频率无强依赖的缓存
volatile-random 只在设置了过期时间的键中随机淘汰 弱一致性、低优先级缓存
volatile-ttl 只淘汰 TTL 剩余时间最短的 key(即快要过期的 key) 想优先保留长期 key

五、LUR/随机策略内部机制

✅ allkeys-lru 是最常用的策略
Redis 内部维护了访问信息(LRU/approximate LRU),采用 采样+近似LRU算法:

抽样 5 个 key(默认),比较其访问时间,淘汰最久未使用的。
可以通过 maxmemory-samples 设置样本数(越大越精准,但耗 CPU):

六、实践建议

💡 推荐策略组合:
场景 推荐配置
通用缓存 allkeys-lru(经典)
只缓存部分热点数据 volatile-lru + 设置 TTL
极限性能下,快速释放空间 allkeys-random
数据敏感/不能自动淘汰 noeviction(程序层判断+降级处理)

http://www.lryc.cn/news/615294.html

相关文章:

  • STM32的中断系统
  • 05.【数据结构-C语言】栈(先进后出,栈的实现:进栈、出栈、获取栈顶元素,栈实现代码,括号匹配问题)
  • 【排序算法】③直接选择排序
  • 心灵笔记:思考三部曲
  • 使用 Spring Boot 集成七牛云实现图片/文件上传
  • 机器翻译:FastText算法详解与Python的完整实现
  • istio笔记03--快速上手多集群mesh
  • 支持 UMD 自定义组件与版本控制:从 Schema 到动态渲染
  • [FOC电机控制]霍尔传感器于角度问题
  • 贪心----1.买卖股票的最佳时机
  • GoEnhance AI-AI视频风格转换工具
  • 利用whisper api实现若无字幕则自动下载音频并用 whisper 转写,再用 LLM 总结。
  • 飞算JavaAI:人工智能与Java的创新融合与应用前景
  • Klipper-G3圆弧路径算法
  • 四、RuoYi-Cloud-Plus 部署时nacos配置服务启动
  • 驾驶场景玩手机识别准确率↑32%:陌讯动态特征融合算法实战解析
  • 最长回文子串(马拉车/Manacher‘s )算法
  • Android 设置/修改系统NTP服务地址
  • 【Avalonia】无开发者账号使用iOS真机调试跨平台应用
  • 提示条贴合右侧边栏
  • Java 大视界 -- Java 大数据在智能家居场景联动与用户行为模式挖掘中的应用(389)
  • 虚拟机Ubuntu重启发现找不到共享文件夹
  • 2025AI颠覆认知!解锁智能新纪元
  • ubuntu修改密码
  • Java基础-TCP通信(多发多收和一发一收)
  • webrtc弱网-BandwidthQualityScaler 源码分析与算法原理
  • 基于 RAUC 的 Jetson OTA 升级全攻略
  • RAGFoundry:面向检索增强生成的模块化增强框架
  • 功能测试中常见的面试题-一
  • DataDex 多样化 JSON 服务——使用教程