Redis介绍
Upcoming SlideShare
Loading in...5
×
 

Redis介绍

on

  • 45,979 views

Redis是什么?...

Redis是什么?
Redis常用操作及使用场景介绍
Redis server的主流程,自增长的hash table实现,以及相关数据结构的管理成本
Redis的持久化,以及Replication
Redis的性能测试数据

Statistics

Views

Total Views
45,979
Views on SlideShare
19,112
Embed Views
26,867

Actions

Likes
114
Downloads
1,424
Comments
5

37 Embeds 26,867

http://blog.nosqlfan.com 25805
http://rdc.hoopchina.com 476
http://www.dcshi.com 194
http://www.zhuaxia.com 69
http://blog.haohtml.com 55
http://www.cnblogs.com 37
http://ijohn.org 35
http://www.w3ccollege.org 32
url_unknown 30
http://zhuaxia.com 22
http://xianguo.com 21
http://rdc.hupu.com 18
http://xue.uplook.cn 16
http://feed.feedsky.com 7
http://reader.youdao.com 6
http://static.slidesharecdn.com 6
http://www.techgig.com 6
http://www.niwozhi.net 5
http://www.r66r.net 3
http://webcache.googleusercontent.com 2
http://127.0.0.1 2
http://www.uplook.cn 2
http://translate.googleusercontent.com 2
http://english.zhuaxia.com 2
http://cache.baidu.com 2
http://paper.li 1
http://115.112.206.131 1
http://m.baidu.com 1
http://www.techgig.timesjobs.com 1
http://www.m.techgig.com 1
http://www.coderli.com 1
http://localhost:4000 1
http://www.dcshi.com} {1619461903|||pingback 1
http://img.zhuaxia.com 1
http://mailreader.163.com 1
http://lab.zhuaxia.com 1
http://cache.baiducontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

15 of 5 Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • thanks!
    Are you sure you want to
    Your message goes here
    Processing…
  • 很好的NoSQL(redis)学习资料
    Are you sure you want to
    Your message goes here
    Processing…
  • excellent!!
    Are you sure you want to
    Your message goes here
    Processing…
  • nice
    Are you sure you want to
    Your message goes here
    Processing…
  • thank you!
    see you later.
    haha!
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Redis介绍 Redis介绍 Presentation Transcript

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