View
578
Download
4
Category
Preview:
Citation preview
计数器 - ID 生成器
1. 逻辑中心化 & 部署上分布式2. 可根据不同的 DC 做不同的步长3. 处理某个类型的 Seq 必定落在固定的 Instance 上, 由 Redis
Server 的单进程机制保证惟一性
Incrby Seq:$ObjectType $step
计数器 -Web 分析
1. 可多样化统计用户行为
Incr view:$pageId
Incr view:$pageId: $timeFrame
Incr logon:$userId
Incr logon:$userId:$timeFrame
计数器 -Anti-DDOS , API 访问率控制
1. 可根据不同需求设置统计时间片和最大 hit 的阀值
$Count = Incr hitCount:$user:$API_idif(count==0) expire hitCount:$user:$API_id $timeFrameElse If (hitCount$user > 阀值 ) 拒绝服务Else 响应服务
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
Set- 社区好友
Sadd friend:$userId1 $userASadd friend:$userId1 $userBSadd friend:$userId2 $userCSadd friend:$userId2 $userA
Sadd onlineUser $userA
共同好友 SInter friend:$userId1 $friend:$userId1在线好友 Sinter friend:$userId1 onlineUser
Set- 随机推荐
• 随机推荐好友Srandmember recommandFriendsSet:$userId
• 随机推荐热图Srandmember recommandPhotosSet:$hotPhotos
Sorted Set - GEO 搜索
附近搜索1. 经纬度 64 位 Hash
Hash 值的特点: 越近的地点 Hash 值前面相同的位越大海底捞 (120.2E ,30.3N) 14326455945304181035外婆家 (121.3E, 31.1N) 14326502174498709381
2. Zadd resturant:set $hash $resturant3. 获取推荐餐馆 zrangebyScore resturant:set ($userLocationHash - $offset)
($userLocationHash + $offset)
Sorted Set – 最近浏览页面
• 页面浏览:Zadd recentPageView:$User $timestamp page1Zadd recentPageView:$User $timestamp page2
• 获取最近浏览 10 个页面 : zrevrange recentPageView:$User 0 10 withscores
其他– Session 存储
•登录: Set $SessionKey $anyValue•每次访问: Expire $sessionKey $timeFrame
•登录: Set $SessionKey $anyValue•每次访问: Expire $sessionKey $timeFrame
其他– 公平调度器
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
其他– 优先级 Queue
1. Producer: Lpush $queueName anyValueZadd task:$queueName $priority $task
Zincrby task:$queueName $task $incrNum
2. Subscriber:Blpop $queueNameTask = Zrevrange task:$queueName 0 1Sadd $subscriberName $Task
Execute taskSrem t $subscriberName $Task
Redis 使用注意事项
•Use Hash VS encoded object
•Key 可能分布在不同的 Redis Instance 中
•不要使用 Redis 做它不擅长的事情
•Expire 与内存最大值
•Expire when rename key
Recommended