概述
文章目录
- Redis应用场景-计数器
- 计数器
- 视频播放次数
- 防止刷单
- 限制登录失败次数
- 参考文档
Redis应用场景-计数器
计数器
计数器可以分为:
- 简单计数器,用incr就可以实现;
- 有有效期的计数器,设置key的有效期就可以实现;
- 简单的去重计数器,用set实现;
- 高并发大数去重计数器,用hll实现;
视频播放次数
B站视频播放次数
简单的统计视频播放次数,不去重:
incr bilibili:counter:play:vedio:bv001
优点:精确统计,内存花销少;
缺点:不知道播放视频的都是哪些用户,不支持去重。
统计视频播放次数,按用户id去重:
# 模拟用户点播
sadd bilibili:played:vedio:bv001 uid001
sadd bilibili:played:vedio:bv001 uid002
sadd bilibili:played:vedio:bv001 uid003
sadd bilibili:played:vedio:bv001 uid001
# 计算去重后的播放次数
scard bilibili:played:vedio:bv001
优点:精确统计,知道播放视频的都是哪些用户,支持去重。
缺点:内存花销大。
如果视频数量很大,且播放量很高时,又要求去重统计时,可以使用Redis HyperLogLog(HLL)来做概率计算:
# 模拟用户点播
pfadd bilibili:playedusers:vedio:bv001 uid001
pfadd bilibili:playedusers:vedio:bv001 uid002
pfadd bilibili:playedusers:vedio:bv001 uid003
pfadd bilibili:playedusers:vedio:bv001 uid001
pfadd bilibili:playedusers:vedio:bv001 uid002
# 计算去重后的播放次数
pfcount bilibili:playedusers:vedio:bv001
优点:内存花销小,支持去重。
缺点:统计会有误差。
参考:
- Reddit 如何统计每个帖子的浏览量
防止刷单
秒杀活动时,限制单个IP或用户单位时间内请求接口的次数。
特点:一个有有效期的计数器。
比如,10秒钟内单个IP请求接口次数超过5次时,提示操作过于频繁。
# 模拟客户端对商品product001发起下单
incr iplimit:product001:192.168.0.31
# 设置限制有效期为10妙
expire iplimit:product001:192.168.0.31 10
# 模拟客户端继续发起请求
incr iplimit:product001:192.168.0.31
incr iplimit:product001:192.168.0.31
incr iplimit:product001:192.168.0.31
incr iplimit:product001:192.168.0.31
# 判断是否达到限制次数
get iplimit:product001:192.168.0.31
也可以根据用户id进行限制
incr uidlimit:product001:uid001
参考:
- 基于Redis的防刷票、防刷短信、及所有防刷系统的设计
限制登录失败次数
3分钟内连续3次登录失败,账号被锁定5分钟。
特点:一个有效期定时器 + 一个有效期的黑名单。
# 模拟首次登录失败,设置登录失败有效期为3分钟(180秒)
incr loginfailed:user01
expire loginfailed:user01 180
# 模拟继续登录失败
incr loginfailed:user01
incr loginfailed:user01
# 判断登录失败次数是否达到限制
get loginfailed:user01
# 锁定账号5分钟(300秒)
setex lockeduser:user01 300 user01
# 判断账号是否已锁定
get lockeduser:user01
参考文档
- https://www.tutorialspoint.com/redis/redis_hyperloglog.htm
最后
以上就是失眠背包为你收集整理的Redis应用场景-计数器Redis应用场景-计数器的全部内容,希望文章能够帮你解决Redis应用场景-计数器Redis应用场景-计数器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复