Jedis 操作 HyperLogLog

Redis HyperLogLog 是用来做基数统计的数据结构,它的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。本文将介绍怎样通过 jedis 库操作 Redis 的HyperLogLog 数据类型。

添加元素

用来将一个或多个元素添加到指定的 HyperLogLog 中,方法定义如下:

  • Long pfadd(String key, String... elements)

示例:

// 添加一个元素到 hyperloglog
jedis.pfadd("mykey", "c++");
// 添加两个元素到 hyperloglog
jedis.pfadd("mykey", "java", "php");

基数估算

用来返回给定 HyperLogLog 的基数估算值,方法定义如下:

  • long pfcount(String... keys)

  • long pfcount(String key)

示例:

// 准备数据
jedis.pfadd("mykey", "java");
jedis.pfadd("mykey", "php");
jedis.pfadd("mykey", "c++");
jedis.pfadd("mykey", "java");

// 获取 mykey 的基数值
long count = jedis.pfcount("mykey");
System.out.println("count=" + count); // count=3

HyperLogLog合并

用来将多个 HyperLogLog 合并为一个 HyperLogLog,方法定义如下:

  • String pfmerge(String destkey, String... sourcekeys)

示例:

// 准备数据
jedis.pfadd("mykey1", "java");
jedis.pfadd("mykey1", "php");
jedis.pfadd("mykey1", "c++");
jedis.pfadd("mykey1", "java");

// 准备数据
jedis.pfadd("mykey2", "python");

// 将 mykey1 和 mykey2 合并,并且将结果存放到 target
String val = jedis.pfmerge("target", "mykey1", "mykey2");
System.out.println("val=" + val); // val=OK

// 获取 target 的基数值
long count = jedis.pfcount("target");
System.out.println("count=" + count); // count=4

简单实例

统计一段文本中单词的基数。代码如下:

String context = "A Closeable is a source or destination of data that can be closed ." +
       "The close method is invoked to release resources that the object is holding .";

// 使用空格分割文本
String[] words = context.split("\\s+");
for(String word : words) {
   if(".".equals(word)) {
       continue;
   }

   // 将单词添加到 hyperloglog 中
   jedis.pfadd("word_hyper", word);
}

// 获取文本中单词基数
long count = jedis.pfcount("word_hyper");
System.out.println("count=" + count); // count=23
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号