首页 > 数据库 >redis详细教程(3.ZSet,Bitmap,HyperLogLog)

redis详细教程(3.ZSet,Bitmap,HyperLogLog)

时间:2024-10-30 11:16:51浏览次数:8  
标签:分数 HyperLogLog ZSet 元素 redis Bitmap 数据结构

ZSet

Redis 的 ZSet(有序集合)是一种特殊的数据类型,它允许存储一系列不重复的字符串元素,并为每个元素关联一个分数(score)。这个分数用于对集合中的元素进行排序。ZSet 的特点是:

唯一性:集合中的每个元素都是唯一的。
可排序性:元素可以根据分数进行排序。

内部实现:

ZSet 的内部实现主要依赖于两种数据结构:跳跃表(skiplist)和哈希表(hash table)。跳跃表用于实现元素的排序和范围查询,而哈希表则用于实现元素的快速查找。

跳跃表:一种概率数据结构,可以实现快速的范围查询和排序。
哈希表:用于快速查找元素,确保元素的唯一性。

常用命令:

  1. ZADD:向 ZSet 中添加元素或更新元素的分数。
  2. ZREM:从 ZSet 中移除指定的元素。
  3. ZCARD:获取 ZSet 中的元素数量。
  4. ZRANGE:按照分数升序返回指定范围内的元素。
  5. ZREVRANGE:按照分数降序返回指定范围内的元素。
  6. ZSCORE:获取元素的分数。
  7. ZRANK:获取元素的排名(按分数升序)。

1.添加元素和分数并显示:

2.移除指定的元素。

3.获取 ZSet 中的元素数量

4.获取元素的排名

5.获取分数

ZSet 的操作通常具有较好的性能,但在元素非常多的情况下,性能可能会有所下降。分数的类型为双精度浮点数,需要注意精度问题。

Bitmap

Redis 的 Bitmap 是一种特殊的数据结构,它以位数组的形式存储数据。Bitmap 本质上是一个字符串,但它提供了一系列针对位操作的功能。

Bitmap 是一个由二进制位组成的数组,每一位只能存储 0 或 1。Bitmap 在 Redis 中实际上是以字符串的形式存储的,因此它的大小受限于 Redis 字符串的最大长度,即 512 MB。这意味着一个 Bitmap 可以表示最多 2^32 个不同的位。

常用命令:

  1. SETBIT:设置 Bitmap 中指定位置的位值。
  2. GETBIT:获取 Bitmap 中指定位置的位值。
  3. BITCOUNT:统计 Bitmap 中值为 1 的位的数量。
  4. BITPOS:查找 Bitmap 中第一个设置为 1 或 0 的位的位置。
  5. BITOP:对多个 Bitmap 进行位运算(AND、OR、XOR、NOT)。

1. 使用setbit和getbit设置和获取指定位置的位值:

2.统计 Bitmap 中值为 1 的位的数量

3.BITPOS:查找 Bitmap 中第一个设置为 1 或 0 的位的位置。

4.运算

AND 运算符对两个或多个 Bitmap 进行按位与操作,对于两个 Bitmap 中的每一对相对应的位,只有当两个位都为 1 时,结果位才为 1,否则为 0。

OR 运算符对两个或多个 Bitmap 进行按位或操作。对于两个 Bitmap 中的每一对相对应的位,只要有一个位为 1,结果位就为 1,只有当两个位都为 0 时,结果位才为 0。

XOR 运算符对两个或多个 Bitmap 进行按位异或操作。对于两个 Bitmap 中的每一对相对应的位,只有当两个位不相同时,结果位才为 1,如果两个位相同(都为 0 或都为 1),结果位为 0。

NOT 运算符对单个 Bitmap 进行按位非操作。对于 Bitmap 中的每一位,如果该位为 0,则结果位为 1;如果该位为 1,则结果位为 0。

由于 Bitmap 是以字节为单位进行存储的,所以即使只设置了一个位,也会占用一个完整的字节(8位),Bitmap 的优势在于它的空间效率和简单的位操作,它通过高效的位操作为用户提供了简单而强大的数据存储和统计功能。

HyperLogLog

HyperLogLog 是一种概率数据结构,用于估算集合中的唯一元素数量。它是一种非常内存高效的数据结构,可以用来计算大型数据集中的基数(即集合中不同元素的数量)。

当一个新的元素加入到 HyperLogLog 数据结构中时,首先会使用一个哈希函数对元素进行哈希,产生一个二进制序列,然后会记录从左边开始连续零位的数量,这个数量称为秩(rank)。通常,这个操作是在二进制序列的低位部分进行的。

