redis 开发与运维

🚕 redis 介绍

1. 特性

  • 速度快

    • 单线程
    • 内存执行
  • kv 形式

  • 功能丰富

    • 事物
    • 支持 Lua 脚本
    • 发布订阅模式
    • 流水线
    • 过期策略
  • 客户端语言多

  • 持久化

    • RDB
    • AOF
  • 主从复制

  • 高可用和分布式

    • sentinel
    • cluster

2. 使用场景

  • 缓存
  • 排行榜
  • 计数器
  • 社交网络
  • 消息队列
  • 地理位置
  • 点击签到

3. 用好建议

  • 阅读源码
  • 多使用且规模大的redis

4. 安装 redis

🐰 API 的理解和使用

1. string

  • 内部编码

    • int
    • embstr
    • raw
  • 使用场景

    • 缓存
    • 计数
    • 共享session
    • 限速

2. hash

  • 内部编码

    • ziplist
    • hashtable
  • 使用场景

    • 一对多

3. list

  • 内部编码

    • ziplist
    • linkedlist
  • 使用场景

    • 文章列表
    • 消息队列

4. set

  • 内部编码

    • intset
    • hashtable
  • 使用场景

    • 社交
    • 推荐

5. zset

  • 内部编码

    • ziplist
    • skiplist
  • 使用场景

    • 排行榜

🗽 小功能

1. 慢查询

2. redis shell

3. pipline

4. 事务

5. 发布订阅

6. 高级数据结构

  • bitmaps
  • HyperLogLog
  • GEO

🍄 客户端连接

1. Jedis

2. redis-py

3. 客户端案例分析

  • redis 内存陡增
  • 周期性连接超时

🐡 持久化

1. RDB

  • 二进制文件保存在硬盘
  • 优缺点

    • 优点

      • 用于灾难恢复
      • 恢复速度比 AOF 快
    • 缺点

      • 持久化需要 fork 子线程、频繁执行成本高
      • 多 redis 版本中,格式没有统一,导致不能兼容其他版本redis的恢复

2. AOF

  • 文本格式的独立日志记录命令
  • 优缺点

    • 优点

      • 可以实时更新至最新
      • 具有可读性
      • 同个格式只会追加,避免二次开销
    • 缺点

      • 占空间大
      • 追加命令记录是阻塞的

3. 问题定位与优化

  • 子线程的监控

    • CPU 监控
    • 内存监控
  • 硬盘监控

🐯 复制

1. 拓扑

  • 一主一从
  • 一主多从
  • 树状主从

2. 复制原理

  • 保存主节点 master
  • 定时任务维护复制相关逻辑
  • 发送 ping 命令,确认可用
  • 如果设置了主节点的密码权限校验,则会进行这一步
  • 同步数据集

    • 加载 RDB 文件

3. 数据同步

  • 全量复制

    • sync
  • 部分复制

    • psync

4. 可能出现的问题

  • 数据延迟
  • 读到过期键
  • 从节点故障
  • 主从配置不一致
  • 全量复制
  • 复制风暴

    • 单节点复制风暴
    • 单机器复制风暴

🐹 阻塞问题

1. API 或数据结构使用不恰当

  • 使用 keys
  • 大对象放到一个数据结构里

2. CPU 饱和

  • 使用了高时间复杂度的命令
  • 内存过度优化

3. 持久化阻塞

  • fork 阻塞
  • AOF 刷盘阻塞

4. CPU 竞争

  • 多个密集型 CPU 应用部署到一台上面

5. 内存交换

  • 内存数据被系统移到硬盘读写

6. 网络问题

  • 连接拒绝
  • 网络闪断
  • 网络延迟
  • 连接溢出

🗻 内存管理

1. 内存消耗地方

  • 对象内存消耗
  • 缓冲内存消耗
  • 子进程内存小孩
  • 内存碎片

2. 内存管理

  • 设置内存上限

    • 超过内存上限则触发 LRU 删除策略释放内存
  • 动态调整内存

  • 设置回收策略

    • TTL

3. 内存优化

  • 理解 redisObject 对象
  • 缩减 key 长度
  • 二禁止放入 value
  • 共享内存池
  • 编码优化
  • 控制键的数量

🍮 哨兵模式

1. 过程

  • sentinel 监控节点
  • 循环定时任务发送 ping 确认是否故障
  • 节点下线

    • 主观下线
    • 客观下线

      • 所有 sentinel 同意下线
  • sentinel 选举 leader

  • sentinel leader 负责故障转移
  • sentinel leader 重新选择 master

    • 选择复制偏移量最大的
    • 选择优先级别最大的

🎉 集群模式

1. 分区

  • 取模 16383 成为分区

2. 节点通信

  • 每个节点会向特定的节点发送ping
  • 接受到 ping 则返回 pong
Copyright © Sinsy Note 2021            updated 2021-08-10 00:20:51

results matching ""

    No results matching ""