2019独角兽企业重金招聘Python工程师标准>>>

代码:

https://github.com/viakiba/redis

主要是:

PFADD/PFCOUNT/PFMERGE

import org.junit.Test;import redis.clients.jedis.Jedis;/*** @description: HyperLogLog*             PFADD/PFCOUNT/PFMERGE*      参考:*             http://redisdoc.com/hyperloglog/index.html*         介绍:*             它是redis内置的一种数据结构,熟悉命令,在代码结束位置,给具体用例。*          Spring data Redis(依赖Spring core)* @author viakiba* @date 2017年8月18日*/
public class App23 {static interface RedisConfig {public final static String HOST = "127.0.0.1";public final static int PORT = 6379;}/*** @description: 测试连接是否通过* @author: viakiba* @throws Exception*/@Testpublic void test1() throws Exception {//连接测试是否通过Jedis jedis = new Jedis(RedisConfig.HOST,RedisConfig.PORT);System.out.println(jedis.ping());//pong则通过jedis.close();}/*** @description: PFADD/PFCOUNT/PFMERGE*         参考:*            http://aiilive.blog.51cto.com/1925756/1627455* * @author: viakiba* @throws Exception*/@Testpublic void test2() throws Exception {Jedis jedis = new Jedis(RedisConfig.HOST,RedisConfig.PORT);/*将任意数量的元素添加到指定的 HyperLogLog 里面。作为这个命令的副作用, HyperLogLog 内部可能会被更新, 以便反映一个不同的唯一元素估计数量(也即是集合的基数)。如果 HyperLogLog 估计的近似基数(approximated cardinality)在命令执行之后出现了变化, 那么命令返回 1 , 否则返回 0 。如果命令执行时给定的键不存在, 那么程序将先创建一个空的 HyperLogLog 结构, 然后再执行命令。调用 PFADD 命令时可以只给定键名而不给定元素:如果给定键已经是一个 HyperLogLog , 那么这种调用不会产生任何效果;但如果给定的键不存在, 那么命令会创建一个空的 HyperLogLog , 并向客户端返回 1 。*/
//      Long pfadd = jedis.pfadd("h1", "a","b","a","c","a","d","a","e");
//      Long pfadd1 = jedis.pfadd("h1", "a","b","a","c","a","d","a","e");
//      System.out.println(pfadd+":"+pfadd1);//key不存在返回1,存在返回0/*当 PFCOUNT 命令作用于单个键时, 返回储存在给定键的 HyperLogLog 的近似基数, 如果键不存在, 那么返回 0 。当 PFCOUNT 命令作用于多个键时, 返回所有给定 HyperLogLog 的并集的近似基数, 这个近似基数是通过将所有给定 HyperLogLog 合并至一个临时 HyperLogLog 来计算得出的。通过 HyperLogLog 数据结构, 用户可以使用少量固定大小的内存, 来储存集合中的唯一元素 (每个 HyperLogLog 只需使用 12k 字节内存,以及几个字节的内存来储存键本身)。命令返回的可见集合(observed set)基数并不是精确值, 而是一个带有 0.81% 标准错误(standard error)的近似值。*/
//      long pfcount = jedis.pfcount("h1");
//      long pfcount1 = jedis.pfcount("h2");
//      long pfcount2 = jedis.pfcount("h1","h2");
//      System.out.println(pfcount+":"+pfcount1+":"+pfcount2);/*将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在 destkey 键里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的 HyperLogLog 。*/String pfmerge = jedis.pfmerge("h1", "h1","h2");System.out.println(pfmerge);jedis.close();}/*经过上述效果演示,这种数据结构被应用在一个典型场景,网站每天的独立IP访问量。集合实现:使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命令来得出独立 IP 的数量。举个例子,程序可以使用以下代码来记录 2014 年 8 月 15 日,每个网站访客的 IP :ip = get_vistor_ip()SADD '2014.8.15::unique::ip' ip然后使用以下代码来获得当天的唯一 IP 数量:SCARD '2014.8.15::unique::ip'集合实现的问题使用字符串来储存每个 IPv4 地址最多需要耗费 15 字节(格式为 'XXX.XXX.XXX.XXX' ,比如'202.189.128.186')。下表给出了使用集合记录不同数量的独立 IP 时,需要耗费的内存数量:独立 IP 数量一天一个月一年一百万15 MB 450 MB 5.4 GB一千万150 MB 4.5 GB 54 GB一亿1.5 GB 45 GB 540 GB随着集合记录的 IP 越来越多,消耗的内存也会越来越多。另外如果要储存 IPv6 地址的话,需要的内存还会更多一些为了更好地解决像独立 IP 地址计算这种问题,Redis 在 2.8.9 版本添加了 HyperLogLog 结构。HyperLogLog介绍HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值:• 基数:集合中不同元素的数量。比如 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基数就是 3 。• 估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。参考:http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html*/
}

转载于:https://my.oschina.net/viakiba/blog/1513840

java使用jeids实现redis2.6的HyperLogLog数据结构的操作相关推荐

