Redis 02

news2025/4/2 23:12:57

  今天是2025/04/01 20:13 day 16

总路线请移步主页Java大纲相关文章

今天进行Redis 3,4,5 个模块的归纳

首先是Redis的相关内容概括的思维导图


3. 持久化机制(深度解析)

3.1 RDB(快照)

  • 核心机制

    • 触发条件

      • 手动触发:SAVE(阻塞主线程)或BGSAVE(后台fork子进程生成快照)。

      • 自动触发:根据配置规则(如save 900 1表示900秒内至少1次修改)。

    • 文件生成:生成二进制文件dump.rdb,包含某一时刻的数据全集。

    • 内存优化:子进程通过写时复制(Copy-On-Write)技术避免全量内存拷贝。

  • 优缺点

    • 优点

      • 文件紧凑,恢复速度快。

      • 适合冷备和灾难恢复。

    • 缺点

      • 可能丢失最后一次快照后的数据(取决于触发频率)。

      • 大数据量时BGSAVE的fork操作可能阻塞主线程(内存越大阻塞时间越长)。

  • 配置优化

    # redis.conf
    dbfilename dump.rdb        # RDB文件名
    dir /var/lib/redis         # 存储路径
    stop-writes-on-bgsave-error yes  # 磁盘满时禁止写入
    rdbcompression yes         # 启用压缩

3.2 AOF(追加日志)

  • 核心机制

    • 日志记录:以文本格式记录所有写操作命令(如SETHSET)。

    • 重写机制:通过BGREWRITEAOF压缩日志,删除冗余命令(如多次INCR合并为最终值)。

    • 同步策略

      • appendfsync always:每次写操作同步到磁盘(数据最安全,性能最低)。

      • appendfsync everysec:每秒同步(默认,平衡安全与性能)。

      • appendfsync no:由操作系统决定(性能最高,可能丢失最多数据)。

  • 优缺点

    • 优点:数据丢失风险低(最多丢失1秒数据)。

    • 缺点

      • 文件体积大,恢复速度慢。

      • 频繁写入可能影响性能(尤其是always模式)。

  • 配置优化

    # redis.conf
    appendonly yes             # 启用AOF
    appendfilename "appendonly.aof"
    auto-aof-rewrite-percentage 100  # 文件增长100%后触发重写
    auto-aof-rewrite-min-size 64mb   # 最小重写文件大小

3.3 混合持久化(Redis 4.0+)

  • 工作机制

    • 快照数据(RDB格式) + 增量AOF日志,保存在同一个AOF文件中。

    • 重启时先加载RDB快照,再重放后续AOF命令。

  • 优势

    • 结合RDB的快速恢复和AOF的低数据丢失风险。

    • AOF文件可读性增强(RDB头部 + 文本日志)。

  • 启用方式

    aof-use-rdb-preamble yes  # 在redis.conf中配置

4. 高可用与集群(深度解析)

4.1 主从复制

  • 核心流程

    1. 全量同步

    • Slave发送PSYNC命令请求同步。

    • Master fork子进程生成RDB文件并发送给Slave。

    • Slave清空旧数据,加载RDB文件。

    1. 增量同步

    • Master将后续写命令存入复制缓冲区(Replication Buffer)。

    • Slave持续接收并执行缓冲区中的命令。

  • 配置示例

    # Slave节点配置
    replicaof 192.168.1.100 6379  # 指定Master地址
    replica-read-only yes         # Slave只读
  • 常见问题

    • 复制延迟:网络波动或Master写入量过大导致缓冲区溢出(需监控repl_backlog)。

    • 脑裂问题:网络分区时出现多个Master(需结合哨兵解决)。


4.2 哨兵(Sentinel)

  • 核心功能

    • 监控:定期检查Master/Slave健康状态。

    • 故障转移:Master宕机时,自动选举新Master。

    • 通知:通过Pub/Sub频道向客户端发送故障事件。

  • 选举机制

    1. Sentinel通过Raft协议选举Leader。

    2. Leader Sentinel从Slave中选出新Master(优先级 + 复制偏移量)。

  • 配置示例

    # sentinel.conf
    sentinel monitor mymaster 192.168.1.100 6379 2  # 监控名为mymaster的集群,2表示至少2个Sentinel同意故障判定
    sentinel down-after-milliseconds mymaster 5000   # 5秒无响应判定为宕机
    sentinel failover-timeout mymaster 60000         # 故障转移超时时间

