iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis中 HyperLogLog数据类型使用小结
  • 224
分享到

Redis中 HyperLogLog数据类型使用小结

Redis HyperLogLog数据类型使用Redis HyperLogLog数据类型 2023-03-13 08:03:07 224人浏览 泡泡鱼
摘要

目录1. HyperLogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些

1. HyperLogLog 的原理

  Redis HyperLogLog基于一种称为HyperLogLog算法的概率性算法来估计基数。 HyperLogLog使用一个长度为m的位数组和一些hash函数来估计集合中的唯一元素数。

在 HyperLogLog 算法中,对每个元素进行哈希处理,把哈希值转换为二进制后,根据二进制串前缀中 1 的个数来给每个元素打分。例如,一个元素的哈希值为01110100011,那么前缀中1的个数是3,因此在 HyperLogLog 算法中,这个元素的分数为3。

  当所有元素的分数统计完之后,取每一个分数的倒数(1 / 2^n),然后将这些倒数相加后取倒数,就得到一个基数估计值,这个值就是HyperLogLog算法的估计结果。

  HyperLogLog算法通过对位数组的长度m的大小进行取舍,折衷数据结构占用的内存与估计值的精准度(即估计误差),得到了在数据占用空间与错误较小程度之间完美的平衡。

  简而言之,HyperLogLog算法的核心思想是基于哈希函数和位运算,通过将哈希值转换成比特流并统计前导0的个数,从而快速估算大型数据集中唯一值的数量。通过 hyperloglog 算法我们可以在非常大的数据集中进行极速的网页浏览器去重。

2.使用步骤:

  Redis HyperLogLog是一种可用于估算集合中元素数量的数据结构,它能够通过使用非常少的内存来维护海量的数据。它的精确度要比使用一般的估计算法高,并且在处理大量数据时的速度也非常快。

  一个简单的例子,我们可以用HyperLogLog来计算访问网站的独立IP数,具体可以按以下步骤操作:

  • 首先创建一个HyperLogLog数据结构:  PFADD hll:unique_ips 127.0.0.1
  • 为每次访问ip添加到unique_ips数据结构中: PFADD hll:unique_ips 192.168.1.1
  • 获取计算集合中元素数量的近似值: PFCOUNT hll:unique_ips
  • 可以通过对多个HyperLogLog结构(例如按天或按小时)的合并,来获得更精确的计数。

  需要注意的是,HyperLogLog虽然可以节省大量的内存,但它是一种估计算法,误差范围并不是完全精确的,实际使用时应注意其适用范围。

3.实现请求ip去重的浏览量使用示例

4.Jedis客户端使用

  1. 添加依赖,引入jedis依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.6.0</version>
</dependency>

  2.创建一个Jedis对象:

Jedis jedis = new Jedis("localhost");

  3.向HyperLogLog数据结构添加元素:

jedis.pfadd("hll:unique_ips", "127.0.0.1");

  4.获取计算集合中元素数量的近似值:

Long count = jedis.pfcount("hll:unique_ips");
System.out.println(count);

  5.可以通过对多个HyperLogLog结构的合并来获得更精确的计数。在Jedis中可以使用PFMERGE命令来合并HyperLogLog数据结构:

jedis.pfmerge("hll:unique_ips", "hll:unique_ips1", "hll:unique_ips2", "hll:unique_ips3");

5.Redission使用依赖

  1.创建RedissonClient对象

Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
RedissonClient redisson = Redisson.create(config);

  2.创建RHyperLogLog对象

RHyperLogLog<String> uniqueIps = redisson.getHyperLogLog("hll:unique_ips");

  3.添加元素

uniqueIps.add("127.0.0.1");

  4..获取近似数量

long approximateCount = uniqueIps.count();
System.out.println(approximateCount);

  5.合并多个HyperLogLog对象

RHyperLogLog<String> uniqueIps1 = redisson.getHyperLogLog("hll:unique_ips1");
RHyperLogLog<String> uniqueIps2 = redisson.getHyperLogLog("hll:unique_ips2");
uniqueIps.mergeWith(uniqueIps1, uniqueIps2);

6.HyperLogLog 提供了哪些特性和方法

  特性:

  • 精确度低,但占用内存极少。
  • 支持插入新元素,同时不会重复计数。
  • 提供指令来优化内存使用和计数准确性。例如PFADD、PFCOUNT、PFMERGE等指令。
  • 能够估计一个数据集中的不同元素数量,即集合的基数(cardinality)。
  • 支持对多个HyperLogLog对象进行合并操作,以获得这些集合的总基数的近似值。

  HyperLogLog常用的方法:

  • PFADD key element [element ...]:添加一个或多个元素到HyperLogLog结构中。
  • PFCOUNT key [key ...]:获取一个或多个HyperLogLog结构的基数估计值。
  • PFMERGE desTKEy sourcekey [sourcekey ...]:合并一个或多个HyperLogLog结构到一个目标结构中。
  • PFSELFTEST [numtests]: 测试HyperLogLog估值性能和准确性(仅限Redis4.0+版本)

  需要注意的是,HyperLogLog虽然可以节省大量内存,但仍然是一种估计算法,误差范围并不是完全精确的,并且具有一定的计算成本。在使用时需要根据实际应用情况选择是否使用HyperLogLog或其他数据结构来估计元素数量。

