Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Redis use cases

975 views

Published on

  • Be the first to comment

  • Be the first to like this

Redis use cases

  1. 1. Redis 使用案例探索 Remote Dictionary ServerBruce Wang
  2. 2. Agenda • 基本数据结构和功能 • Use Case • Redis 使用注意事项
  3. 3. 基本数据结构和功能 • String • Keys • List • Set • Sorted Set • Hash
  4. 4. String 1. Blob 可以放在 String 类型的 Cache 中 2. String 可以做 Append 操作 3. String Key 中可以存 Integer 类型的值
  5. 5. Keys 1. Key 可以设置超时时间 2. Key 可以做正则匹配
  6. 6. List
  7. 7. List 1. 左右插入链表 2. 截取链表 3. 读取链表
  8. 8. Set
  9. 9. Set 1. Set 元素惟一性 2. Set 集合运算
  10. 10. Sorted Set
  11. 11. Sorted Set 1. 按排名按 Score 增序倒序获取元 素 2. 更改元素 Score
  12. 12. Hash
  13. 13. Hash 1. 设置 Hash K-V 2. 获取 Hash K-V
  14. 14. USE CASE • 排重 • 计数器 • List 应用 • Set 应用 • Sorted Set 应用 • Hash 应用 • Other
  15. 15. Use Case 排重 1. SETNX 命令
  16. 16. 排重 - 秒杀系统 每个 Item 的值只会有一次写入的机会 Setnx $itemId $winnerId
  17. 17. Use Case 计数器1. INCR, INCRBY, DECR, DECRBY, HINCRBY 命令
  18. 18. 计数器应用1. ID 生成器2. Web 分析3. 防 DDOS 攻击4. API 访问率控制
  19. 19. 计数器 - ID 生成器 1. 逻辑中心化 & 部署上分布式 2. 可根据不同的 DC 做不同的步长 3. 处理某个类型的 Seq 必定落在固定的 Instance 上, 由 Redis Server 的单进程机制保证惟一性 Incrby Seq:$ObjectType $step
  20. 20. 计数器 - Web 分析 1. 可多样化统计用户行为 Incr view:$pageId Incr view:$pageId: $timeFrame Incr logon:$userId Incr logon:$userId:$timeFrame
  21. 21. 计数器 - Anti-DDOS , API 访问率控制 1. 可根据不同需求设置统计时间片和最大 hit 的阀值 $Count = Incr hitCount:$user:$API_id if(count==0) expire hitCount:$user:$API_id $timeFrame Else If (hitCount$user > 阀值 ) 拒绝服务 Else 响应服务
  22. 22. List-LOGGER 收集 使用 List • App 客户端: Lpush logger:$appid:serverId $log • Logger Server: Worker 轮询 Ltrim logger:$appid 0 99 write to NFS, HDFS…. Logger 其他方案—使用 Blob • App 客户端 : append logger:$appId:$serverId $log • Logger Server: Worker 轮询 ogger:$appId:$serverId $log
  23. 23. Set 应用 1. 社区好友 2. 随机推荐
  24. 24. Set- 社区好友 Sadd friend:$userId1 $userA Sadd friend:$userId1 $userB Sadd friend:$userId2 $userC Sadd friend:$userId2 $userA Sadd onlineUser $userA 共同好友 SInter friend:$userId1 $friend:$userId1 在线好友 Sinter friend:$userId1 onlineUser
  25. 25. Set- 随机推荐 • 随机推荐好友 Srandmember recommandFriendsSet:$userId • 随机推荐热图 Srandmember recommandPhotosSet:$hotPhotos
  26. 26. Use Case - Sorted Set 使用 1. 排行榜 2. GEO 相关搜索 3. 最近浏览页面
  27. 27. Sorted Set – 排行榜
  28. 28. Sorted Set - GEO 搜索 附近搜索 1. 经纬度  64 位 Hash Hash 值的特点: 越近的地点 Hash 值前面相同的位越大 海底捞 (120.2E ,30.3N) 14326455945304181035 外婆家 (121.3E, 31.1N) 14326502174498709381 2. Zadd resturant:set $hash $resturant 3. 获取推荐餐馆 zrangebyScore resturant:set ($userLocationHash - $offset) ($userLocationHash + $offset)
  29. 29. Sorted Set – 最近浏览页面 • 页面浏览: Zadd recentPageView:$User $timestamp page1 Zadd recentPageView:$User $timestamp page2 • 获取最近浏览 10 个页面 : zrevrange recentPageView:$User 0 10 withscores
  30. 30. Hash– 购物车购物车添加商品: Hincrby $cartId $productId $number获取商品 : Hgetall $cartId
  31. 31. Use Case - Other 1. Session Storage 2. 公平调度器
  32. 32. 其他– Session 存储 登录: Set $SessionKey $anyValue ••登录: Set $SessionKey $anyValue 每次访问: Expire $sessionKey ••每次访问: Expire $sessionKey $timeFrame $timeFrame
  33. 33. 其他– 公平调度器1. Worker •Worker: ZADD worker:nodes $load $hostname •Worker: BLPOP $hostname2. Client •Work client: Zrange worker:nodes 0 2 •Work Client: LPUSH $hostname $task
  34. 34. 其他– 优先级 Queue1. Producer: Lpush $queueName anyValue Zadd task:$queueName $priority $task Zincrby task:$queueName $task $incrNum2. Subscriber: Blpop $queueName Task = Zrevrange task:$queueName 0 1 Sadd $subscriberName $Task Execute task Srem t $subscriberName $Task
  35. 35. Redis 使用注意事项 •Use Hash VS encoded object •Key 可能分布在不同的 Redis Instance 中 •不要使用 Redis 做它不擅长的事情 •Expire 与内存最大值 •Expire when rename key
  36. 36. We Provide The Best !

×