4.3 Cluster集群

  • 数据分片

    • 哈希槽分配:16384个槽,通过CRC16(key) % 16384计算所属槽位。

    • 节点管理:每个节点负责部分槽位,支持动态迁移(CLUSTER ADDSLOTS)。

  • 节点通信

    • Gossip协议:节点间交换槽位、状态信息,最终一致性。

    • 重定向机制:客户端访问错误节点时,返回MOVEDASK错误引导重试。

  • 故障转移

    • 从节点通过选举升级为主节点(类似哨兵机制)。

    • 集群需至少包含3主3从以保证高可用。

  • 操作命令

    CLUSTER NODES                  # 查看集群节点信息
    CLUSTER FAILOVER [FORCE]       # 手动触发故障转移
    CLUSTER RESET HARD/SOFT        # 重置集群节点

5. 事务与Lua脚本(深度解析)

5.1 事务

  • 执行流程

    1. MULTI开启事务。

    2. 缓存命令(命令不会立即执行)。

    3. EXEC提交事务(原子性执行所有命令)。

    4. DISCARD取消事务。

  • 特性与限制

    • 非原子性:单条命令原子执行,但事务可能部分失败(如语法错误)。

    • 无回滚机制:需开发者自行处理错误(如通过WATCH实现乐观锁)。

  • 乐观锁示例

    WATCH balance               # 监控balance键
    MULTI
    DECRBY balance 100         # 扣减余额
    EXEC                       # 如果balance被其他客户端修改,此处返回nil

5.2 Lua脚本

  • 核心优势

    • 原子性:脚本执行期间不会被其他命令打断。

    • 减少网络开销:复杂逻辑单次提交,避免多次RTT(Round-Trip Time)。

  • 典型场景

    • 分布式锁续期

      -- KEYS[1]=锁名称,ARGV[1]=线程标识,ARGV[2]=过期时间
      if redis.call("GET", KEYS[1]) == ARGV[1] then
          return redis.call("EXPIRE", KEYS[1], ARGV[2])
      else
          return 0
      end
    • 限流算法(令牌桶)

      -- KEYS[1]=限流key,ARGV[1]=令牌容量,ARGV[2]=填充速率(秒)
      local tokens = tonumber(redis.call("HGET", KEYS[1], "tokens") or ARGV[1])
      local last_time = tonumber(redis.call("HGET", KEYS[1], "last_time") or os.time())
      local now = os.time()
      local new_tokens = math.min(ARGV[1], tokens + (now - last_time) * ARGV[2])
      if new_tokens < 1 then
          return 0  # 无可用令牌
      else
          redis.call("HSET", KEYS[1], "tokens", new_tokens - 1)
          redis.call("HSET", KEYS[1], "last_time", now)
          return 1
      end
      
  • 注意事项

    • 脚本复杂度:避免长耗时操作(如KEYS命令),防止阻塞主线程。

    • 沙盒安全:Lua脚本无法直接调用系统命令或文件操作。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2326834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

unity UI管理器

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events;// UI界面基类 public abstract class UIBase : MonoBehaviour {[Header("UI Settings")]public bool keepInStack true; // 是否保留在界面栈中public …

STRUCTBERT:将语言结构融入预训练以提升深度语言理解

【摘要】最近&#xff0c;预训练语言模型BERT&#xff08;及其经过稳健优化的版本RoBERTa&#xff09;在自然语言理解&#xff08;NLU&#xff09;领域引起了广泛关注&#xff0c;并在情感分类、自然语言推理、语义文本相似度和问答等各种NLU任务中达到了最先进的准确率。受到E…

16-CSS3新增选择器

知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义&#xff0c;使文档变得更加简洁&#xff1f; 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…

SQL Server:用户权限

目录 创建 & 删除1. 创建用户命令整理创建 admin2 用户创建 admin_super 用户 2. 删除用户命令删除 admin2 用户删除 admin_super 用户 3. 创建时权限的区别admin2 用户权限admin_super 用户权限 查看方法一&#xff1a;使用对象资源管理器&#xff08;图形化界面&#xff…

服务器数据恢复—误格式化NTFS文件系统分区别慌,NTFS数据复活秘籍

NTFS文件系统下格式化在理论上不会对数据造成太大影响&#xff0c;但有可能造成部分文件目录结构丢失的情况。下面介绍一个人为误操作导致服务器磁盘阵列中的NTFS文件系统分区被格式化后的服务器数据恢复案例。 服务器数据恢复过程&#xff1a; 1、将故障服务器连接到一台备份…

【3】数据结构的双向链表章