7.使用场景总结:

  Redis使用HyperLogLog的主要作用是在大数据流(view,IP,城市)的情况下进行去重计数。

  具体来说,以下是Redis HyperLogLog用于去重计数的一些场景:

  • 统计页面访问量 - 在WEB应用程序中, HyperLogLog可以使用为每个页面计算多少次独特的访问者。通过跨越多个不同的时间段使用HyperLogLog,可以计算出这个页面的所有时间的平均访问数。
  • 统计用户数 - 在分析大数据集合的用户数量方面,HyperLogLog也非常有用。作为一种基于概率的数据结构,尤其是在处理独特的用户ID这样的数据集合时。在此情况下,HyperLogLog首先执行散列,此后仅在内部存储有限的散列值,同时还能够推断大小。
  • 统计广告点击量 - 对于网站或应用程序的广告分析,HyperLogLog可以用于捕获有效点击数量,即非重复或唯一点击数量。

总之,对于需要进行去重计数的大数据流的情况下,Redis的HyperLogLog是一种简单而强大的工具

到此这篇关于Redis中 HyperLogLog数据类型使用总结的文章就介绍到这了,更多相关Redis HyperLogLog数据类型使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis中 HyperLogLog数据类型使用小结

本文链接: https://www.lsjlt.com/news/199494.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis中 HyperLogLog数据类型使用小结
    目录1. HyperLogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些...
    99+
    2023-03-13
    Redis HyperLogLog数据类型使用 Redis HyperLogLog数据类型
  • Redis中 HyperLogLog数据类型使用小结
    目录1. HyperlogLog 的原理2.使用步骤:3.实现请求ip去重的浏览量使用示例4.Jedis客户端使用5.Redission使用依赖6.HyperLogLog 提供了哪些特性和方法7.使用场景总结:1. Hy...
    99+
    2023-03-13
    Redis HyperLogLog数据类型使用 Redis HyperLogLog数据类型
  • Redis中HyperLogLog数据类型如何使用
    这篇文章主要讲解了“Redis中HyperLogLog数据类型如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中HyperLogLog数据类型如何使用”吧!1. HyperL...
    99+
    2023-07-05
  • Redis高级数据类型Hyperloglog、Bitmap的使用
    目录前言Hyperloglog Hyperloglog简介Hyperloglog作用命令行中的使用SpringBoot中的使用Bitmap Bitmap简介Bitmap作用命令行...
    99+
    2022-11-12
  • Redis特殊数据类型HyperLogLog基数统计算法讲解
    目录Redis HyperLogLog基数统计一、pfadd二、pfcount三、pfmergeRedis HyperLogLog基数统计 HyperLogLog 是用来做基数统计的...
    99+
    2022-11-13
  • redis常用数据类型总结
    redis常用数据类型总结     redis是以键值对key-value的形式来存储数据,而存储的数据类型有5种String,List,Set,Map,以及有序集合这五种数据...
    99+
    2022-10-18
  • PHP中使用Redis的hyperLogLog计数器
    PHP是一种常用的服务器端编程语言,常常被用于开发Web应用程序。而Redis是一个开源的内存数据库,被广泛使用于缓存、分布式锁等场景。Redis有一个特殊的数据结构——HyperLogLog,可以进行基数估计。在某些场景下,我们需要对用户...
    99+
    2023-05-15
    PHP redis hyperloglog
  • Redis中散列类型的常用命令小结
    Redis散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不...
    99+
    2022-06-04
    小结 类型 常用命令
  • Redis列表类型的常用命令小结
    列表类型介绍 列表类型也是一个我们很长要用到的一个类型。比如我们发博客,要用到博客列表。如果没有列表我们就只能遍历键来获取所有文章或一部分文章了,这个语法是keys,但是这个命令需要遍历数据库中的所有键,处...
    99+
    2022-06-04
    小结 类型 常用命令
  • Redis集合类型的常用命令小结
    集合类型介绍 集合类型也是体现redis一个比较高价值的一个类型了。因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算、交集运算、并集运算。 首先我们先介绍一下集合类型和列表类型的区别...
    99+
    2022-06-04
    小结 类型 常用命令
  • Redis数据结构中的String类型有哪些
    这篇文章主要介绍“Redis数据结构中的String类型有哪些”,在日常操作中,相信很多人在Redis数据结构中的String类型有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-19
  • redis中hash数据类型
    remoteSelf:1>hset website google "www.google.com" "1" remoteSelf:1>hget website "ERR wrong number of arguments for ...
    99+
    2021-09-09
    redis中hash数据类型
  • 内存型数据库Redis持久化小结
    因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入...
    99+
    2022-06-04
    小结 持久 内存
  • Redis字符串类型的常用命令小结
    Redis字符串类型 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串...
    99+
    2022-06-04
    小结 字符串 类型
  • Redis有序集合类型的常用命令小结
    一、有序集合类型 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序而已。Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根...
    99+
    2022-06-04
    小结 类型 常用命令
  • Redis数据结构类型实例代码分析
    这篇“Redis数据结构类型实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis数据结构类型实例代码分析”文...
    99+
    2023-07-05
  • pandas中对文本类型数据的处理小结
    目录1.英文字母大小写转换及填充2.字符串合并与拆分2.1 多列字符串合并2.2 一列 列表形式的文本合并为一列2.3 一列字符串与自身合并成为一列2.4 一列字符串拆分为多列2.4...
    99+
    2022-11-12
  • redis数据类型及应用场景知识点总结
    redis数据类型及应用场景 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 一、string 简介:S...
    99+
    2022-10-18
  • Redis中有哪些数据类型
    本篇文章给大家分享的是有关Redis中有哪些数据类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.redis的5种数据类型: string...
    99+
    2022-10-18
  • Redis中数据类型有哪些
    Redis中数据类型有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  Redis不是一个简单的键值对存储,它实际上是一个...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作