Redis介绍

1,142 views
962 views

Published on

通过源码简单介绍redis

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,142
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
26
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Redis介绍

  1. 1. redisyubaofu
  2. 2. 主题● Redis 主要内存结构及主体执流程● Redis rehash 介绍● Redis 持久化● Redis 协议● Redis 应用实例
  3. 3. Redis 是什么● Redis 是 REmote DIctionary Server 的缩写 .● Redis is an open source, advanced key- value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
  4. 4. Redis 应用场景● 对复杂数据结构的支持● sns 中的关系及统计类的应用● top 排名类的应用
  5. 5. Redis 内存数据结构
  6. 6. Redis dict 内存结构
  7. 7. Redis dict 结构源码
  8. 8. Redis key-valeKey 字符串 通过 sds 实现 struct sdshdr {int len; int free;char buf[]; };Value typedef struct redisObject { unsigned type:4;unsigned notused:2; unsigned encoding:4; unsigned lru:22; int refcount; void *ptr;} //redis.h
  9. 9. Redis db
  10. 10. Redis db● Redis 默认 db 数量是 16 个● Client 可以用 select 命令选择 db, 之后的操 作都在这个 db 上● 默认第 1 个 db, 即索引为 0 的 db
  11. 11. Redis 主流程
  12. 12. Redis 两个重要的函数 r
  13. 13. Redis 两个重要的函数● ServerCron 定时函数 每 100ms 执行● ServerCron 工作 如果当前没有后台运行 dump 数据保存到文的 进程,则可以根据内存使用情况重新调整 hashTables 大小 记录些日志 判断是否有正在进行 dump 数据到文件的后台 进程 完成主从复制
  14. 14. Redis io 处理
  15. 15. Redis rehash● Dict 结构里 ht[2] 属性● 默认情况下 ht[0],reash 时使用 ht[1]● Rehash 时使用分批 rehash , 每次只 rehash 部分● bucket 初始为 4, 根据需要以 2 的 n 次方增加 和 java hashmap 扩容大小一样。
  16. 16. Redis rehash 扩容条件● _dictExpandIfNeeded 函数判断是否扩容 初始化时 (Size/bucket >=1&&(dict_can_resize|| size/bucked>5))
  17. 17. Redis 扩容判断源码
  18. 18. Redis 扩容 -切换 ht re
  19. 19. Redis 持久化方式● Dump 出整个库● AOF 模式 ( 没研究,这里不细讲 )● 主从复制
  20. 20. Redis dump● 主进程 fork 出一个子进程,利于 copy on write ,子进程 dump 整个库● 触发条件 save 主进程 dump bgsave fork 出子进程来 dump slave 连接了● 配置文件里设置 save 900 1
  21. 21. Redis dump 源码解析 1
  22. 22. Reids dump 源码解析 2
  23. 23. Redis dump 解析 3
  24. 24. Redis 主从复制● Slave 在命令行执行 slaveof ip port 或在配置文件里配置● Slave 时 master 要执行 dump● 同步完成后,以后每次按需复制● 没有增量复制的方式,每次 slave down 后,要 重新从 master 复制整个库
  25. 25. Redis 重启● 从 dump.rdb 文件里读取数据,重建整个库
  26. 26. Redis 通信 协议● *<number of arguments> CR LF● $<number of bytes of argument 1> CR LF● <argument data> CR LF● ...● $<number of bytes of argument N> CR LF● <argument data> CR LF
  27. 27. Redis pipelining 模式● 一次发送多个命令,减少网络传输● 服务器将命令放到 queue, 结果按请求顺序返回 给 client● 内部 api 数据统计就采用了 pipelining
  28. 28. Redis 应用实例
  29. 29. Redis 应用
  30. 30. Redis 各数据类型结构● Redis 各数据结构内存结构 ( 还没研究 )
  31. 31. Thanks
  32. 32. 参考资料● Redis 官网● Redis 源代码● 网上分析 redis 的文章

×