Redis use cases

781 views
616 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
781
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Morton , geoHash
  • Morton , geoHash
  • Morton , geoHash
  • Hash 可以启用压缩, 较少占内存, Hash 按需取 Hash Key : field , 减少 IO 安全性 条件查询 Queue 功能 VS 消息服务器 在 2.4.x 里,如果设置了 maxmemory ,那么当内存占用没有达到极值时,设置 expire 的 key 到期后并不会被立即删除;所以,如果期望利用 expire 让 redis 清除过期数据,建议还是不要设置 maxmemory 。
  • 谢谢观看!
  • 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 !

    ×