Redis介绍

1,416 views

Published on

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

No Downloads
Views
Total views
1,416
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
54
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Redis介绍

  1. 1. Redis介绍 丹臣2011-3-31
  2. 2. Redis是什么?• 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.• Redis author : antirez , from Italy http://antirez.com/
  3. 3. Redis主体结构就是实现一个hash tableKey的类型为sdsValue的类型为redisobject
  4. 4. Redis在value上的不同设计之处
  5. 5. Redis的应用场景• 对复杂数据结构的良好支持• 像SNS中的关系,以及一些计数类的需求
  6. 6. Redis的常用操作• get/set/mset/mget• lpush/lpop,lpush/rpop• hget/hset/hgetall• sadd/srem/spop/scard/sort• del key/move key index• infor• save/bgsave/bgrewriteaof/lastsave• flushall
  7. 7. 关系与分页 lpush,rpop,lpop实现队列与栈 与操作相关的两个配置参数: list-max-ziplist-entries 512 个数 list-max-ziplist-value 15 长度 如果任何一个条件不满足,进入 listTypeConvert函数,转化成双链 表 与lrange,mget组合,可以实现列 表类的一些业务场景 与lrange,多次hgetall组合
  8. 8. 结构化数据存取需求 redis> hset danchen guanzhu 195 (integer) 1 redis> hset danchen fans 3769 (integer) 1 redis> hset danchen microblogs 418 (integer) 1 redis> redis> redis> hgetall danchen 1) "guanzhu" 2) "195" 3) "fans" 4) "3769" 5) "microblogs" 6) "418"两个控制参数:hash-max-zipmap-entries 1024hash-max-zipmap-value 100
  9. 9. 新浪微博的Redis部署
  10. 10. 新浪微博的Redis部署
  11. 11. 新浪微博的Redis部署
  12. 12. 新浪微博的Redis部署
  13. 13. 集合sets操作• redis> sadd students danchen redis> srem students hi (integer) 1 (integer) 1 redis> srem students hi• redis> sadd students baby (integer) 0 (integer) 1 redis> spop students• redis> sadd students hello "danchen" (integer) 1 redis> spop students• redis> sadd students hi "wwww" redis> scard students (integer) 1 (integer) 4• redis> sadd students wwww redis> sort students (integer) 1 1) "hello"• redis> sadd students 2) "supu" wwww.taobao.com 3) "wwww.taobao.com" (integer) 1 4) "baby"• redis> sadd students supu (integer) 1• redis> sadd students supu (integer) 0
  14. 14. Pipeline模式• 发送多个命令,一次性接受多个命令 减少网络IO次数• 服务器端将命令结果放进queue,再返回给 客户端
  15. 15. Redis server的主流程
  16. 16. 连接及处理命令流程 acceptTcpHandler readQueryFromClient processInputBuffer acceptCommonHandler processCommand createClientaeCreateFileEvent(server.el,fd,AE_READABLE, call readQueryFromClient, c)
  17. 17. 自增长的hashtable• 每个db对应两条hash table,大多数情况下只 用第一条hash table,第二条在增量hash时会 使用,增量hash采用阶段性完成,单次拷贝 不能超过1ms,以免影响前台应用过多响应 时间。• bucket初始大小为4,以2的倍数进行动态扩 展。• 作增量rehash的过程中,新的值将会写到第 二条hash table里。
  18. 18. Hash_table的扩展条件• _dictKeyIndex(dict *d, const void *key) 调用_dictExpandIfNeeded(d) 判断条件: – 当前已处于增量rehash过程中 return – 当前hash table size =0 ? 初始化为4 – elements/buckets >= 1:1
  19. 19. 数据结构管理成本每个redisObject会有16 bytes的管理开销typedef struct redisObject { unsigned type:4; unsigned storage:2; /* REDIS_VM_MEMORY or REDIS_VM_SWAPPING */ unsigned encoding:4; unsigned lru:22; /* lru time (relative to server.lruclock) */ int refcount; void *ptr; /* 数据真正存放的地方*/} robj;
  20. 20. 数据结构管理成本每个struct dictEntry会有24 bytes的管理开销typedef struct dictEntry { void *key; void *val; struct dictEntry *next;} dictEntry;
  21. 21. Rdb持久化• Fork一个进程,利用copy on write原理,遍 历所有db的hash table,进行整库的dump• Save命令,shutdown命令,slave启动都会触 发• 利用LZF进行压缩• 持久化触发条件: #save 900 1 #save 300 10 #save 60 10000
  22. 22. Aof持久化• Aof:把写操作指令连续的写到一个文件里面• 当redis server异常crash掉的时候,重启时将 会进行如下的操作: – 假如只配置了aof,起动时加载aof文件 – 假如同时配置了rdb,aof,起动时只加载aof文件 – 假如只配置了rdb,起动时将加载dump文件
  23. 23. Redis replication相当于mysql statement模式的SQL复制,以及ORACLE的逻辑standby.s log master slave Slave也可以进行读写操作
  24. 24. 复制对TPS的影响(-30%)我自己写了一个jkc命令
  25. 25. 复制时的jkc指令响应时间
  26. 26. Slave shutdown或者重启
  27. 27. Slave shutdown或者重启
  28. 28. 不同的value_length(r:w=4:1)
  29. 29. 不同的value_length(r:w=4:1)
  30. 30. Redis客户端• 各种语言客户端支持• Java的Jedis,Jredis• Php的Predis,phpredis• Python的redis-py• C的hiredis• ….
  31. 31. Jedis客户端• Jedis,ShardJedis,ShardJedisPipeline• 支持客户端分布式,ShardJedis。一致性哈 希算法,采用TreepMap<String,ShardInfo>存 储redis节点,murmur哈希函数计算key和 server的值。默认虚拟160个节点,支持权 重配置。• 连接池管理。JedisPool。
  32. 32. Q/A• thanks

×