跳转至

146-Redis核心技术与实战-146-Redis核心技术与实战

  •  146-Redis核心技术与实战|200
  • 书名: 146-Redis核心技术与实战
  • 作者: 146-Redis核心技术与实战
  • 简介:
  • 出版时间
  • ISBN:
  • 分类:
  • 出版社:

高亮划线

146-Redis核心技术与实战

开篇词 | 这样学Redis,才能技高一筹

01 | 基本架构:一个键值数据库包含什么?

02 | 数据结构:快速的Redis有哪些慢操作?

03 | 高性能IO模型:为什么单线程Redis能那么快?

04 | AOF日志:宕机了,Redis如何避免数据丢失?

05 | 内存快照:宕机后,Redis如何实现快速恢复?

  • 📌 Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法。简单来说,内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。这样一来,快照不用很频繁地执行,这就避免了频繁 fork 对主线程的影响。而且,AOF 日志也只用记录两次快照间的操作,也就是说,不需要记录所有操作了,因此,就不会出现文件过大的情况了,也可以避免重写开销。如下图所示,T1 和 T2 时刻的修改,用 AOF 日志记录,等到第二次做全量快照时,就可以清空 AOF 日志,因为此时的修改都已经记录到快照中了,恢复时就不再用日志了。 ^7-15224-16229

    • ⏱ 2024-05-28 12:41:34
  • 📌 最后,关于 AOF 和 RDB 的选择问题,我想再给你提三点建议:数据不能丢失时,内存快照和 AOF 的混合使用是一个很好的选择;如果允许分钟级别的数据丢失,可以只使用 RDB;如果只用 AOF,优先使用 everysec 的配置选项,因为它在可靠性和性能之间取了一个平衡。 ^7-17820-18521

    • ⏱ 2024-05-28 12:42:33

06 | 数据同步:主从库如何实现数据一致?

  • 📌 其实是有的,这就是“主 - 从 - 从”模式。在刚才介绍的主从库模式中,所有的从库都是和主库连接,所有的全量复制也都是和主库进行的。现在,我们可以通过“主 - 从 - 从”模式将主库生成 RDB 和传输 RDB 的压力,以级联的方式分散到从库上。简单来说,我们在部署主从集群的时候,可以手动选择一个从库(比如选择内存资源配置较高的从库),用于级联其他的从库。然后,我们可以再选择一些从库(例如三分之一的从库),在这些从库上执行如下命令,让它们和刚才所选的从库,建立起主从关系。[插图]这样一来,这些从库就会知道,在进行同步时,不用再和主库进行交互了,只要和级联的从库进行写操作同步就行了,这就可以减轻主库上的压力,如下图所示:[插图] ^8-12704-13994

    • ⏱ 2024-05-28 12:52:48
  • 📌 当主从库断连后,主库会把断连期间收到的写操作命令,写入 replication buffer,同时也会把这些操作命令也写入 repl_backlog_buffer 这个缓冲区。 ^8-17029-17117

    • ⏱ 2024-05-28 12:58:27
  • 📌 我特别建议你留意一下 repl_backlog_size 这个配置参数。如果它配置得过小,在增量复制阶段,可能会导致从库的复制进度赶不上主库,进而导致从库重新进行全量复制。所以,通过调大这个参数,可以减少从库在网络断连时全量复制的风险。 ^8-23787-23905

    • ⏱ 2024-05-28 12:59:49

07 | 哨兵机制:主库挂了,如何不间断服务?

  • 📌 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。 ^9-3477-3550

    • ⏱ 2024-05-28 13:02:51
  • 📌 我们再回顾下这个流程。首先,哨兵会按照在线状态、网络状态,筛选过滤掉一部分不符合要求的从库,然后,依次按照优先级、复制进度、ID 号大小再对剩余的从库进行打分,只要有得分最高的从库出现,就把它选为新主库。 ^9-19741-19843

    • ⏱ 2024-05-28 19:26:24

