Redis HyperLogLog命令,phpredis如何执行HyperLogLog命令
redis在redis2.8.9版本中加入了Redis HyperLogLog结构;
Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的好处是:当输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定的,且很小的。
在redis中,每个HyperLogLog键只需花费12Kb的内存,就可以计算2^64个不同元素的基数;这和计算基数是,元素越多耗费内存就越多的集合形成鲜明对比。
Redis HyperLogLog的缺点是:只会根据输入元素本身来计算基数,而不存储输入元素本身,所以HyperLogLog不能像集合那样返回输入的各个元素。
那什么是基数呢
基数是数据集中去除所有重复的元素之后数据集的大小
eg:
给定数据集{1,2,3,6,2,4,1},那么该数据集的基数集为{1,2,3,6,4},其基数为5(不重复元素个数)
命令介绍
- PFADD(key element [element1 ....])
- 说明:将所有元素参数添加到HyperLogLog中
- 参数:key(HyperLogLog的名称),element(将要加入的元素)
- 返回:整型,如果至少有一个元素加入返回1,否则返回0
- 实例:
PFADD hl1 zset1 zset2 zset3,返回:1
- 注意:redis-server > 2.8.9
- PFCOUNT(key key1 ...)
- 说明:返回给定的HyperLogLog的基数估算值
- 参数:key(HyperLogLog的名称)
- 返回:整型,返回给定的HyperLogLog的基数值,如果有多个HyperLogLog,则返回所有基数估值之和
- 实例:
PFCOUNThl1,返回值:3
- 注意:redis-server > 2.8.9
- PFMERGE(dstKey srcKey1 srcKey2,..)
- 说明:将给定的多个HyperLogLog合并成一个HyperLogLog,合并后的HyperLogLog的基数估值是对所有给定的HyperLogLog进行并集计算得出的
- 参数:dstKey(目标HyperLogLog),srcKey(源HyperLogLog)
- 返回:返回OK
- 实例:
PFMERGE hl1 hl2
- 注意:redis-server > 2.8.9
phpredis操作HyperLogLog
phpredis中没有直接用来执行HyperLogLog相关命令的函数,但是phpredis提供了可以直接执行redis命令的方法:rawCommand(),该方法可以执行任意的redis原生命令
- rawCommand(parameters)
- 说明:rawCommand方法是可以执行任意redis命令的方法
- 参数:parameters(需要执行的命令的参数)
- 返回:和要执行的命令具有相同的返回值
- 实例:
$redis->rawCommand("set", "foo", "bar");返回值;true
- 注意:phpredis>2.2.7才能使用rawCommand()方法
有罪是符合人性的,但长期坚持不改就是魔鬼。