HyperLogLog详解


一、Hyperloglog简介


Hyperloglog 在redis作为一种特殊的数据类型,主要应用于大型集合中的个数估算。

例:
存在一个集合系列:
{
“a”,”b”,”c”,”d”,”a”,”c”,”b”,”d”,”e”
}
个数估算:
5


hyperloglog数据类型的优点:
无论输入数据的多少和大小,都不会影响Hyperloglog所占用redis的内存大小,hyperloglog在redis中占用固定的大小。
hyperloglog 占用12k大小,可以统计2的64次放个不同元素的数量。
hyperloglog数据类型的缺点:
只能统计出元素的个数,但是不能统计返回输入元素。



二、Hyperloglog应用

2.1 输入元素至hyperloglog
语法如下:

  redis 192.168.8.123>pfadd KeyName  元素1 元素2 元素3 ...
  
注意事项: 1 keyName 须不存在redis数据库中或为hyperloglog类型 2 可以一次向keyName中添加多个元素,或分多次添加元素 3 命令执行成功,客户端返回1

例:

    redis 192.168.8.123:6379> flushdb  //清空当前数据库
    OK
    redis 192.168.8.123:6379> pfadd keyName a b c ab c b e f f //向键中添加元素,命令执行成功后,返回1 
    (integer) 1
    redis 192.168.8.123:6379> pfcount keyName
    (integer) 6
    redis 192.168.8.123:6379> pfadd keyName io 9 r
    (integer) 1
    redis 192.168.8.123:6379> pfcount keyName
    (integer) 9 
  

2.2 获取数据类型中的个数估算
语法如下:

  redis 192.168.8.123>pfcount keyName 
  注意事项:
   1 当keyName为非hyperloglog类型时,返回相应的错误信息
   2 当keyName不存在时,返回0
   3 当名称执行成功,客户端返回当前键所统计的个数估算
  

2.3 两个个数估算合并
将多个hyperloglog数据类型合并为一个hyperloglog,合并后的个数估算功能是对所有hyperloglog输入进行并集生成一个新的集合。
语法如下:

  redis 192.168.8.123>pfmerge newKeyName  sourceKeyName1 sourceKeyName2 ...
  注意事项:
   1 newKeyName 为合并后 ,新生成的hyperloglog类型,
     newKeyName 为非hyperloglog类型时,返回相应的错误信息
     newKeyName 不存在于redis数据库时,将创建此类型,将新生成的集,放入此键中
     newKeyName 为hyperloglog类型时,将会剔除里面的内容,放入新生成的集。
   2 sourceKeyName1 sourceKeyName2 ... 任意一个为 非hyperloglog类型时,返回相应的错误信息
   3 命令执行成功后,返回OK
  

例:

    redis 192.168.8.123:6379> flushdb   //清空当前数据库 
OK
redis 192.168.8.123:6379> set k v   //设置一个string数据类型
OK
redis 192.168.8.123:6379> pfadd k a b  c  //对一个非hyperloglog类型执行pfadd命令。系统返回相应的错误信息
(error) WRONGTYPE Key is not a valid HyperLogLog string value.
redis 192.168.8.123:6379> pfadd k1 a b c d e f a b  cd 1 3
(integer) 1
redis 192.168.8.123:6379> pfcount k1
(integer) 9
redis 192.168.8.123:6379> pfadd k1 a b c 8 5 0
(integer) 1
redis 192.168.8.123:6379> pfcount k1
(integer) 12
redis 192.168.8.123:6379> pfadd k2 a  abc acd
(integer) 1
redis 192.168.8.123:6379> pfcount k2
(integer) 3
redis 192.168.8.123:6379> pfmerge k3 k1 k2 //对两个hyperloglog求 并集
OK
redis 192.168.8.123:6379> pfcount k3  //生成一个新的hyperloglog类型
(integer) 14
redis 192.168.8.123:6379> pfmerge k k1 k2 //将结果返回至一个非hyperloglog类型中,系统返回相应的错误信息
(error) WRONGTYPE Key is not a valid HyperLogLog string value.
 
  

如下图所示:

redis hyperloglog数据类型及用法简介

redis hyperloglog数据类型及用法简介

window redis 文件夹文件说明 (二) —[ redis-cli]
window redis 文件夹文件说明 (一 )
Redis 数据类型简介
windows下 Redis配置
c# redis应用实例
redis相关简介
KV数据库简介