第 1 章 初识 Redis

  1. Redis 8个特性:速度快、基于键值对的数据结构服务器、功能丰富、简单稳定、客户端语言多、持久化、主从复制、支持高可用和分布式。
  2. Redis 不是万金油,有些场景不适合 Redis 进行开发。
  3. 开发运维解合以及阅读源码是用好 Redis 的重要方法。
  4. 生产环境中使用配置文件启动 Redis。
  5. 生产环境选取稳定版本的 Redis。
  6. Redis 3.0 是重要的里程碑,发布了 Redis 官方的分布式实现 Redis Cluster。

第 2 章 API 的理解和使用

  1. Redis 提供 5 种数据结构(常用),每种数据结构都有多种内部编码实现。
  2. 纯内存操作、IO 多路复用、单线程架构是造就 Redis 高性能的三个因素。
  3. 由于 Redis 单线程架构,所以需要每个命令能快速执行完,否则会存在阻塞 Redis 的可能,理解 Redis 单线程命令的处理机制是开发运维 Redis 的核心之一。
  4. 批量操作命令能够有效提高命令执行的效率,但要注意每次批量操作的个数和字节数。
  5. 了解每个命令的时间复杂度在开发中至关重要,需要考虑到数据规模对于 Redis 的影响。
  6. persist 命令可以删除任意类型键的过期时间,但是 set 命令也会删除字符串类型键的过期时间,这在开发时会被忽视。
  7. move、dump+restore、migrate 是 Redis 发展过程中三种迁移键的方式,其中 move 基本废弃,migrate 命令用于原子性的方式实现了 dump+restore,并且支持批量操作,是Redis Cluster 实现水平扩容的重要工具。
  8. scan 命令可以解决 keys 命令可能带来的阻塞问题,同时 Redis 还提供了 hscan、sscan、zscan 渐进式遍历 hash、set、zset。

第 3 章 小功能大用处

  1. 慢查询两个重要参数。
  2. 慢查询只计算执行时间,不算网络传输和排队时间。
  3. 有必要定期持久化存放慢查询
  4. redis-cli 一些重要选项
  5. redis-benchmark 的使用方法和重要参数

第 4 章 客户端

  1. RESP 协议
  2. 客户端输入缓冲区不能配置,强制限制在 1G 以内,但不会受到 maxmemory 限制。
  3. 客户端输出缓冲区支持普通客户的、发布订阅客户端、复制客户端,但是不会收到 maxmemory 的限制。
  4. Redis 的 timeout 配置可以自动关闭闲置客户端,tcp-keepalive 参数可以周期性检查关闭无效 TCP 连接。
  5. monitor 命令好用,但大并发下存在输出缓冲区暴涨的可能性。
  6. 理解 Redis 通讯原理和建立完善的监控系统对快速定位客户问题很有帮助。

第 5 章 持久化

  1. Redis 提供了两种持久化方式 RDB 和 AOF。
  2. RDB 使用一次性生成内存快照的方式,产生的文件紧凑压缩比更高,因此读取 RDB 恢复速度更快。由于每次生成 RDB 开销较大,无法做到实时持久化,一般用于冷数据冷备和复制传输。
  3. save 命令会阻塞主线程,不建议使用,bgsave 通过 fork 子进程生成 RDB 避免阻塞。
  4. AOF 通过追加写命令到文件实现持久化,通过 appendfsync 参数可以控制试试/秒级持久化。因为要不断追加写命令,所以 AOF 文件体积逐渐变大,需要定期执行重写操作来降低文件体积。
  5. AOF 重写可以通过 auto-aof-rewrite-min-size 和 auto-aof-rewrite-percentage 参数控制自动触发,也可以通过 bgrewriteaof 命令手动触发。
  6. 子进程执行期间使用 copy-on-write 机制与父进程共享内存,避免内存消耗翻倍。AOF 重写期间还要维护重写缓冲区,保存新的写入命令避免数据丢失。
  7. 持久化阻塞主进程场景有:fork 阻塞和 AOF 追加阻塞。fork 阻塞时间跟内存量和系统有关,AOF 追加阻塞说明磁盘资源紧张。
  8. 单机下部署多个实例时,为了防止出现多个子进程执行重写操作,建议做隔离控制,避免 CPU 和 IO 资源竞争。

