【redis 基础学习】(六)Redis HyperLogLog

摘自:http://www.mayou18.com/detail/o6M0v9mi.html

Redis  HyperLogLog 结构讲解

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

Redis HyperLogLog 命令

下表列出了 redis HyperLogLog 的基本命令:

序号 命令及描述
1 PFADD key element [element ...] 
添加指定元素到 HyperLogLog 中。
2 PFCOUNT key [key ...] 
返回给定 HyperLogLog 的基数估算值。
3 PFMERGE destkey sourcekey [sourcekey ...] 
将多个 HyperLogLog 合并为一个 HyperLogLog

Redis HyperLogLog 命令实例

以下实例演示了 HyperLogLog 的工作过程:

redis 127.0.0.1:6379> PFADD runoobkey "redis"1)
(integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mongodb"1)
(integer) 1
redis 127.0.0.1:6379> PFADD runoobkey "mysql"1)
(integer) 1
redis 127.0.0.1:6379> PFCOUNT runoobkey(integer)
3
时间: 2024-11-02 02:56:45

【redis 基础学习】(六)Redis HyperLogLog的相关文章

Redis基础学习(五)—Redis的主从复制

一.概述     Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中.让从服务器(slave server)成为主服务器(master server)的精确复制品. 以下是关于 Redis 复制功能的几个重要方面: (1)Redis 使用异步复制.从Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度. (

Redis基础学习(四)—Redis的持久化

一.概述      Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方式: RDB方式和AOF方式. (1)RDB方式会根据配置的规则定时的将内存中的数据持久化到硬盘上. (2)AOF则是在每次执行写命令之后将命令记录下来.   1.RDB方式      RDB方式的持久化是通过快照的方式完成的.当符合某种规则时,会将内存中的数据全部生成一个副本存储在硬盘上,Redi

redis基础学习

redis简介 redis是Remote Dictionary Server(远程数据服务)的缩写 数据模型是key-value,是用C编写的 数据类型有string list hash set sorted set 可持久化,保证了数据的安全 支持主从模式 单个最大value最大限制是1G redis安装 tar zxaf redis压缩文件 cd  redis文件夹路径/src  src目录中redis-cli客服端文件,redis-server服务器端文件,redis.conf是redis

Redis基础学习(三)—Key操作

一.key的相关操作 1.删除 del key1 key2 ... Keyn 作用: 删除1个或多个键. 返回值: 不存在的key忽略掉,返回真正删除的key的数量.   2.重命名 rename key newkey 作用: 给key赋一个新的key名 注:如果newkey已存在,则newkey的原值被覆盖.   3.随机key randomkey 作用: 返回随机key.   4.是否存在key exists key 作用: 判断key是否存在,返回1/0.   5.判断key的类型 typ

scala言语基础学习六

trait的学习 1.将trait作为接口来使用 trait中可以实现一些方法,子类只要extends 了trait就可以直接使用父trait里面的方法 普通继承的话父类和子类之间的field是通过引用访问,而trait之间的继承scala编译器会直接用同一个field trait的抽象filed 继承者必须实现 为实例混入trait trait调用链 在trait中覆盖抽象方法 此时不能调用因为是抽象方法 混合使用trait的具体方法和抽象方法

JDBC基础学习(六)—数据库连接池

一.数据库连接池介绍 1.数据库连接池的缘由      对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况就完全不同了.频繁的建立.关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈.      连接复用.通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效.安全的复用,避免了数据库连接频繁建立.关闭

Struts2基础学习(六)—文件的上传和下载

一.文件的上传 1.单个文件上传      Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post" (2)enctype="multipart/form-data" (3)<intput type="file" name="photo">   在Action编写文件上传时,需要定义三个属性. (1)文件类型File,属性名与表单

JavaScript基础学习(六)&mdash;函数

一.函数的定义 1.function语句形式 //1.function语句式 function test1(){ alert("I am test1"); } test1(); 2.函数直接量形式 //2.函数直接量形式 var test2 = function(){ alert("I am test2"); } test2(); 3.通过Function构造函数形式 Function构造函数可以接收任意数量的参数,但最后一个参数始终都被看成函数体.我们不推荐使用,

Oracle 数据库基础学习 (六) 子查询

1.内连接(等值连接) 示例:将连个表内容连接显示 select * from dept d, emp e where d.deptno = e.deptno; 注意:只有当d.deptno = e.deptno条件满足,内容才会显示,否则不显示 2 .外连接:让等值判断左右两边有一边的数据可以全部显示出来,使用外连接方式时使用”(+)” 格式:   左外连接:字段=字段(+) 右外连接:字段(+)=字段 示例:显示雇员的姓名,职位和领导姓名 分析: 确认要使用的数据: 1.  emp表的雇员姓