redis 实现uv统计

本文介绍了Redis中用于计数的两种数据结构——SET和HyperLogLog。SET适用于小型站点,通过SADD和SCARD命令进行操作,但随着数据量增加会占用大量存储空间。HyperLogLog则提供了一种更节省空间的解决方案,PFADD用于添加元素,PFCOUNT用于计算基数,尽管可能无法精确计数,但在处理大型数据集时能有效减少存储需求。
摘要由CSDN通过智能技术生成

一、通过 SET 结构实现

SADD

  • 语法:SADD key member [member …]
  • 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略
  • 假如 key 不存在,则创建一个只包含 member 元素作成员的集合
  • 当 key 不是集合类型时,返回一个错误

SCARD

  • 语法:SCARD key
  • 返回集合 key 的基数(集合中元素的数量)

代码实践

127.0.0.1:6379> sadd 'index.uv.20210331' 'user_1'
(integer) 1
127.0.0.1:6379> sadd 'index.uv.20210331' 'user_2'
(integer) 1
127.0.0.1:6379> sadd 'index.uv.20210331' 'user_3'
(integer) 1
127.0.0.1:6379> sadd 'index.uv.20210331' 'user_2'
(integer) 0
127.0.0.1:6379> sadd 'index.uv.20210331' 'user_1'
(integer) 0
127.0.0.1:6379> scard 'index.uv.20210331'
(integer) 3

以上方案只使用与小型站点,对于大型站点会耗费大量的 Redis 存储空间

二、HyperLogLog

PFADD

  • 语法:PFADD key element [element …]
  • 如果给定键已经是一个 HyperLogLog , 那么这种调用不会产生任何效果
  • 但如果给定的键不存在, 那么命令会创建一个空的 HyperLogLog , 并向客户端返回 1

PFCOUNT

  • 语法:PFCOUNT key [key …]

代码实践

127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_1'
(integer) 1
127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_2'
(integer) 1
127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_3'
(integer) 1
127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_2'
(integer) 0
127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_2'
(integer) 0
127.0.0.1:6379> pfadd 'home.uv.20210331' 'user_2'
(integer) 0
127.0.0.1:6379> pfcount 'home.uv.20210331'
(integer) 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值