redis HyperLogLog的基本概念及使用

概念

HyperLogLog是Redis的高级数据结构,是一种基数统计算法,用于高性能的基数(去重)统计功能。它的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算2^64的数据³。

HyperLogLog的原理是:通过随机映射函数将输入元素映射到一个固定大小的位图中,然后通过位图中零位的数量来估算基数。HyperLogLog使用了一些技巧来减少误差率,例如:使用多个随机映射函数、使用稀疏位图等¹².

(1) Redis HyperLogLog | 菜鸟教程. https://www.runoob.com/redis/redis-hyperloglog.html
(2) 走近源码:神奇的HyperLogLog - 知乎. https://zhuanlan.zhihu.com/p/58519480
(3) 优秀的基数统计算法——HyperLogLog - 知乎. https://zhuanlan.zhihu.com/p/462973469

基本使用

统计一天的UV

在这里插入图片描述

统计两天的UV

在这里插入图片描述

python操作redis hyperloglog代码示例

以下是HyperLogLog的基本使用代码示例:

import redis

r = redis.Redis(host='localhost', port=6379, db=0)

r.pfadd('hll', 'a', 'b', 'c', 'd', 'e')
print(r.pfcount('hll'))

在这个例子中,我们使用了Python Redis客户端来连接Redis服务器。我们使用了pfadd命令向HyperLogLog添加元素,使用pfcount命令计算基数。在这个例子中,我们添加了5个元素,然后计算基数。输出结果为5.

Redis计算某个key对应的value所占内存大小

redis内置命令:能够计算某个key对应的value所占内存大小

Redis在4.0版本开始,提供了允许查看特定key大小的命令MEMORY USAGE命令,具体示例如下:

redis_host:6379 > set knowledge dict OK
redis_host:6379 > memory usage knowledge
(integer) 59

返回指定key的内存占用字节数。如果要查看的key是内嵌类型(除string之外的集合类型),可以使用SAMPLES选项来可以指定采样的元素个数。假设,键knowledgedict是哈希(hash)类型,它有10000个元素,那么预估该键的占用大小,可以通过SAMPLES选项来指定采样元素个数,进行抽样平均计算后预估总大小。

python代码:redis计算value存储容量大小的命令

Redis没有直接计算value存储容量大小的命令。但是,我们可以通过计算字符串内存空间的占用来估算value存储容量大小。以下是计算字符串内存空间的占用的命令:

import redis

r = redis.Redis(host='localhost', port=6379, db=0)

print(r.memory_usage('key', 1))

在这个例子中,我们使用了Python Redis客户端来连接Redis服务器。我们使用了memory_usage命令来计算字符串内存空间的占用。在这个例子中,我们计算了一个长度为1的字符串的内存空间占用。输出结果为:43.

(1) Redis的key和value大小限制 | value需要压缩吗? - CSDN博客. https://blog.csdn.net/inthat/article/details/127325451.
(2) 一起学习Redis–怎么计算字符串内存空间的占用 - 掘金. https://juejin.cn/post/6886726965030551559.
(3) Redis设置内存大小和查看内存使用情况 - CSDN博客. https://blog.csdn.net/qq_38056518/article/details/122107638.

伯努利概率实验

伯努利概率实验是一种随机试验,它只有两种可能的结果:成功或失败。这种试验的特点是每次试验的结果都是相互独立的,而且每次试验成功的概率都是相同的。这种试验通常用来研究某个事件发生的概率。

例如,我们可以进行一次抛硬币的伯努利实验。硬币正面朝上的概率为0.5,反面朝上的概率也为0.5。每次抛硬币的结果都是相互独立的,而且每次抛硬币正面朝上和反面朝上的概率都是相同的。
在这里插入图片描述

极大似然估算法

极大似然估算法是一种参数估计方法,它的目标是找到最大化给定数据集的似然函数的参数值。在这个方法中,我们假设数据集是从一个已知的概率分布中抽取的,但是我们不知道这个分布的参数。我们使用极大似然估计来找到最有可能产生这个数据集的参数值。
让我们来看一个例子。假设我们有一个硬币,我们不知道这个硬币是公正的还是不公正的。我们可以进行一些试验来确定这个硬币是公正的还是不公正的。我们可以抛硬币10次,然后记录正面朝上的次数。如果我们得到了7次正面朝上和3次反面朝上,那么我们可以使用极大似然估计来估计这个硬币是公正的还是不公正的。

在这个例子中,我们假设硬币是公正的,因此每次抛硬币正面朝上和反面朝上的概率都是0.5。我们可以使用二项分布来描述这个试验。二项分布有两个参数:n和p。n表示试验次数,p表示每次试验成功的概率。在这个例子中,n=10,p=0.5。

现在我们可以使用极大似然估计来估计这个硬币是公正的还是不公正的。我们可以计算出在假设硬币是公正的情况下,得到7次正面朝上和3次反面朝上的概率。然后我们可以计算出在假设硬币不公正的情况下,得到7次正面朝上和3次反面朝上的概率。最后,我们选择概率更大的那个假设作为估计值。

在这里插入图片描述

调和平均数

调和平均数是求一组数值的平均数的方法中的一种,一般是在计算平均速率时使用。调和平均数是将所有数值取倒数并求其算术平均数后,再将此算术平均数取倒数而得,其结果等于数值的个数除以数值倒数的总和¹。

举个例子,如果你要从A到B,第一段路程速度为v1,第二段路程速度为v2,那么你的平均速度应该是调和平均速度:2/(1/v1+1/v2)。这是因为你所走的路程是相等的,所以你需要计算每段路程所需的时间,然后将这些时间相加并除以总路程长度。

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/130560217
今日推荐