Redis 的学习总结

Coding Alan 3年前 (2022-04-29) 1273次浏览 0个评论 扫描二维码

“两大维度”就是指系统维度和应用维度,“三大主线”也就是指高性能、高可靠和高可扩展(可以简称为“三高”)。

Redis 的问题画像图

Redis 的学习总结

Redis 使用一个哈希表来保存所有键值对,这个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。

Redis 的学习总结

Redis 的学习总结

集合类型的底层数据结构主要有 5 种:整数数组、双向链表、哈希表、压缩列表和跳表。

Redis 的学习总结

Redis 单线程是指它对网络 IO 和数据读写的操作采用了一个线程,而采用单线程的一个核心原因是避免多线程开发的并发控制问题。单线程的 Redis 也能获得高性能,跟多路复用的 IO 模型密切相关,因为这避免了 accept() 和 send()/recv() 潜在的网络 IO 操作阻塞点。(Redis 6.0开始,网络请求的解析可以用多线程来执行,但是读写内存还是一个线程。)

Redis 的学习总结

基于多路复用的Redis高性能IO模型

Redis 的持久化主要有两大机制: AOF(Append Only File)日志和 RDB (Redis Database)快照。

AOF 配置项 appendfsync 的三个可选值:

  • Always,同步写回
  • Everysec,每秒写回
  • No,操作系统控制的写回

Redis 的学习总结

主从相关

Redis 的学习总结

主从库第一次同步的流程

主库使用环形缓冲区repl_backlog_buffer记录写到的位置(注意环形缓冲区有可能写满而产生覆盖,可调整参数repl_backlog_size),从库记录自己已经读到的位置。在主从库连接恢复后,从库会向主库发送 psync 命令以及读取的位置slave_repl_offset,主库会判断自己的master_repl_offset 和 slave_repl_offset 之间的差距。

Redis 的学习总结

Redis repl_backlog_buffer的使用

Redis 的学习总结

Redis增量复制流程



在 Redis Cluster 方案中,一个切片集群共有 16384 个哈希槽,首先根据键值对的 key,按照CRC16 算法计算一个 16 bit 的值;然后,再用这个 16bit 值对 16384 取模,得到 0~16383 范围内的模数,每个模数代表一个相应编号的哈希槽。

 

相关链接

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址