0
点赞
收藏
分享

微信扫一扫

Redis之HypeLogLog的使用

GG_lyf 2021-12-29 阅读 50

需求分析

简单的实现PV与UV统计

  • PV统计

在Redis的String类型中,提供了一个API为incr key,可以为一个key的value做自增操作,每次调用则自增1。
我们可以将pv视作key,每次网站被点击就自增1,就可以简单的实现PV的统计了。

  • UV统计

Redis还有一个Set的数据结构,可以轻松的实现去重的操作,通过sadd key element指令,将uv视作key,不同的用户视作element,每当一个新用户进入网站时,则往set集合中添加一个userId。在需要统计的时候通过scard key指令(时间复杂度为O(1)),则可以得到网站的用户访问数量了.

为此,Redis提供了另外一种数据结构:HypeLogLog

HypeLogLog

它提供了几个指令,但是解决UV这个问题,我们只需要用到其中的两个指令即可

pfadd key element|element

统计

pfcount key

下面在Java中模拟数据进行测试,发现结果的准确率是很高的。

package com.xjm.redis;

/**
* 使用Redis的HyperLogLog统计用户访问量Page View和访问用户数User View
*/

public class CountPvAndUv {
public static void main(String[] args) {
Redis redis = new Redis();
redis.exeute(jedis -> {
for (int i = 0; i < 2000; i++) {
//key为uv,value每次放2个,一个是当前的i,一个是下一个i值,那么下次循环就会产生重复值了
jedis.pfadd("uv","u"+i,"u"+(i+1));
}
long uv = jedis.pfcount("uv");
System.out.println(uv);
});
}
}

举报

相关推荐

0 条评论