首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Redis统计活跃用户

统计活跃用户这个案例非常经典,也是我当时学习redis时,接触到的第一个让我眼睛一亮的使用方式 场景 用户登录后需要记录,以便以后进行登录统计 统计需求主要有: (1)今天的登录用户数 (2)...3天内都登录过的用户 (3)7天内登录过的用户 常规解决方案 如果不用redis,通常做法是在用户登录时记录日志,或者在数据库中添加一条登录记录 然后按照需求进行定时统计 redis解决方案...redis的 bit 操作非常适合处理这个场景 因为bit的值为 0或1,用户是否登录也可以用 0或1 来表示 我们把每天的用户登录信息记录到一个key中,值中的每个offset的值就是用户登录的标识...key1 key2 就是对 key1 key2 各位进行 or 运算后赋值给 ret,结果为 0111 (3)bit值为1的数量 > bitcount key 通过bit操作就可以实现用户统计的需求了...> bitcount userlogin:20160118 (3)统计3天内都登录过的用户 “都登录过”是要取得bit值都为1的,通过 and 计算获取 > bitop or ret userlogin

1.6K60
您找到你想要的搜索结果了吗?
是的
没有找到

Redis(十):Redis特殊类型之Hyperloglog基数统计

redis 2.8.9版本就更新了Hyperloglog数据结构! Hyperloglog:基数统计算法!0.81%的错误率,不过统计大量数据可以忽略!...在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。...2、Hyperloglog简介 Redis Hyperloglog 基数统计的算法!...比如在CSDN中一位用户访问多次,但是统计中依旧算作一个人 传统的方式是用set集合把每个人的id保存下来,然后统计元素数量,但是太费内存了,而目标是统计数量,如果还要浪费大量的空间,就很不划算!...优点:占用的内存是固定的,统计2^64这么大的基数,只占用12kb的内存,就很方便!

24030

如何用redis统计海量UV?

前言 我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现?...统计uv的常用方法以及优缺点 其实要是单纯的统计pv是比较好办的,直接用redis的incr就行,但是uv的话,它要去重,同一个用户一天之内的多次访问请求只能计数一次。...HyperLogLog 这就是本节要引入的一个解决方案,Redis 提供了 HyperLogLog 数据结构就是用来解决这种统计问题的。...HyperLogLog 数据结构是 Redis 的高级数据结构,它非常有用,但是令人感到意外的是,使用过它的人非常少。...使用方法 Redis 的位数组是自动扩展,如果设置了某个偏移位置超出了现有的内容范围,就会自动将位数组进行零扩充。

1.1K40

面试系列之-Redis集合元素统计

聚合统计 统计多个集合元素的聚合结果,包括:统计多个集合的共有元素(交集统计);把两个集合相比,统计其中一个集合独有的元素(差集统计);统计多个集合的所有元素(并集统计);统计每天的新增用户时,我们只用计算每日用户...,会在Redis中生成一个新key,而从库默认是readonly不可写的,所以这些命令只能在主库使用。...不过,在实际应用时,最好对 Bitmap 设置过期时间,让 Redis自动删除不再需要的签到记录,以节省内存开销; 基数统计 基数统计就是指统计一个集合中不重复的元素个数比如统计网页的 UV;HyperLogLog...当数据量非常大时,使用这些统计命令,因为复杂度较高,可能会有阻塞Redis的风险,建议把这些统计数据与在线业务数据拆分开,实例单独部署,防止在做统计操作时影响到在线业务; 聚合计算是CPU密集型任务,Redis...在处理请求时是单线程的,也就是它在做聚合计算时无法利用到多核CPU来提升计算速度,如果计算量太大,这也会导致Redis的响应延迟变长,影响Redis的性能。

21210

Redis实现短链接点击统计

问题分析 接口功能虽然简单,但如果是在统计几个淘宝超级卖家的会员点击数的时候,我们如果稍不注意就容易将系统给搞垮。...(如果你的是rocketmq,那么当然首选是它了) 2、使用redis其实也可以实现类似的效果。 2.1、只需要将点击的链接id+ip使用rPush到一个redis的list集合中。...2.2、开启线程定时1min执行一次,获取当前redis的list的llen总长度。 2.3、每次取出最大不超过1w条点击数据进行统计,并批量更新点击数。...2.4、统计完毕后,使用redis管道循环将刚处理完毕的1w条数据弹出lpop即可。 2.5、循环3、4步至到取到llen条点击数。...原理:在你请求的时候,服务器通过redis 记录下你请求的次数,如果次数超过限制就不给访问。在redis 保存的key 是有时效性的,过期就会删除。

1.1K10

Redis统计网站搜索的热搜词