  1. java使用jeids实现redis2.6的String操作(1)

    2019独角兽企业重金招聘Python工程师标准>>> 代码: https://github.com/viakiba/redis package com.viakiba.redis. ...

  2. java akiba,java使用jeids实现redis2.6的脚本执行

    代码: https://github.com/viakiba/redis import static org.junit.Assert.*; import java.util.ArrayList; i ...

  3. java使用jeids实现redis2.6的list操作(4)

    2019独角兽企业重金招聘Python工程师标准>>> 代码: https://github.com/viakiba/redis import org.junit.Test;impo ...

  4. java List最大_在java中获取List集合中最大的日期时间操作

    取list集合中最大的日期, 可以用date max = collections.max(datelist);, 传入一个日期集合, 就可以获取, 工作中有这个需求, 就查找到这个, 代码如下 } e ...

  5. Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作

    前面三篇文章讲述了如何配置MyEclipse和Tomcat开发JSP网站.如何配置Servlet简单实现表单提交.如何配置MySQL实现JSP数据库查询.         这篇文章主要讲述Servle ...

  6. java 增 删 查 改_如何对java链表进行增、删、查、改操作

    如何对java链表进行增.删.查.改操作 发布时间:2020-06-23 10:41:33 来源:亿速云 阅读:79 作者:Leah 如何对java链表进行增.删.查.改操作?针对这个问题,今天小编总 ...

  7. idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...

    intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...

  8. 笔记整理4----Java语言高级(四)16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级

    16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级 第05天 API 今日内容介绍  Object类 & System类 ...

  9. Java 实现分段截取视频 生成gif图 使用ffmpeg操作

    Java 实现分段截取视频 生成gif图 使用ffmpeg操作 前言 核心代码 调用的抽象方法,包含逻辑处理 通过ffmpeg获取视频时长 合成gif图 删除文件夹 最终的调用 如果有更好的方式,请务 ...

最新文章

  1. 树莓派查看mysql的密码_树莓派安装MySQL 后若何获取登录密码
  2. Planning Strategy 和Requirement type的思考
  3. Linux Shell命令能力倾向问题和解答
  4. 计算机杀毒记录表格,11科室计算机杀毒登记表
  5. Hibernate 缓存机制详细分析
  6. 关于使用JAVA进行MIB文件解析
  7. 小软件项目开发的管理
  8. php 小程序获取access_token
  9. 分享| 电脑设置双屏或多屏显示2种简单方法,你能学会几种?
  10. 美团开店宝Android pad,美团开店宝(com.sankuai.meituan.merchant) - 9.2.1 - 应用 - 酷安
  11. 从投资人发现“新大陆”,看“产融星城”为何成?
  12. 滚动轴承特征频率计算推导过程
  13. chroom浏览器网页二维码生成功能的方法
  14. The requested resource (Servlet action is not available) is not available.这个问题让我通宵了一个晚上
  15. java gui论文_毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc
  16. 0基础学python培训班_[长文] 学Python不用培训班,一篇文章带你入门
  17. LeetCode 208 实现 Trie (字典树)
  18. Mysql 单表查询where初识
  19. IDEA git配置
  20. 人工智能观看100部电影学习如何识别接吻 | 广东省智能创新协会

热门文章

  1. thinkphp5--文章发布后台管理系统
  2. 计算机辅助设计cad综述,控制系统计算机辅助设计综述
  3. ubuntu执行python脚本_在启动时运行python脚本作为守护进程(Ubuntu)
  4. python锁机制_Python并发编程之谈谈线程中的“锁机制”(三)
  5. easyui刷新几种方式
  6. java 内存分布_java的各类型数据在内存中分配情况详解_
  7. android p获取通话记录_Android 底层的进程间同步机制
  8. python导入requests库_windows环境中python导入requests
  9. yum centos 7.4 安装svn服务器
  10. python缩进块是什么_python中缩进是用来做什么的