第 6 章

  1. 主从复制可以通过 slave of 建立和断开复制流程。
  2. 支持级联复制,全量和增量复制。
  3. 主从节点维护心跳和偏移量检查机制。
  4. Redis 复制为异步,先写主后直接返回客户端,从机有延迟情况。

第 7 章 阻塞

  1. 内在原因:确认主线程是否存在阻塞,检查慢查询等信息,发现不合理使用 API 或数据结构的情况,关注 CPU 使用率防止单核跑满,当磁盘 IO 资源紧张是,AOF 追加也会阻塞主线程。
  2. 外在原因:从 CPU 竞争、内存交换、网络问题等方面检测

第 8 章 理解内存

  1. Redis 实际内存消耗主要包括:键值对象、缓冲区内存、内存碎片。
  2. 通过调整 maxmemory 控制 Redis 最大可用内存。当内存使用超时,根据 maxmemory-policy 控制内存回收策略。
  3. 内存优化思路:
    精简键值对大小,键值字面量精简,实用高效二进制序列化工具;
    适用对象共享池优化小整数对象;
    数据优先使用整数,比字符串节省空间;
    优化字符串使用,避免预分配造成的内存浪费;
    使用 ziplist 压缩编码优化 hash、list 等结构,注意效率和空间的平衡;
    使用 intset 编码优化整数集合;
    使用 ziplist 编码的 hash 结构降低小对象链规模。

第 9 章 哨兵

  1. Sentinel 是 Redis 高可用实现方案:故障发现、故障自动转移、配置中心、客户端通知。
  2. 从 Redis 2.8 版本可用。
  3. 尽可能在不同的物理机上部署 Sentinel 所有节点。
  4. Sentinel 中的 Sentinel 节点个数应该大于等于 3 且最好为奇数。
  5. Sentinel 中的数据节点与普通数据节点没有区别。
  6. 客户端初始化连接的是 Sentinel 节点,但只是配置中心不是代理。
  7. Sentinel 通过三个定时任务实现 Sentinel 节点对于主节点、从节点、其余 Sentinel 节点的监控。
  8. Sentinel 对节点失效判定时分为主客观下线。
  9. 看懂 Sentinel 故障转移日志对 Redis Sentinel 以及问题排查非常有帮助。
  10. Sentinel 实现读写分离高可用可以依赖 Sentinel 节点的消息通知获取 Redis 数据节点的状态变化。

第 10 章 集群

  1. Redis 集群采用虚拟槽方式,将所有的键映射到 16384 个槽中,每一个节点负责一部分槽和相关数据,实现数据和请求的负载均衡。
  2. 集群搭建三个步骤:准备节点,节点握手,分配槽。
  3. 集群内部节点通讯采用 Gossip 协议彼此发送消息,消息分为 ping pong meet fail 等。
  4. 集群伸缩通过在节点之间移动槽和相关数据实现。扩容时潜移槽,收缩时潜移走槽和数据再 cluster forget。
  5. 集群自动转移过程分为故障发现和故障恢复。节点下线分为主观下线和客观下线,当超过半数主节点认为故障节点为主观下线时标记它为客观下线。从节点负责对客观下线的主节点触发故障恢复流程,保证集群可用。
  6. 开发和运维集群过程中常见的问题包括:超大规模集群带宽消耗, pub/sub广播问题,集群节点倾斜问题,手动故障转移,在线迁移等。

其它

安全建议

  1. 根据网络环境决定是否设置 Redis 密码
  2. rename-command 可以伪装命令,但是要注意成本
  3. 合理防火墙是防止攻击的利器
  4. bind 可以将 Redis 的访问绑定到指定的网卡上
  5. 定期备份数据应该作为习惯性操作
  6. 可以适当错开 Redis 默认端口启动
  7. 使用非 ROOT 用户启动 Redis

