《Redis 设计与实现》笔记

《Redis 设计与实现》

📚1、数据结构与对象

📚1.1、动态字符串 SDS

在这里插入图片描述

  • 字符串长度获取O:len
  • 杜绝缓冲区溢出:free
  • 减少修改字符串带来的内存重新分配次数
    • 空间预分配
    • 惰性空间释放
  • 二进制安全
  • 兼容部分C字符串函数

📚1.2、 链表

(img-11571eOU-1656384401106)(img_01.png)]

(img-qxws60fw-1656384401106)(img_9.png)]

  • 双端
  • 无环
  • 带头指针和尾指针
  • 带链表长度计数器
  • 多态

📚1.3、 字典

(img-d428NVom-1656384401106)(img_2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FavM4COx-1656384401107)(img_3.png)]

📚1.4、 跳跃表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9dsy57Oz-1656384401107)(img_4.png)]

  • 前进指针
  • 跨度
  • 后退指针
  • 分值和成员

📚1.5、 整数集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDo6tqqs-1656384401108)(img_5.png)]

📚1.6、 压缩列表

[(img-G2FwN2pR-1656384401108)(img_6.png)]

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YGv6eyCi-1656384401109)(img_8.png)]

📚1.7、 对象

  • 字符串对象:int,raw,embstr
  • 列表对象:ziplist,linkedliost
  • 哈希对象:ziplist,hashtable
  • 集合对象:intset,hashtable,
  • 有序集合对象:ziplist,skiplist
  • 内存回收:引用计数器

📚2、单机数据库实现

  • 过期件删除策略
    • 定时删除
    • 惰性删除
    • 定期删除
  • RDB
    • SAVE:由服务器进程执行
    • BGSAVE:由子进程执行
    • 自动间隔性保存 save 900 1 900S之内对数据库至少修改1次
  • AOF
    • 分为三步:命令追加,文件写入,文件同步
    • AOF重写
  • 事件
    • 文件事件:套接字抽象(accept,read,write,close)
      • I/O多路复用:select,epoll,evport,kqueue
    • 时间事件:定时执行

📚3、多机数据库实现

  • PSYNC
    • 完整同步
    • 部分重同步
      • 复制偏移量
      • 复制积压缓冲区
      • 服务器运行ID
  • Sentinel
  • 集群:cluster

📚4、独立功能的实现

  • 慢查询日志
  • 排序
  • 二进制位数组

📚其他补充

  • 位图
  • HyperLogLog
  • 布隆过滤器
  • Redis-Cell:漏斗限流
  • GeoHash:经纬坐标,距离
  • Scan
  • Stream
  • 近似LRU:随机采样5(可设置)key,淘汰最旧的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tcoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值