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

Redie详细入门教程2

一、 Redis的持久化机制

1. RDB(快照)

  • 原理:在指定时间间隔内,将内存中的数据集快照保存到磁盘上的二进制文件(默认 dump.rdb)。

  • 触发方式

    • 配置文件中的 save 指令(比如 save 900 1 表示 900 秒内有 1 次修改则触发快照)。
    • 手动执行 SAVE(阻塞)或 BGSAVE(后台子进程异步执行)。
  • 优点

    • 文件紧凑,适合备份和灾难恢复。
    • 恢复速度快,只需要加载快照文件。
  • 缺点

    • 容易丢数据(快照间隔内的新数据未写入磁盘)。
    • BGSAVE 会 fork 子进程,数据量大时可能造成性能抖动。

2. AOF( 追加日志)

  • 原理:以日志的形式记录每一次写操作(追加到文件 appendonly.aof),重启时通过回放日志重建数据。

  • 写入策略(appendfsync 参数)

    • always:每次写操作都刷盘,最安全但性能差。
    • everysec(默认):每秒刷盘一次,性能和安全折中。
    • no:由操作系统决定何时刷盘,性能最好但最不安全。
  • 优点

    • 数据更安全,丢失的数据量小(取决于写入策略)。
    • 日志文件可读性强,易于修复。
  • 缺点

    • 文件体积大,恢复速度比 RDB 慢。
    • 需要 AOF 重写(BGREWRITEAOF)来压缩文件,否则无限膨胀。

3. RDB + AOF 混合持久化(Redis 4.0+)

  • 原理:结合 RDB 的快照和 AOF 的日志优势。

    • 先生成一份 RDB 快照作为基准点。
    • 之后再记录增量写操作到 AOF。
  • 优点

    • 重启时先加载 RDB,再追加少量 AOF 日志,速度快且丢失数据少。
  • 缺点

    • 文件格式更复杂(不再完全可读)。

4. 无持久化

  • 可以通过配置 save "" 关闭 RDB,或者不启用 AOF。
  • 适用于缓存场景(只要求高性能,不要求数据持久)。

  • 高性能但可能丢数据 → 用 RDB。
  • 高安全性,几乎不丢数据 → 用 AOF(everysec)。
  • 折中方案 → 混合持久化(推荐 Redis 4.0+ 默认配置)。
  • 只当缓存用 → 可以关闭持久化。

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

1. 建立复制关系

  • 配置:在从库(replica/slave)中使用 replicaof <masterip> <masterport>指定主库。
  • 连接:从库会主动和主库建立 TCP 连接,并发送 PSYNC 命令请求数据同步。

2. 全量复制

第一次建立主从关系时,通常需要执行一次 全量复制

  1. 主库执行 RDB 快照
    主库 fork 出一个子进程,生成 RDB 文件(快照),同时继续接收客户端写操作。
  2. 数据传输
    主库将生成的 RDB 文件传输给从库,从库加载到内存,形成和主库一致的数据副本。
  3. 命令缓冲区
    在主库生成快照和传输过程中,新的写命令会暂存在复制缓冲区(repl backlog)中。
  4. 应用命令
    从库加载完 RDB 后,再应用主库传来的缓冲区命令,最终和主库保持一致。

3. 增量复制

全量复制完成后,进入 增量复制阶段

  • 主库会把自己收到的 写命令(set、del、incr 等)按顺序发送给从库。
  • 从库执行这些命令,保证和主库的数据保持实时一致。

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

1. 惰性删除(Lazy Deletion)

  • 原理:只有当客户端访问某个 key 时,Redis 才检查它是否过期。

    • 如果过期 → 立刻删除,不返回结果。
    • 如果没过期 → 正常返回。
  • 优点:几乎零开销,不需要定时扫描。

  • 缺点:如果一个过期 key 长时间没人访问,它会一直占用内存。