在 HyperLogLog 中,会维护一个记录最大秩的数组。每当一个新的元素加入时,如果它的秩大于当前记录的最大秩,就会更新这个最大秩,根据最大秩和所有记录的秩的分布,HyperLogLog 使用一种概率算法来估算集合中的唯一元素数量。

常用操作:

  1. PFADD:向 HyperLogLog 添加一个或多个元素。
  2. PFCOUNT:返回 HyperLogLog 的近似基数。
  3. PFMERGE:将多个 HyperLogLog 合并为一个。

1.近似基数(不同元素的数量):

2.合并:

*HyperLogLog 不支持删除操作,一旦元素被添加,就无法从数据结构中移除

HyperLogLog 的标准误差大约是 0.81% ,但可以通过使用不同的内存配置来调整。在 Redis 中,可以通过调整每个 HyperLogLog 的寄存器数量来改变内存使用量和精度。默认情况下,Redis 使用 16384 个寄存器,这通常提供了足够的精度。

标签:分数,HyperLogLog,ZSet,元素,redis,Bitmap,数据结构
From: https://blog.csdn.net/2301_81490350/article/details/143316629

相关文章

  • redis详细教程(4.GEO,bitfield,Stream)
    GEORedisGEO是Redis数据库中的一个功能模块,自Redis3.2版本开始引入,专门用于处理地理位置信息。这个模块使得Redis能够存储并查询地理坐标,非常适合用于需要地理位置数据的应用,如实时位置查询、地理围栏、距离计算等。RedisGEO的数据结构是基于有序集合(SortedSet)。......
  • InnoDB存储引擎、多版本并发控制(MVCC)简介、Redis简介
    (一)InnoDB存储引擎InnoDB是MySQL最常用的存储引擎之一,有支持事务处理、行级锁定和外键约束等高级功能而著称。1、InnoDB架构物理结构表空间:InnoDB的数据存储空间在表空间中,表空间可以分为系统表空间、文件表空间和通用表空间。系统表空间:默认存储在ibdata1文件中,包含系统......
  • 配置Nginx/Redis开机自启
    1.进入/etc/systemd/system目录cd/etc/systemd/system2.创建nginx.service文件vimnginx.service3.配置nginx.service内容*ExecStart,ExecStop,ExecReload以服务器实际存放位置为准[Unit]Description=TheNGINXHTTPandreverseproxyserverAfter=network.targe......
  • redis中穿透、雪崩、击穿的理解
    一、穿透、雪崩、击穿的理解redis充当缓存图穿透、雪崩、击穿本质上都是查询redis数据库时没有数据从而去查业务数据库1、缓存穿透:(要查询的数据根本不存在)是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再......
  • Redis高级部分(集群,发布订阅)
    Redis高级部分:集群、发布订阅机制详解Redis主从复制1.主从复制概念主从复制架构主要用于数据的冗余备份,从节点仅用于同步数据。它无法自动处理主节点故障转移。2.主从复制架构图3.搭建主从复制步骤3.1准备环境3.2配置文件拷贝源码中的redis.conf到每个目录,并修改......
  • redis集群
    一、集群Redis在3.0后开始支持Cluster(模式)模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,支持在线分片(shardingshard)等特性二、集群架构图三、细节所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.节点的fail是......
  • token+redis使用
    在现代Web应用中,Token与Redis的结合使用已成为一种常见的身份验证和授权机制。Token的作用:会话跟踪,每次客户端携带token访问服务器,服务器端校验token的正确性。    好处:灵活的过期策略:Redis可以设置Token的过期时间,一旦过期,系统需要重新验证用户身份。通过合理地设......
  • redis主从复制与哨兵机制
    一、主从复制1、主从复制主从复制架构用来备份主节点的数据,主节点接受用户请求,从节点同步数据2、架构图3、搭建主从复制创建三个目录代表三台机器,master-7000,slave-7001,slave-7002拷贝源码中的redis.conf分别到master-7000,slave-7001,slave-7002中修改三台机器......
  • Windows将Redis安装为服务
    一、下载RedisWindows版Redis下载地址:https://github.com/MicrosoftArchive/redis/releases注:这是微软官方维护的将Redis移植到Windows平台,可能会落后于官方Redis的版本这里使用免安装版Redis官方下载地址(Linux/Unix版):https://redis.io/download二、安装服务......
  • jedis和redis的区别
    Jedis和Redis是在数据库和应用开发中常见的术语,它们在功能和应用上有显著的差异。本文将深入探讨Jedis和Redis之间的主要区别,包括:1.基本概念和作用;2.实现机制和使用方法;3.性能和效率;4.应用场景和适用性;5.社区支持和资源;6.安全性和可靠性;7.技术发展和行业趋势。理解这些差异对于选......