当前位置: 首页 > 面试题库 >

redis HLL误报过多

濮阳功
2023-03-14
问题内容

Hyperlog日志是一种概率算法,根据redis HLL文档,我们可以获得0.81%的错误,但我却得到17-20%的错误

我认为出了点问题..这是我简单的perl测试脚本。有什么错误吗

#!/usr/bin/perl -w                                                                                                                                                       
use Redis;
my $redis = Redis->new(server=>'192.168.50.166:6379') or die;
my $fp=0;
my $HLL="HLL";

$redis->del($HLL);
foreach my $i (1..10000) {
  my $s1 = $redis->pfadd($HLL,$i);
  if($s1 == 0){ 
    print "False positive on $i\n";
    $fp++;
  }
}
print "count of false positives $fp\n";

问题答案:

HyperLogLog用于计数唯一项。它可以用很少的内存计算大量项目。但是,返回的基数不是精确的,而是近似为standard error

0.81%standard error,不是误报。对于您的实例,您可以调用PFCOUNT HLL获取放入中的唯一项目的近似数量HyperLogLog。返回的数字应在的范围内[10000 * (1 - 0.81%), 10000 * (1 + 0.81%)]

PFADD如果在执行命令后更改了估计的基数,则返回1。否则返回0。它与无关false positive

似乎您需要的是Bloom
Filter
,它可以告诉您数据集中是否存在某个项目,且误判为假。Bloom Filter当然,您可以使用Redis 来实现。为此,应该有一些开源项目。



 类似资料:
  • 错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。 开发环境 为了在开发环境中显示所有可能的错误,将你的 php.ini 进行如下配置: display_errors = On display_startup_errors = On error_re

  • 生成报告时出错:org。阿帕奇。杰米特。汇报仪表板GenerationException:处理示例时出错:消费者失败,消息为:消费者失败,消息为:消费者失败,消息为:消费者失败,消息为:开始大小0不等于固定大小5

  • 1.1.2. 错误报告 没有不会犯错的开发者,PHP的错误报告功能将协助您确认和定位这些错误。可以PHP提供的这些详细描述也可能被恶意攻击者看到,这就不妙了。使大众看不到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。 由于出错报告的级别设定可以导致

  • 从文档中,我仍然不明白如何在broker.xml中为STOMP协议配置消息过期。 除其他外,我们使用“持久订阅”。因此,即使在我们不受欢迎的项目中,每月的主题数量也可能超过50,000个,这导致服务器内存不足,尤其是如果我们转到web控制台。 我希望在删除过期消息时,会自动删除不必要的地址和队列

  • 我已经创建了一个注册表。我不知道为什么现在它不再工作了。现在我收到一个404错误: 类型状态报告 信息/酒店预订/注册 说明源服务器找不到目标资源的当前表示形式,或不愿意透露存在该表示形式。 这是我的 登记Java语言 而这是我的 登记jsp 你认为我怎样才能解决这个问题?谢谢 编辑:这是我的: web.xml HTTP状态404–未找到 类型状态报告 信息/酒店预订/注册 说明源服务器找不到目标

  • 当简单报表不适用于子报表时,此操作有效...