Another Introduce to Redis

910 views

Published on

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

No Downloads
Views
Total views
910
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Another Introduce to Redis

  1. 1. Another Introduce to Redis http://jiaqing.me 2012-05-21
  2. 2. 大纲初识Redis实践Redis优化Redis 2
  3. 3. Part 1初识Redis 3
  4. 4. 介绍官方定义:Redis is an open source, advanced key-value store. It is often referred to asa data structure server since keys cancontain strings, hashes, lists, sets and sorted sets. 4
  5. 5. 介绍官方定义:Redis is an open source, advanced key-value store. It is often referred to asa data structure server since keys cancontain strings, hashes, lists, sets and sorted sets.主要卖点:Key-value 内存级 高性能 复杂数据结构 5
  6. 6. Redis vs Memcached相同点:• 都基于内存,性能都足够高 6
  7. 7. Redis vs Memcached相同点:• 都基于内存,性能都足够高不同点:• Redis支持复杂类型• Redis支持主从复制• Redis支持数据持久化• Redis支持虚拟内存• Redis只使用单核• Redis自身暂不支持sharding 7
  8. 8. 数据类型key:• String类型• 非二进制安全: “my name” Error “mynamen” Error• 约定俗成的命名: object-type:id:field 比如 user:1000:password 8
  9. 9. 数据类型value:• String: 二进制安全, 最大1G• List :String类型的双向链表• Set :String类型的无序集合,可取交集、并集、差集• SortSet :可排序的Set, 可指定score, 区间操作• Hash:String类型的k-v映射 9
  10. 10. eg.listLPUSH mylist a # now the list is “a”LPUSH mylist b # now the list is “b”, “a”RPUSH mylist c # now the list is “b”, “a”, “c” 10
  11. 11. eg.hash 动手尝试 http://try.redis-db.com/ 命令手册 http://redis.io/commands 中文参考 http://redis.readthedocs.org/en/latest/ 11
  12. 12. 事务支持连接级别的简单事务 redis> multi OK• multi :启动事务 redis> incr a• exec:提交事务 QUEUED• discard:放弃事务 redis> incr b QUEUED redis> exec 1. (integer) 1 2. (integer) 1 12
  13. 13. 持久化Snapshotting(默认):• 将内存数据写入二进制文件• 可配置N秒执行一次 save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 save 300 10 #300秒内容如超过10个key被修改,则发起快照保存 save 60 10000 #...• 宕机时丢失最后一次快照 13
  14. 14. 持久化AOF(append-only file):• 每次写请求写入文件• 自定义写入的时机 appendfsync always #每次收到写命令就立即强制写入磁盘 appendfsync everysec #每秒钟强制写入磁盘一次 appendfsync no #完全依赖OS,性能最好,持久化没保证 14
  15. 15. 主从复制• Master可带多个Slave• 初次同步数据,Master不阻塞,Slave阻塞 15
  16. 16. 虚拟内存• 突破单机内存限制• 只会将value放入swap• 不推荐使用 16
  17. 17. Redis客户端CC++C#JavaLuaNode.jsPerlGoRubyPHP…查看全部 http://redis.io/clients 17
  18. 18. Part 2实践Redis 18
  19. 19. 简单的微博• 个人信息• 关注列表• 粉丝列表• 推送信息 19
  20. 20. 个人信息• 用户唯一标识(ID) SET global:newUserId 0• 录入个人相关信息 … INCR global:nextUserId => 1000 SET uid:1000:username asuka SET uid:1000:password ***** SET uid:1000:url /asuka SET uid:1000:xxx xxxxxxxxx … 20
  21. 21. 关注/粉丝• 添加关注 # 添加关注 SADD uid:1000:following 1001• 添加粉丝 SADD uid:1000:following 1002• 统计粉丝数 SADD uid:1000:following 1003• 获取关注列表 …• 共同关注 # 添加粉丝 SADD uid:1000:followers 0001 SADD uid:1000:followers 0002 SADD uid:1000:followers 0003 … #获取关注列表 SMEMBERS uid:1000:following =>1002,1003,1001 #统计多少粉丝 SCARD uid:1000:followers =>3 #共同关注 SINTER uid:1000:following uid:1001:following 21 …
  22. 22. 推送消息• 发送消息 # 发送消息• 接收消息 SET postid:900001 我的第一条微博 RPUSH uid:1000:posts 900001 # 接收消息 RPUSH uid:1001:receive 900001 # 翻页查看 LRANGE uid:1001:receive 0 9 =>900001,893201,939922,….. 22
  23. 23. Part 3优化Redis 23
  24. 24. 避免使用VM• 频繁swap性能差• 官方版本准备去除该功能 24
  25. 25. 合理利用CPU• 单线程的优势• 单机多实例 : 实例数 = CPU - 1 25
  26. 26. 重视容量规划• 合理预估内存/带宽• 实时监控同样重要 26
  27. 27. Part 4 参考资料http://redis.io/http://blog.nosqlfan.comhttp://www.slideshare.net/search/slideshow?searchfrom=header&q=redis 27
  28. 28. Another Introduce to Redis http://jiaqing.me 2012-05-21 -END- 28

×