Redis 计数器主要通过 INCR/DECR 命令实现原子自增自减,适用于访问量、在线用户等场景。高效统计方法包括:使用 String 结构做简单计数;使用 Hash 存储多字段统计;使用 HyperLogLog 进行 UV 去重统计,节省内存且误差低;使用 Bitmap 处理二值状态如签到;使用 Sorted Set 做排行榜。这些方法结合过期时间设置,可高效应对高并发大数据量统计需求。
使用 Redis 统计数据的有效方法 (redis 统计方法)
方法一:计数器 Redis 中可以使用命令 incr 和 decr 来实现原子计数器。incr 命令可以自增 1,而 decr 命令则可以自减 1。这些计数器可以存储在 Redis 字符串 value 中。可以使用以下代码添加一个计数器:redis-cli> set counter 0 使用 incr 命令自增计数器:redis-cli> incr counter 使用 decr 命令自减计数器:redis-cli> decr counter 使用 Redis 的计数器功能,可以快速有效地记录和处理很多类型的计数数据,例如网站的访问量、在线用户数量等等。方法二:列表和集合 Redis 列表和集合都是很好的数据类型,可以快速地记录和处理数值数据。在列表中,可以将数据存储为多个元素,而在集合中,则可以将数据存储为唯一的元素。例如,通过以下代码可以添加元素到列表中:redis-cli> lpush mylist 1 2 3 可以使用 lrange 命令查看元素:redis-cli> lrange mylist 0 -1 1) "3" 2) "2" 3) "1" 可以使用 sadd 命令向集合中添加数据:redis-cli> sadd myset "Hello World" 可以使用 smembers 命令查看集合中的元素:redis-cli> smembers myset 1) "Hello World" 使用列表和集合,可以有效管理许多元素和数据。可以轻松添加、删除和查找元素,从而实现许多数据处理和分析任务。
利用 Redis 实现高并发计数器
腾讯云 开发者社区 利用 redis 实现高并发计数器 利用 redis 实现高并发计数器 发布于 2022-09-01 15:10:01 2.2k 0 举报 文章被收录于专栏:全栈程序员必看 关联问题 redis 如何实现高并发计数器?高并发计数器有哪些应用场景?redis 实现高并发计数器的原理是什么?大家好,又见面了,我是你们的朋友全栈君。业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送 5 条 短信,一个接口一分钟限制多少请求,一个接口一天限制调用多少次等等。使用 redis 的 incr 自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例:代码语言:javascript ai 代码解释 /** *是否拒绝服务 * @return */ private boolean denialofservice ( string userid ) { long count = jedisutil . setincr ( dateutil . getdate ( ) + "&" + userid + "&" + "querycarviolation" , 86400 ) ; if ( count <= 10 ) { return false ; } return true ; }
如何借助 Redis 更高效统计 UV?——Hyperloglog 篇
什么是 HyperLogLog? HyperLogLog 是一种用于基数统计的算法,基数指的是一个集合中不重复元素的数量。想象一下,当我们面对数亿级别的数据时,传统的去重统计方法不仅计算量大,而且消耗大量的存储空间。HyperLogLog 则以一种非常节省空间的方式,解决了这个问题,虽然它的计算结果是一个估计值,但是准确率非常高,通常误差率仅为 0.81%。使用 Redis 的 HyperLogLog 实现去重计数 添加元素:pfadd 首先,我们看一下如何向 HyperLogLog 中添加元素。Redis 提供了 pfadd 命令用于添加元素到 HyperLogLog 中。代码语言:bash AI 代码解释 这里,我们添加了七个元素 (a, b, c, d, e, f, g) 到 HyperLogLog p1 中。返回值 (integer) 1 表示操作成功。统计元素数量:pfcount 接下来,我们利用 pfcount 命令来获取 HyperLogLog 中的元素个数。代码语言:bash AI 代码解释 通过 pfcount p1,我们得知 HyperLogLog p1 中有七个唯一元素,和我们之前添加的元素数量一致。
使用 Redis 实现页面访问统计
该文将从 Redis 的角度来总结几种页面访问统计,这里的页面统计是针对某一个具体的页面进行每天的数量统计,后面文章内容涉及到的 page_id 指的就是页面的独立 ID,每一个页面的 ID 都是不重复的。演示代码使用 Laravel5.8 版本实现。具体代码可以参考 https://gitee.com/bruce_qiq/laravel-design.git。具体实现 Snipaste_2021-03-28_19-21-44.png 页面总访问数量 页面总访问数量,统计了每个页面的总访问数量,不排除重复用户重复访问的情况,只要页面被访问就需要统计。主要的实现思路是,给每一个页面划分一个 ID,叫做 page_id。我们使用字符串类型进行数量统计。代码语言:txt AI 代码解释 // 1. 实现某个页面访问统计 // url:$http/api/redis/demo1?page_id=1 public function demo1() { $pageId = $this->request['page_id']; echo Redis::connection()->incrby('page:number:' . date('Y-m-d') . ':' . $pageId, 1); } 页面独立访问用户 页面独立访问用户,是针对某个具体的用户来进行数据统计。
FAQ
Redis 计数器在高并发下是否安全?
Redis 的 INCR/DECR 命令是原子操作,单命令执行是线程安全的,适合高并发场景。
HyperLogLog 统计 UV 准确吗?
HyperLogLog 是估算算法,误差率约为 0.81%,但能极大节省内存,适合海量数据去重统计。
如何防止计数器数据丢失?
可以通过 RDB 或 AOF 持久化机制保存数据,同时设置合理的过期时间避免内存无限增长。