Redis应用场景-计数器
文章目录
- 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 应用场景
2019独角兽企业重金招聘Python工程师标准>>> 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载 ...
- redis 数据类型详解 以及 redis适用场景场合
redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...
- 详解 Redis 应用场景及应用实例
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- Redis 应用场景和应用实例详解
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- 详解 Redis 应用场景及原理
本文转自https://blog.csdn.net/niucsd/article/details/50966733,描述了redis实现原理和应用场景,篇幅较长,有意学习redis的同学可耐心阅读. ...
- 聊聊 Redis 使用场景 1
原文地址:Redis实战(五) 聊聊Redis使用场景 博客地址:http://blog.720ui.com/ 使用场景说明 计数器 数据统计的需求非常普遍,通过原子递增保持计数.例如,点赞数.收藏数 ...
- redis mysql 原子计数器_使用redis的increment()方法实现计数器功能案例
一直知道redis可以用来实现计数器功能,但是之前没有实际使用过,昨天碰到一个需求:用户扫码当天达到20次即提示:当日扫码次数达到上限! 当时就想到使用redis的递增方法increment()来实现 ...
- redis应用场景及实例
redis应用场景及实例 前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.在这篇文章中,我们将阐述 Re ...
- 【转载】Redis应用场景
NoSQL主要用于解决以下几种问题 1.少量数据存储,高速读写访问.此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景. 2.海 ...
最新文章
- 记录Hibernate的缓存知识
- mysql goldengate_oracle GoldenGate实现Oracle到MySQL数据平滑迁移
- 8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
- 仿百度文库解决方案(一)——总体思路
- oss读取txt文件
- CPU负载均衡之EAS
- WordPress Exploit Scanner插件安全绕过漏洞
- Atitit 高级人员要看哪些源码 目录 1. Ati看过的源码	1 1.1. Ui类	1 1.2. Mvc类	1 1.3. 数据库类	1 1.4. 算法类	1 2. 看源码的意义	2 2.1. 一
- Pytorch中文视频教程,Pytorch实战视频教程
- 腾讯地图基于 WebGL实现自定义栅格图层踩坑实录
- 用VB打造个人版恺撒密码转换器
- sql注入开源网站包
- 英语作文计算机国际会议开幕词,英文国际会议演讲稿范文
- 【JAVA】-- 黄金矿工小游戏(二)(实现思路+每步代码)
- Vue template挂载中el和mouted的使用和区别
- 4.2 APIC 虚拟化
- 《面试无忧》--DCL单例模式为什么要用volatile修饰?
- DVWA关卡11:Reflected Cross Site Scripting (XSS)(反射型XSS)
- 常用广域网协议配—Vecloud
- ROS官网使用方式以及问题?
热门文章
- 【Zookeeper】JAVA通过ZK实现服务注册和服务发现
- ​AI大事件 | 特斯拉开发人工智能芯片,智能爆炸论再引热议,Pytorch新版本发布
- php如何将数组保存为文件的方法
- 被称为下一代风口的AIGC到底是什么?
- [多项式前缀和差分]智乃酱的静态数组维护问题多项式
- 下载网站风格的工具httrack
- python import 包_Python 基础之import导包
- C#操作office进行Excel图表创建,保存本地,word获取
- 磁盘管理—交换分区与逻辑卷
- 《AUTOSAR谱系分解(ETAS工具链)》之Ecus