目录标题 双向链表的定义双向链表的初始化双向链表的创建插入操作删除操作 双向链表总代码与调试 双向链表的定义 结点结构组成&#xff1a;数据域&#xff08;data&#xff09;、指针域&#xff08;pre&#xff09;、指针域&#xff08;next&#xff09;。其中&#xff0c; da…

蓝桥杯杯赛-日期模拟

知识点 处理日期 1. 按天枚举日期&#xff1a;逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年&#xff1a;正确判断闰年条件。闰年定义为&#xff1a;年份 满足以下任意一个条件&#xff1a;(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…

搭建开源笔记平台:outline

折腾的意义 为什么要自己搭建一个笔记平台&#xff1f;没理由&#xff0c;就是突然想试试。有时候突然有个想法&#xff0c;搜了一下正好有合适的方案&#xff0c;就顺手试一下。 其实已经有很多成熟的笔记软件&#xff0c;例如Notion/OneNote&#xff0c;但谁不想要一个数据完…

Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能

Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具&#xff0c;帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API&#xff0c;或者叫做一个工具类&#xff0c;包含一系列静态…

电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法

调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中&#xff0c;合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一&#xff1a;使用快捷键 大多数笔…

presto行转列

presto的行列转换和spark、hive一样也是通过外链语句实现的&#xff0c;只不过语法和关键子有点不同&#xff0c;如下 with tmp1 as (select 1,2,3 as a1,4,5,6 as a2 ) select * from tmp1 cross join unnest(split(tmp1.a1, ,),split(tmp1.a2, ,) ) as b(a1s,a2s) 结果如下

51c自动驾驶~合集15

我自己的原文哦~ https://blog.51cto.com/whaosoft/11720657 #DRAMA 首个基于Mamba的端到端运动规划器&#xff08;新加坡国立&#xff09; 运动规划是一项具有挑战性的任务&#xff0c;在高度动态和复杂的环境中生成安全可行的轨迹&#xff0c;形成自动驾驶汽车的核心能…

拼多多 anti-token unidbg 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 版本7.3-7.4 都试过加密没什…

【Git】5 个分区的切换方式及示例

目录 1. **工作区&#xff08;Working Directory&#xff09;**2. **缓存区&#xff08;Stage/Index&#xff09;**3. **本地仓库&#xff08;Local Repository&#xff09;**4. **远程仓库&#xff08;Remote Repository&#xff09;**5. **贮藏区&#xff08;Stash&#xff0…

Java高频面试之并发编程-02

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;进程和线程的区别是什么&#xff1f; 1. 资源分配与独立性 进程&#xff1a; 独立性&#xff1a;每个进程拥有独立的内存…

openwebui和keycloak集成,使用keycloak的用户名和密码登录

1&#xff0c;实现效果 使用keycloak定义的用户名和密码&#xff0c;直接登录openwebui 2&#xff0c;实现原理 keycloak中用户信息中包含用户名和密码&#xff0c;以及email。 使用keycloak中的用户名和密码登录之后&#xff0c;会用email创建一个openwebui的账号。之后每次…

【区块链安全 | 第八篇】多签机制及恶意多签

部分参考&#xff1a;慢雾科技 文章目录 为什么需要多签多签机制Tron钱包下的恶意多签Tron 钱包多签权限分类Tron 多签机制的运作方式 恶意多签的过程黑客通过多签机制控制账户黑客剥夺用户权限&#xff0c;完全控制账户 恶意多签成因 在区块链中&#xff0c;多签&#xff08;M…

二月公开赛Web-ssrfme

目录 环境搭建 题目分析 分析代码 解题过程 Redis未授权访问 寻找Flag 环境搭建 进入含有docker-compose.yml的文件内&#xff0c;拉取容器镜像 docker-compose up -d 题目分析 访问容器地址172.25.254.200:8091查看题目 分析代码 url通过GET请求访问界面&#xff0c…

告别枯燥工作,走向自动化

嘿&#xff0c;小伙伴们&#xff01;今天给你们介绍两款超实用的RPA办公自动化软件&#xff0c;用它们&#xff0c;再也不用像机器一样做重复劳动啦&#xff0c;超省时间&#xff01; 工具名称&#xff1a;影刀RPA&#xff08;类似产品&#xff0c;八爪鱼 RPA&#xff0c;操作上…

可信数据空间:构筑安全可控数据流通

前言&#xff1a;可信数据空间是一种数据基础设施&#xff0c;发展可信数据空间是全国及各地数据基础设施建设的重要方面。国内数据空间的探索和实践仍然数据探索阶段。本期分享&#xff1a;可信数据空间构筑安全可控数据流通&#xff0c;包括可信数据空间技术介绍、如何助力数…