More Related Content
Similar to Redis use cases
Similar to Redis use cases (20)
Redis use cases
- 2. Agenda
• 基本数据结构和功能
• Use Case
• Redis 使用注意事项
- 3. 基本数据结构和功能
• String
• Keys
• List
• Set
• Sorted Set
• Hash
- 4. String
1. Blob 可以放在 String 类型的 Cache 中
2. String 可以做 Append 操作
3. String Key 中可以存 Integer 类型的值
- 9. Set
1. Set 元素惟一性
2. Set 集合运算
- 14. USE CASE
• 排重
• 计数器
• List 应用
• Set 应用
• Sorted Set 应用
• Hash 应用
• Other
- 16. 排重 - 秒杀系统
每个 Item 的值只会有一次写入的机会
Setnx $itemId $winnerId
- 18. 计数器应用
1. ID 生成器
2. Web 分析
3. 防 DDOS 攻击
4. API 访问率控制
- 19. 计数器 - ID 生成器
1. 逻辑中心化 & 部署上分布式
2. 可根据不同的 DC 做不同的步长
3. 处理某个类型的 Seq 必定落在固定的 Instance 上, 由 Redis
Server 的单进程机制保证惟一性
Incrby Seq:$ObjectType $step
- 20. 计数器 - Web 分析
1. 可多样化统计用户行为
Incr view:$pageId
Incr view:$pageId: $timeFrame
Incr logon:$userId
Incr logon:$userId:$timeFrame
- 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. 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
- 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. Set- 随机推荐
• 随机推荐好友
Srandmember recommandFriendsSet:$userId
• 随机推荐热图
Srandmember recommandPhotosSet:$hotPhotos
- 26. Use Case - Sorted Set 使用
1. 排行榜
2. GEO 相关搜索
3. 最近浏览页面
- 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. Sorted Set – 最近浏览页面
• 页面浏览:
Zadd recentPageView:$User $timestamp page1
Zadd recentPageView:$User $timestamp page2
• 获取最近浏览 10 个页面 :
zrevrange recentPageView:$User 0 10 withscores
- 32. 其他– Session 存储
登录: Set $SessionKey $anyValue
••登录: Set $SessionKey $anyValue
每次访问: Expire $sessionKey
••每次访问: Expire $sessionKey
$timeFrame
$timeFrame
- 33. 其他– 公平调度器
1. Worker
•Worker: ZADD worker:nodes $load $hostname
•Worker: BLPOP $hostname
2. Client
•Work client: Zrange worker:nodes 0 2
•Work Client: LPUSH $hostname $task
- 34. 其他– 优先级 Queue
1. Producer:
Lpush $queueName anyValue
Zadd task:$queueName $priority $task
Zincrby task:$queueName $task $incrNum
2. Subscriber:
Blpop $queueName
Task = Zrevrange task:$queueName 0 1
Sadd $subscriberName $Task
Execute task
Srem t $subscriberName $Task
- 35. Redis 使用注意事项
•Use Hash VS encoded object
•Key 可能分布在不同的 Redis Instance 中
•不要使用 Redis 做它不擅长的事情
•Expire 与内存最大值
•Expire when rename key
Editor's Notes
- Morton , geoHash
- Morton , geoHash
- Morton , geoHash
- Hash 可以启用压缩, 较少占内存, Hash 按需取 Hash Key : field , 减少 IO 安全性 条件查询 Queue 功能 VS 消息服务器 在 2.4.x 里,如果设置了 maxmemory ,那么当内存占用没有达到极值时,设置 expire 的 key 到期后并不会被立即删除;所以,如果期望利用 expire 让 redis 清除过期数据,建议还是不要设置 maxmemory 。
- 谢谢观看!