《Redis开发与运维》各章重点回顾相关推荐

  1. Redis开发与运维 必备-电子书

    Redis开发与运维电子书 fulei出版 链接: https://pan.baidu.com/s/12rlHhOKP7_72GE8a74lN1g 密码: eep2 复制这段内容后打开百度网盘手机Ap ...

  2. 「Redis开发与运维」读书笔记

    第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...

  3. Redis开发与运维笔记_1 初识2 API

    目录 概述 第1章 初识Redis 1.1 盛赞Redis 1.2 Redis特性 1.3 配置.启动.操作.关闭Redis 第2章 API的理解和使用 2.1 预备 2.1.1 全局命令 2.1.2 ...

  4. 《Redis开发与运维》读书笔记--初识Redis(一)

    目录 盛赞Redis Redis特性 redis使用场景 redis可以做什么? redis不可以做什么? 关于用好redis的两点建议 本章重点回顾 写在前面: 想必在写项目的过程中,我们很多时候都 ...

  5. <Redis开发与运维>一书阅读笔记记录

    文章目录 前言 第1章:初始redis 盛赞redis redis特性 redis使用场景 第2章:API的理解和使用 预备知识 全局命令 数据结构和内部编码 单线程架构 字符串 命令 内部编码 典型 ...

  6. 读书笔记:redis开发与运维 基础篇

     redis特性    1>速度快:redis所有数据都是存放在内存中,是redis速度快的主要原因,是有c编写,一般来说用c编写的程序距离操作系统近,执行速度更快,非阻塞I/O,使用epoll ...

  7. 【Redis】《Redis 开发与运维》笔记-Chapter12-开发运维的“ 陷阱”

    十二.开发运维的" 陷阱" 1.Linux配置优化之内存分配控制 1)vm.overcommit_memory Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多 ...

  8. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

  9. Redis理解内存《Redis开发与运维读书笔记》

    文章目录 内存的消耗 内存划分 内存管理 内存优化 内存的消耗 可以使用info memory 查看内存消耗. 内存划分 对象内存 = sizeof(key) + sizeof(value) 应避免使 ...

最新文章

  1. mysql字符集和表字符集_设置数据库的字符集和设置表字段字符集的区别是什么?...
  2. javascript 深度克隆对象
  3. Math.ceil(),Math.floor()与Math.round()三个函数的定义。
  4. linux下用gcc如何生成预处理、汇编等文件
  5. Java注释Override、Deprecated、SuppressWarnings详解
  6. ITK:获取类型的基本信息
  7. mongodb之配置
  8. 2.0 STL泛型编程
  9. 家庭作业(信息学奥赛一本通-T1430)
  10. redis无序集合set类型详解
  11. @async 没有异步_javascript之异步函数
  12. es中的高效文件读取方式
  13. 感谢所有常来我博客的朋友
  14. 谈谈网络游戏中的延迟解决方案
  15. 基于SSM实现旅游住宿和导游系统
  16. chromium/chrome内核修改、SEO快排搭建(2022最新源码)
  17. LEWITT莱维特STREAM4x5、DGT260声卡安装调试教程
  18. filter 无效不起作用
  19. html中的图片路径ie8,IE8下文件上传时获取文件的真实路径
  20. PAKDD 2019 都有哪些重要看点?看这篇文章就够了!...

热门文章

  1. linux内核知识之namespace
  2. Android 查询及设置悬浮窗权限(AppOpsManager )
  3. 斗地主4.0版本发牌
  4. ios beta发布时间表_既然iOS 12已经发布,如何离开iOS Beta
  5. webpack之webpack.config.js配置
  6. 【 python手势识别项目 】百度云计算实现手势识别
  7. 百度地图之行政规划边界出现重复bug。
  8. G450 CPU 升级
  9. 微信公众平台账号资料丢失,如何找回账号密码等登陆信息?
  10. 2021年焊工(初级)考试题及焊工(初级)找解析