08 | 哨兵集群:哨兵挂了,主从库还能切换吗?

09 | 切片集群:数据增多了,是该加内存还是加实例?

  • 📌 fork 在执行时会阻塞主线程。数据量越大,fork 操作造成的主线程阻塞的时间越长。 ^11-1809-1853

    • ⏱ 2024-05-28 20:02:13
  • 📌 在 Redis Cluster 方案中,一个切片集群共有 16384 个哈希槽,这些哈希槽类似于数据分区,每个键值对都会根据它的 key,被映射到一个哈希槽中 ^11-9566-9645

    • ⏱ 2024-05-28 20:08:28

10 | 第1~9讲课后思考题答案及常见问题答疑

  • 📌 主库会给每个从库建立一个客户端,所以 replication buffer 不是共享的,而是每个从库都有一个对应的客户端。 ^12-30614-30675

    • ⏱ 2024-05-29 07:38:36
  • 📌 repl_backlog_buffer 是一块专用 buffer,在 Redis 服务器启动后,开始一直接收写操作命令,这是所有从库共享的。主库和从库会各自记录自己的复制进度,所以,不同的从库在进行恢复时,会把自己的复制进度(slave_repl_offset)发给主库,主库就可以和它独立同步。 ^12-30858-31006

    • ⏱ 2024-05-29 07:39:27

11 | “万金油”的String,为什么不好用了?

12 | 有一亿个keys要统计,应该用哪种集合?

13 | GEO是什么?还可以定义新的数据类型吗?

14 | 如何在Redis中保存时间序列数据?

15 | 消息队列的考验:Redis有哪些解决方案?

16 | 异步机制:如何避免单线程模型的阻塞?

17 | 为什么CPU结构也会影响Redis的性能?

18 | 波动的响应延迟:如何应对变慢的Redis?(上)

19 | 波动的响应延迟:如何应对变慢的Redis?(下)

20 | 删除数据后,为什么内存占用率还是很高?

21 | 缓冲区:一个可能引发“惨案”的地方

22 | 第11~21讲课后思考题答案及常见问题答疑

23 | 旁路缓存:Redis是如何工作的?

24 | 替换策略:缓存满了怎么办?

25 | 缓存异常(上):如何解决缓存和数据库的数据不一致问题?

26 | 缓存异常(下):如何解决缓存雪崩、击穿、穿透难题?

27 | 缓存被污染了,该怎么办?

28 | Pika: 如何基于SSD实现大容量Redis?

29 | 无锁的原子操作:Redis如何应对并发访问?

30 | 如何使用Redis实现分布式锁?

31 | 事务机制:Redis能实现ACID属性吗?

32 | Redis主从同步与故障切换,有哪些坑?

33 | 脑裂:一次奇怪的数据丢失

34 | 第23~33讲课后思考题答案及常见问题答疑

35 | Codis VS Redis Cluster:我该选择哪一个集群方案?

36 | Redis支撑秒杀场景的关键技术和实践都有哪些?

37 | 数据分布优化:如何应对数据倾斜?

38 | 通信开销:限制Redis Cluster规模的关键因素

39 | Redis 6.0的新特性:多线程、客户端缓存与安全

40 | Redis的下一步:基于NVM内存的实践

41 | 第35~40讲课后思考题答案及常见问题答疑

加餐(一)| 经典的Redis学习资料有哪些?

加餐(七) | 从微博的Redis实践中,我们可以学到哪些经验?

加餐(三)| Kaito:我希望成为在压力中成长的人

加餐(二)| Kaito:我是如何学习Redis的?

加餐(五) | Redis有哪些好用的运维工具?

加餐(六)| Redis的使用规范小建议

加餐(四) | Redis客户端如何与服务器端交换命令和数据?

期中测试题 | 一套习题,测出你的掌握程度

期中测试题答案 | 这些问题,你都答对了吗?

结束语 | 从学习Redis到向Redis学习

读书笔记

本书评论