Your SlideShare is downloading. ×
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Redis介绍
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Redis介绍

857

Published on

通过源码简单介绍redis

通过源码简单介绍redis

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

No Downloads
Views
Total Views
857
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
23
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. redisyubaofu
  • 2. 主题● Redis 主要内存结构及主体执流程● Redis rehash 介绍● Redis 持久化● Redis 协议● Redis 应用实例
  • 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. Redis 应用场景● 对复杂数据结构的支持● sns 中的关系及统计类的应用● top 排名类的应用
  • 5. Redis 内存数据结构
  • 6. Redis dict 内存结构
  • 7. Redis dict 结构源码
  • 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. Redis db
  • 10. Redis db● Redis 默认 db 数量是 16 个● Client 可以用 select 命令选择 db, 之后的操 作都在这个 db 上● 默认第 1 个 db, 即索引为 0 的 db
  • 11. Redis 主流程
  • 12. Redis 两个重要的函数 r
  • 13. Redis 两个重要的函数● ServerCron 定时函数 每 100ms 执行● ServerCron 工作 如果当前没有后台运行 dump 数据保存到文的 进程,则可以根据内存使用情况重新调整 hashTables 大小 记录些日志 判断是否有正在进行 dump 数据到文件的后台 进程 完成主从复制
  • 14. Redis io 处理
  • 15. Redis rehash● Dict 结构里 ht[2] 属性● 默认情况下 ht[0],reash 时使用 ht[1]● Rehash 时使用分批 rehash , 每次只 rehash 部分● bucket 初始为 4, 根据需要以 2 的 n 次方增加 和 java hashmap 扩容大小一样。
  • 16. Redis rehash 扩容条件● _dictExpandIfNeeded 函数判断是否扩容 初始化时 (Size/bucket >=1&&(dict_can_resize|| size/bucked>5))
  • 17. Redis 扩容判断源码
  • 18. Redis 扩容 -切换 ht re
  • 19. Redis 持久化方式● Dump 出整个库● AOF 模式 ( 没研究,这里不细讲 )● 主从复制
  • 20. Redis dump● 主进程 fork 出一个子进程,利于 copy on write ,子进程 dump 整个库● 触发条件 save 主进程 dump bgsave fork 出子进程来 dump slave 连接了● 配置文件里设置 save 900 1
  • 21. Redis dump 源码解析 1
  • 22. Reids dump 源码解析 2
  • 23. Redis dump 解析 3
  • 24. Redis 主从复制● Slave 在命令行执行 slaveof ip port 或在配置文件里配置● Slave 时 master 要执行 dump● 同步完成后,以后每次按需复制● 没有增量复制的方式,每次 slave down 后,要 重新从 master 复制整个库
  • 25. Redis 重启● 从 dump.rdb 文件里读取数据,重建整个库
  • 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. Redis pipelining 模式● 一次发送多个命令,减少网络传输● 服务器将命令放到 queue, 结果按请求顺序返回 给 client● 内部 api 数据统计就采用了 pipelining
  • 28. Redis 应用实例
  • 29. Redis 应用
  • 30. Redis 各数据类型结构● Redis 各数据结构内存结构 ( 还没研究 )
  • 31. Thanks
  • 32. 参考资料● Redis 官网● Redis 源代码● 网上分析 redis 的文章

×