Redis 的学习总结

Coding Alan 4年前 (2022-04-29) 1941次浏览 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 范围内的模数,每个模数代表一个相应编号的哈希槽。

常见问题

  1. MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
    一般为意外重启所致,快速解决方案为进入redis-cli,执行config set stop-writes-on-bgsave-error no
  2. 无法远程访问:

 

相关链接

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

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

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

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