2. 定期删除(Periodic Deletion)

  • 原理:Redis 每隔一段时间(默认 100ms)随机抽取一定数量的 key 进行过期检查,删除已过期的。

  • 策略:

    • Redis 不会一次性扫描所有 key(否则会阻塞),而是随机挑一些带 TTL 的 key。
    • 如果发现过期比例过高,就会继续多做几轮,避免过多垃圾留在内存里。
  • 优点:减少无效内存占用。

  • 缺点:删除不是实时的,仍可能有延迟。


3. 内存淘汰策略(当内存不足时)

如果过期 key 太多但未被清理,而内存不足,就会触发 内存淘汰机制(maxmemory-policy):

  • noeviction:不再写新数据,报错(默认)。
  • allkeys-lru:淘汰最近最少使用的 key(全局范围)。
  • volatile-lru:淘汰最近最少使用的、带过期时间的 key。
  • allkeys-random:随机淘汰任意 key。
  • volatile-random:随机淘汰带过期时间的 key。
  • volatile-ttl:优先淘汰 TTL 剩余时间最短的 key。


文章转载自:

http://MlwttPky.hyxwh.cn
http://kqcV9z6J.hyxwh.cn
http://dk9Fz02g.hyxwh.cn
http://gPc68KlX.hyxwh.cn
http://MCTnF3Au.hyxwh.cn
http://jt0iceJS.hyxwh.cn
http://QGSRTYPm.hyxwh.cn
http://yDjbXbor.hyxwh.cn
http://kLdfIhrL.hyxwh.cn
http://1NXsK4Fy.hyxwh.cn
http://tDcUYQEQ.hyxwh.cn
http://OglPaQ3p.hyxwh.cn
http://E4ATncsl.hyxwh.cn
http://PkDML39d.hyxwh.cn
http://6OEN3BJw.hyxwh.cn
http://8hRkVOgK.hyxwh.cn
http://BZ0t1cmN.hyxwh.cn
http://EEuoPfls.hyxwh.cn
http://khRdR8Rg.hyxwh.cn
http://7GvJNvVg.hyxwh.cn
http://tilPYFvG.hyxwh.cn
http://gEZwgYmz.hyxwh.cn
http://sCUStJ01.hyxwh.cn
http://QnaF1ikV.hyxwh.cn
http://1EdTNjnW.hyxwh.cn
http://lZ2U3RxJ.hyxwh.cn
http://h5H6p0Dr.hyxwh.cn
http://7ACAuxhj.hyxwh.cn
http://FtTFf1Xu.hyxwh.cn
http://pFBGLa7u.hyxwh.cn
http://www.dtcms.com/a/383428.html

相关文章:

  • Maven入门_简介、安装与配置
  • Vue组件化开发介绍
  • ​new species of flying reptile1 discovered in Scotland​
  • Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战
  • 闪电科创 SCI专业辅导
  • 【数据结构与算法】图 Floyd算法
  • 代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
  • IDEA编译器设置代码注释模板
  • 10-鼠标操作的处理
  • efcore 对象内容相同 提交MSSQL后数据库没有更新
  • Docker 容器化
  • 玩转Docker | 使用Docker部署OmniTools自托管IT工具箱
  • 类的组合(对比继承)
  • python爬虫的逆向技术讲解
  • Cookie 和 Session
  • 【WebSocket✨】入门之旅(四):WebSocket 的性能优化
  • 40分钟的Docker实战攻略
  • JavaScript 运算符完全指南:从基础到位运算
  • visual studio快捷键
  • 第21课:成本优化与资源管理
  • 5【鸿蒙/OpenHarmony/NDK】应用太卡?用 Node-API 异步任务解决:从卡顿根源到流畅方案
  • 利用OpenCV进行对答题卡上的答案进行识别的案例
  • 如何用 Rust 实现的基础屏幕录制程序?
  • 认知语义学隐喻理论对人工智能自然语言处理中深层语义分析的赋能与挑战
  • 常见索引失效场景及原因分析(含示例)
  • 嵌入式Linux常用命令
  • xtuoj Rectangle
  • C++内存管理:new与delete的深层解析
  • Nginx 实战系列(十)—— 搭建LNMP环境与部署Discuz!社区论坛指南
  • 计算机视觉案例分享之答题卡识别