- 1.pv和uv的概念?
- 2.使用HyperLogLog统计个数
- 2.1 实现原理
- 2.2 pom.xml
- 2.3 JedisUtils
- 2.4 测试模仿统计网站的用户个数
- 2.pfmerge命令
pv即为page view,代表网页的浏览次数。uv即为user view,代表用户个数
2.使用HyperLogLog统计个数 2.1 实现原理使用pfadd来添加数据,类似于sadd,会自动去重!使用pfcount来统计个数,类似于scard
2.2 pom.xml2.3 JedisUtils4.0.0 org.example distribute-lock 1.0-SNAPSHOT com.fasterxml.jackson.core jackson-databind 2.12.3 redis.clients jedis 3.2.0 jar compile
package com.yl;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class JedisUtils {
private static JedisPool jedisPool = null;
public static Jedis getJedisObject() {
if (jedisPool == null) {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//最大空闲数
config.setMaxIdle(400);
//最大连接数
config.setMaxTotal(2000);
//连接最大等待时间,-1代表没有限制
config.setMaxWaitMillis(300000);
jedisPool = new JedisPool(config,"192.168.244.129",6379,30000,"root123");
}
try {
//通过连接池获取jedis对象
Jedis jedis = jedisPool.getResource();
jedis.auth("root123");
return jedis;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
2.4 测试模仿统计网站的用户个数
package com.yl;
import redis.clients.jedis.Jedis;
public class HyperLogLogTest {
public static void main(String[] args) {
Jedis jedis = JedisUtils.getJedisObject();
for (int i = 1; i <= 10000;i++) {
jedis.pfadd("uv","uv"+i);
}
long pfcount = jedis.pfcount("uv");
System.out.println(pfcount);
}
}
结果:理论上是有10000个的,但结果只显示9859,是有误差的,但是统计uv对精确度要求不高,可以接受!
1.作用:合并结果集
pfmerge uv1 uv2



