redis特殊数据类型-Hyperloglog(基数统计)用法

一,Hyperloglog介绍

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

花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。

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

其底层使用string数据类型

如果允许容错,那么一定可以使用Hyperloglog !

如果不允许容错,就使用set或者自己的数据类型即可 !

二,Hyperloglog应用场景

网页的访问量(UV):一个用户多次访问,也只能算作一个人。

传统实现,存储用户的id,然后每次进行比较。当用户变多之后这种方式及其浪费空间,而我们的目的只是计数,Hyperloglog就能帮助我们利用最小的空间完成。

三,命令

bash 复制代码
命令	描述
PFADD key element1 [elememt2..]	添加指定元素到 HyperLogLog 中
PFCOUNT key [key]	返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey..]	将多个 HyperLogLog 合并为一个 HyperLogLog

四,案例

bash 复制代码
------------setbit--getbit--------------
127.0.0.1:6379> setbit sign 0 1 # 设置sign的第0位为 1 
(integer) 0
127.0.0.1:6379> setbit sign 2 1 # 设置sign的第2位为 1  不设置默认 是0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> type sign
string

127.0.0.1:6379> getbit sign 2 # 获取第2位的数值
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 4 # 未设置默认是0
(integer) 0

-----------bitcount----------------------------
127.0.0.1:6379> BITCOUNT sign # 统计sign中为1的位数
(integer) 4
相关推荐
Nie_Xun21 分钟前
ubuntu网络共享
linux·运维·ubuntu
杰克尼32 分钟前
MYSQL-175. 组合两个表
数据库·mysql
DemonAvenger34 分钟前
MySQL索引原理深度解析与优化策略实战
数据库·mysql·性能优化
花小璇学linux1 小时前
imx6ull-驱动开发篇22——Linux 时间管理和内核定时器
linux·运维·驱动开发
189228048611 小时前
NY270NY273美光固态闪存NY277NY287
服务器·网络·数据库·科技·性能优化
水痕011 小时前
gin结合minio来做文件存储
java·eureka·gin
寒士obj1 小时前
Spring事物
java·spring
你好,赵志伟2 小时前
Socket 编程 TCP
linux·服务器·tcp/ip
柯南二号2 小时前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
Liang_GaRy3 小时前
心路历程-三个了解敲开linux的大门
linux·运维·服务器