redis基础知识概览

81 阅读2分钟

一、数据结构

常用的若干种

  • string 最基础的类型,二进制字符串,可存放任何对象
  • list 链表 博文评论区
  • set 集合 用户IP地址
  • zset 有序集合,score排序,复杂度logn 粉丝量排行榜
  • hashset 哈希表,存放键值对
  • hyperloglog 基数统计,返回近似结果 论坛访问ip

二、持久化

2.1 RDB

某个时间点数据集的快照

2.2 AOF

保存 写命令

  • 命令追加 写入aof_buf
  • 文件写入 写入内存aof文件
  • 文件同步 写入磁盘aof文件
    • 设置appendsync字段
      • always 立即同步磁盘
      • no 由操作系统决定同步时机
      • everysecond 子线程每秒刷磁盘

重写 aof文件过大

  • 开子进程,去掉冗余命令,写入新的aof文件
  • 期间新的写操作 存入 重写缓冲区,上一步完成后,缓冲区命令添加至aof文件尾部,原子性操作替换原aof文件

三、高可用

3.1 主从复制

master可读可写,slave只可读

同步基本流程

  • 复制初始化 建立连接、身份验证
  • 文件同步
    • 全量复制
      • 主 生成rdb文件,发送给 从
      • 期间 新写入命令,传输 给 从
    • 增量复制
      • 通信 offset,判断 主 缓存 中 是否 有命令,有则增量,无则全量
      • 基于 offset 开始发送命令
  • 命令传播
    • 主从 通信 复制偏移量 offset
    • 主 基于 offset 发送 命令,从 执行

3.2 集群

key进行分片,片内主从复制

共16384个slot,key会映射到不同slot,不同的节点覆盖不同slot,需确保集群能覆盖到所有slot

数据丢失原因

  • 异步复制
    • 原master 写命令 未 传播至 slave,网络延迟导致选择 新的master,写操作丢失
  • 脑裂

四、清内存

4.1 淘汰

内存不够,需淘汰key

  • 不删除
  • lru 分过期、不分过期
  • 随机 分过期、不分过期
  • ttl 过期中最短

4.2 过期

4.2.1 基本策略

惰性 + 定时

  • 惰性 当key被访问且过期,删除
  • 定时 定期清理过期key
4.2.2 特殊处理
  • aof
    • 写入aof文件 key被删除则追加del命令
    • aof重写,检查过期
  • rdb
    • 生成rbd文件,检查
    • 载入rdb
      • 主 检查
      • 从 不检查
  • 主从复制
    • 主 发生 过期删除,发送del命令到从
    • 从 收到 访问 过期key的命令,不执行删除