Redis quick tour

  • 2,825 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,825
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
37
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. RedisQuick Tour
    舒铭(新浪微博@思门)
    11-9-20
  • 2. CAP理论
    CAP理论
    C:一致性
    A:可用性
    P:分区容忍性
    RDBMS满足CA
    NoSQL满足AP
    实现最终一致性
  • 3. NoSQL百花齐放
    Wide Column Store/Column Families:
    Hadoop/Hbase
    Cassandra
    Document Store:
    MongoDB
    CouchDB
    Key Value/Tuple Store:
    Redis
    Tokyo Cabinet/Tyrant
    MemcacheDB
  • 4. 认识Redis
    Redis 是一款完全开源,支持多种数据结构(string,hashes,list,set,sorted set)的高级Key Value数据库。
    Who’s using Redis?
    版本更新频繁,社区用户活跃
    官方网站:http://redis.io/
    作者博客:http://antirez.com/
  • 5. 安装使用
    安装
    $ cd src/redis
    $ ./configure
    $ make
    $ make install
    使用
    $ /path/to/redis-server /path/to/redis.conf
    $ /path/to/redis-cli
    redis 127.0.0.1:6379> …
    尝试
    http://try.redis-db.com/
  • 6. 客户端丰富
    ActionScript,C,C#,C++,Clojoure,Common Lisp,Erlang,Go,Haskell,haXe,Io,Java,Lua,Node.js,Objective-C,Perl,PHP,Pure Data,Python,Ruby,Scala,Smalltalk,Tcl……
    Predis*https://github.com/nrk/predis
    phpredis*https://github.com/nicolasff/phpredis
    redisenthttps://github.com/jdp/redisent
  • 7. Benchmark
    官方宣称测试结果:
    SET操作 110000/rps
    GET操作 81000/rps
    redis-benchmark –q
  • 8. K-V缓存(VSmemcached)
    单Key容量
    Memcache 1MB ~ Redis 1GB
    数据持久化
    Redis默认开启持久化,数据定期交换到磁盘中,断电数据不会丢失。
    丰富的数据结构
    String,Hashes,List,Set,Sorted Set
    树状主从结构
    Redis支持一主多从,从服务器也可作为其他从服务器的主节点。
  • 9. 消息队列(VS HTTPSQS)
    传输协议
    HTTPSQS基于HTTP协议
    Redis基于TCP协议
    实测性能
    10w条数据,每条512字节,10个并发连接,Keep Alive
    HTTPSQS:post: 23018/rps
    get : 25982/rps
    Redis:lpush: 65530/rps
    lpop: 66622/rps
    HTTPSQS底层数据库TT/TC已停止更新
  • 10. 数据结构:String
    常用命令:
    SET,GET,DEL,DECR,INCR,MGET等
    应用场景:
    默认Key/Value存储
    原子操作计数器
  • 11. 数据结构:List
    常用命令:
    LPUSH,RPUSH,LPOP,RPOP,LRANGE,LLEN等。
    应用场景:
    双向链表消息队列
    列表格式数据存储
  • 12. 数据结构:Set
    常用命令:
    SADD,SPOP,SMEMBERS,SCARD等。
    应用场景:
    数据不重复,执行排重操作
    实现好友关注列表交集,并集,差集(共同关注,共有粉丝,可能认识的人)
  • 13. 数据结构:Sorted Set
    常用命令:
    ZADD,ZRANGE, ZREM,ZCARD等。
    应用场景:
    有序集合,可以设置数据权重值
    积分排行榜
  • 14. 数据结构:Hash
    常用命令:
    HSET,HGET,HGETALL,HEXISTS等。
    应用场景:
    类似PHP关联数组
    避免序列化保存时,数据并发修改写入冲突
  • 15. Pub/Sub
    常用命令:
    SUBSCRIBE/UNSUBSCRIBE,PUBLISH
    应用场景:
    观察者模式
    实时消息队列,即时IM,聊天室
  • 16. 应用场景
    取最新N个数据的操作
    实现文章评论列表,将最新5000条评论的ID放在Redis的List集合中,5000条之后的数据存放在数据库中。
    • LPUSH latest.comments <ID>,向List中插入ID
    • 17. 插入完成后通过LTRIMlatest.comments 0 5000使其永远只保存最近5000个ID
    • 18. LRANGE lastest.comments 0 9,获取前10条数据
    排行榜应用,取TOPN操作
    在SortedSet中以某个条件作为权重,以此进行排序。
    ZADD student.english 80 LiLei,向有序集合中插入成绩。
    ZREVRANGEBYSCORE student.english 100 60,找出成绩在60-100分之间的学生。
  • 19. 应用场景
    需要精准设定过期时间的应用
    同样使用Sorted Set的score值记录数据过期时间时间戳,通过定时任务取出这些数据,并在数据库中删除。
    计数器应用
    Uniq操作,获取某段时间所有数据排重值
    利用Set的天然排重特性,把数据往Set中存放,同值内容将不会被保存。
  • 20. 应用场景
    实时系统,反垃圾系统
    Pub/Sub构建实时消息系统
    构建队列系统
    缓存
  • 21. 持久化
    Snapshotting快照
    save 900 1 #after 900s if at least 1 key changed
    save 300 10 #after 300s if at least 10 key changed
    save 60 10000 #after 60s if at least 10000 key changed
    优点
    读写性能最佳
    缺点
    数据可靠性差,重启会丢失内存中未同步数据
  • 22. 持久化
    快照工作原理
    Redisfork进程。此时会有一个父进程和一个子进程。
    父进程继续处理来自client的请求,子进程负责将内存中的数据写入至一个临时生成的RDB文件中。
    当子进程写入操作完毕后,用该临时文件替换掉原先使用的RDB文件。
  • 23. 持久化
    Append Only File(AOF)增量文件
    appendonly yes
    #appendfsync always
    appendfsynceverysec#性能和可靠性折中选择
    # appendfsyncno
    优点
    数据可靠性高
    缺点
    写入aof文件需占用一定资源开销
    aof文件过大,重启服务载入时间过长
    需定期执行bgrewriteaof操作,合并优化aof文件
  • 24. 持久化
    AOF工作原理
    Redis fork进程,产生一个父进程和一个子进程。
    子进程将会往一个临时文件中写入新的增量数据。
    父进程继续处理来自Client的请求,在内存缓冲区中记录所有新的变化(但是与此同时,父进程会把这些变更写入到旧的AOF文件中,这样即使重新失败,数据依旧安全)。
    当子进程完成文件重写操作时,父进程会接收到一个信号,并把内存缓冲区的数据追加到由子进程生成的临时文件中去。
    Redis父进程将临时文件重命名为一个新的文件,并在之后往新文件中进行数据追加。
  • 25. 持久化
    VM
    Slow!Slow!Slow!(重启,复制,保存)
    该功能在2.4版本将彻底废弃。
    DiskStore
    RDBMS+ Memory Cache?
  • 26. Action in Redis(1)—— 计数器
    SET/GET,INCR/DECR,INCRBY/DECRBY
  • 27. Action in Redis(2)—— 消息队列
    LPUSH/RPOP,LLEN,LRANGE
  • 28. Action in Redis(2)—— 消息队列
    思考:如何实现一个安全的队列?
    用RPOPLPUSH进行队列备份
  • 29. Tips
    最佳性能
    All data in-memory,关闭持久化
    容量规划
    提前预估数据容量分配节点,制定Key命名规范,数据管理和迁移成本很高
  • 30. 学习资源
    http://nosql-database.org/
    http://sebug.net/paper/databases/nosql/Nosql.html
    http://redis.readthedocs.org/en/latest/
    http://rediscookbook.org/index.html
    http://pauladamsmith.com/articles/redis-under-the-hood.html
    http://redis.io/topics/twitter-clone
  • 31. Q&A
    Thank you!