方便起见的话,可能每搜索一次就往表里插一次数据,用的时候要先统计数据,统计完后再排序,最后才展示。这种情况下,如果搜索量很大的话,表的膨胀速度就会非常快,如果sql没写好,查询的时候估计会。。...相比Redis,同等条件下,Redis的速率肯定是会较优,毕竟是从内存中拿出来的。 下面我们就用.NET Core和StackExchange.Redis来做一下这个简单的案例。...Redis 存储搜索词,用了主从的模式,主写从读 Jquery-ui 主要是用了里面的autocomplete 开始正题之前,我们要确定用Redis中的那种数据结构,五种之中比较合适的应该是SortedSet...无论是新的关键字还是已有的关键字,我们都是要做处理的,当然redis中zincrby命令来处理这个是十分合适的,存在的就把分数加1,不存在就创建一个分数为1的成员。...) { _redis = redis; } public IActionResult Index() {

1.3K20

Redis二值状态统计的巧妙使用

二值状态统计 这里的二值状态就是指集合元素的取值就只有 0 和 1 两种。...这是 Redis 提供的扩展数据类型。我来给你解释一下它的实现原理。Bitmap 本身是用 String 类型作为底层数据结构实现的一种统计二值状态的数据类型。...String 类型是会保存为二进制的字节数组,所以,Redis 就把字节数组的每个 bit 位利用起来,用来表示一个元素的二值状态。 你可以把 Bitmap 看作是一个 bit 数组。...Bitmap 还提供了 BITCOUNT 操作,用来统计这个 bit 数组中所有“1”的个数。那么,具体该怎么用 Bitmap 进行签到统计呢?我还是借助一个具体的例子来说明。...不过,在实际应用时,最好对 Bitmap 设置过期时间,让 Redis 自动删除不再需要的签到记录,以节省内存开销。

74520

如何用 Redis 统计独立用户访问量?

文章来源:https://url.cn/5tQPEQg 今天来聊一聊拼多多的一道后台面试真题,是一道简单的架构类的题目:拼多多有数亿的用户,那么对于某个网页,怎么使用Redis统计一个网站的用户访问数呢...使用Hash 哈希是Redis的一种基础数据结构,Redis底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会拉出一个链表出来。...当我们要统计某一个网站某一天的访问量的时候,就可以直接使用HLEN来得到最终的结果了。 ? 优点:简单,容易实现,查询也是非常方便,数据准确性非常高。 缺点:占用内存过大,。...最后我们通过BITCOUNT可以统计该网页每天的访问数量。 ?...使用概率算法 对于拼多多这种多个页面都可能非常多访问量的网站,如果所需要的数量不用那么准确,可以使用概率算法,事实上,我们对一个网站的UV的统计,1亿跟1亿零30万其实是差不多的。

1.4K10

如何借助Redis更高效统计UV?——Hyperloglog篇

使用 Redis 的 HyperLogLog 实现去重计数添加元素:pfadd首先,我们看一下如何向 HyperLogLog 中添加元素。...Redis 提供了 pfadd 命令用于添加元素到 HyperLogLog 中。...合并 HyperLogLog:pfmerge如果我们有多个 HyperLogLog,想要合并它们的统计结果,该怎么做呢?Redis 的 pfmerge 命令能够帮助我们实现这一点。...因此,虽然它在 Redis 中表现为字符串类型,但它用于实现基数统计的功能。小结HyperLogLog 提供了一种非常高效的方式来对大规模数据集进行去重计数。...虽然其结果是估计值,但其高效性和准确度使其在处理大数据统计时表现出色。通过上述的简单示例,相信你已经对 Redis 的 HyperLogLog 有了基本的了解。

2910

如何用 Redis 统计独立用户访问量?

今天来聊一聊拼多多的一道后台面试真题,是一道简单的架构类的题目:拼多多有数亿的用户,那么对于某个网页,怎么使用Redis统计一个网站的用户访问数呢?...使用Hash 哈希是Redis的一种基础数据结构,Redis底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会拉出一个链表出来。...当我们要统计某一个网站某一天的访问量的时候,就可以直接使用HLEN来得到最终的结果了。 ? 优点:简单,容易实现,查询也是非常方便,数据准确性非常高。 缺点:占用内存过大,。...最后我们通过BITCOUNT可以统计该网页每天的访问数量。 ?...使用概率算法 对于拼多多这种多个页面都可能非常多访问量的网站,如果所需要的数量不用那么准确,可以使用概率算法,事实上,我们对一个网站的UV的统计,1亿跟1亿零30万其实是差不多的。

88210

如何统计Redis中各种数据的大小

UPDATED:如果版本够,记得试试 redis-cli 的 bigkeys 选项 如果 MySQL 数据库比较大的话,我们很容易就能查出是哪些表占用的空间;不过如果 Redis 内存比较大的话,我们就不太容易查出是哪些...有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告,可惜它不能百分百实现我的需求,而我也不想在它的基础上二次开发。...php $patterns = array( 'foo:.+', 'bar:.+', '.+', ); $redis = new Redis(); $redis->setOption...(Redis::OPT_SCAN, Redis::SCAN_RETRY); $result = array_fill_keys($patterns, 0); while ($keys = $redis...> 当然,前提是你需要提前总结出可能的键模式,简单但不严谨的方法是 MONITOR: shell> /path/to/redis-cli monitor | awk -F '"' '$2

93930

redis中的bit运用统计用户在线天数

使用setBit和bitCount可以实现用户活跃天数的统计,大体的思路如下: 我们网站今天第一天上线,某用户taoshihan,今天有访问那么我就记一下,网站第一天,taoshihan访问1; 网站第二天...,taoshihan访问1;网站第80天,taoshihan访问1;其余时间没有访问过,那么我们统计得出taoshihan活跃天数为3。...使用代码体现为如下,具体解释可以查看视频: https://www.bilibili.com/video/av70912075/ //使用setBit和bitCount实现用户在线天数的统计 $redis...very good" //对字符串二进制位为1的个数进行统计 $redis->set('name','a'); $v=$redis->bitCount('name'); var_dump($v);/...($v);//输出q,二进制为01110001 //使用setBit和bitCount实现用户在线天数的统计 $redis->set("taoshihan",'@');//@符号的二进制形式为 01000000

59440
领券