redis的HyperLogLog实战
2018-09-07 10:02
696 查看
序
本文主要研究一下redis的HyperLogLog的用场相关命令
pfadd
每添加一个元素的复杂度为O(1)127.0.0.1:6379> pfadd uv0907 uid1 uid2 uid3 (integer) 1
添加元素到HyperLogLog中,如果内部有变动返回1,没有返回0
pfcount
作用域单个HyperLogLog时,复杂度为O(1),作用于多个HyperLogLog时,复杂度为O(N)127.0.0.1:6379> pfcount uv0907 (integer) 3
返回该HyperLogLog的近似基数,如果是指定多个HyperLogLog则返回的是他们的并集的近似基数
pfmerge
复杂度为O(N),N为合并后的HyperLogLog数量127.0.0.1:6379> pfadd uv0906 uid1 uid4 uid5 (integer) 1 127.0.0.1:6379> pfmerge uv0607 uv0906 uv0907 OK 127.0.0.1:6379> pfcount uv0607 (integer) 5
合并指定的HyperLogLog到新的HyperLogLog中
使用场景
HyperLogLog是Probabilistic data Structures的一种,这类数据结构的基本大的思路就是使用统计概率上的算法,牺牲数据的精准性来节省内存的占用空间及提升相关操作的性能。最典型的使用场景就是统计网站的每日UV。实例如下:@Test public void testUv(){ String uv1 = "uv96"; String uv2 = "uv97"; IntStream.rangeClosed(1,100) .forEach(i -> { System.out.println(i); redisTemplate.opsForHyperLogLog() .add(uv1,"user"+i); redisTemplate.opsForHyperLogLog() .add(uv2,"user"+i/2); }); long uv1Count = redisTemplate.opsForHyperLogLog().size(uv1); System.out.println(uv1Count); long uv2Count = redisTemplate.opsForHyperLogLog().size(uv2); System.out.println(uv2Count); String uv1uv2 = "uv67"; Long uv1uv2Count = redisTemplate.opsForHyperLogLog().union(uv1uv2,uv1,uv2); System.out.println(uv1uv2Count); Long realCount = redisTemplate.opsForHyperLogLog().size(uv1uv2); System.out.println(realCount); }
小结
redis的HyperLogLog特别是适合用来对海量数据进行unique统计,对内存占用有要求,而且还能够接受一定的错误率的场景。对于union操作由于是O(N),在海量数据层面需要注意慢查询问题。
doc
hyperloglogpfadd
pfcount
pfmerge
HyperLogLogs in Redis
hyperloglog的java版使用
相关文章推荐
- Redis HyperLogLog
- Linux+Nginx+Memcached+Redis+PHP+电商购物模块实战开发
- Go实战--golang中使用redis(redigo和go-redis/redis这个已测试)
- Redis 入门之 HyperLogLog
- Redis实战应用举例
- (八)redis常用数据类型 HyperLoglog
- 10、Spring技术栈-整合Redis,使用RedisTemplate实现数据缓存实战
- Redis实战(6)数据类型四Sets
- C# Redis实战(六)
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
- asp.net core 实战之 redis 负载均衡和"高可用"实现
- Redis实战之征服 Redis + Jedis + Spring (二)
- C# Redis实战(五)
- redis实战_06_持久化机制
- Redis和消息队列使用实战
- Redis实战使用
- C# Redis实战(三)
- [置顶] spring boot项目实战:redis
- CentOS 6上的redis搭建实战记录