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

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 个寄存器,这通常提供了足够的精度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/903220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)

DQL(数据查询语言) DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访…

Cisco Packet Tracer 8.0 路由器的基本配置和Telnet设置

文章目录 构建拓扑图配置IP地址配置路由器命令说明测试效果 构建拓扑图 1,添加2811路由器。 2,添加pc0。 3,使用交叉线连接路由器和pc(注意线路端口)。 4,使用配置线连接路由器和pc(注意线路…

优化网站结构提升用户体验的关键要素

内容概要 在数字时代,网站的架构和用户体验密切相关。一个合理的网站结构不仅能帮助用户快速找到所需信息,还能提升整体的访问满意度。为了达到这一目的,网站需要强调几个关键要素。 首先,清晰的导航设计至关重要。导航应当直观…

Android Gradle

#1024程序员节|征文# Gradle 是一款强大的自动化构建工具,广泛应用于 Android 应用开发。它通过灵活的配置和丰富的插件系统,为项目构建提供了极大的便利。本文只是简单的介绍 Gradle 在 Android 开发中的使用,包括其核心概念、构…

微积分复习笔记 Calculus Volume 1 - 3.8 Implicit Differentiation

3.8 Implicit Differentiation - Calculus Volume 1 | OpenStax

Java——lambda表达式和StreamAPI

一、lambda 1. lambda表达式 1.1 Lambda表达式的使用举例: (o1,02)->Integer.compare(o1,o2); 1.2 Lambda表达式的格式举例: Lambda形参列表->lambda 1.3 Lambda表达式的格式 lambda操作符或箭头操作符 的左边:lambda形参列表,对应着要重写的接口中的…

django游戏门户系统

想做毕业设计但还没有头绪?🙋‍♂️django游戏门户系统了解一下!这个系统不仅功能全面,还能轻松解决你的项目选题难题! 我们这个基于Django开发的游戏门户系统提供了用户注册、登录、内容发布以及管理功能&#xff0c…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一,介绍 大数据日志处理框架ELK(Elasticsearch、Logstash、Kibana)是一套完整的日志集中处理方案,以下是对其的详细介绍: 一、Elasticsearch(ES) 基本…

【SQL实验】表的更新和简单查询

完整代码在文章末尾 在上次实验创建的educ数据库基础上,用SQL语句为student表、course表和sc表中添加以下记录 【SQL实验】数据库、表、模式的SQL语句操作_创建一个名为educ数据库,要求如下: (下面三个表中属性的数据类型需要自己设计合适-CSDN博客在这篇博文中已经…

LeetCode反转链表

题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例 3&#…

011:软件卸载工具TotalUninstall安装教程

摘要:本文详细介绍软件卸载工具TotalUninstall安装流程。 一、软件介绍 TotalUninstall是一款功能强大的卸载与清理工具,它能够彻底卸载不需要的应用程序,并清除相关的注册表项、文件残留和临时文件,确保系统干净无残留&#xff…

美畅物联丨视频上云网关如何配置上级联网云平台

在当今的智慧交通与安防监控体系中,视频上云网关发挥着至关重要的作用。以美畅视频上云网关为例,具备强大的兼容性,能够对接来自不同厂家、不同型号的视频设备,将这些设备输出的各异视频流进行汇聚整合。在获取摄像机视频流后&…

深入理解JavaScript:两大编程思想和ES6类以及对象概念解析

文章目录 两大编程思想ES6中的类和对象 两大编程思想 面向过程 (Procedural-Oriented Programming,POP) 定义:面向过程的编程是一种基于过程调用的编程范式,它将程序看作是一系列函数或过程的集合。每个函数负责完成…

推荐一个好用的VSCode插件

还在花馒头使用 Copilot?别再做大冤种啦! 现在有个更好用的AI编程助手--豆包 MarsCode!它不仅完全免费,而且功能强大,让你在编程时得心应手!再也不用担心高昂的订阅费用,省下来的馒头&#xff…

衡石分析平台系统分析人员手册-图表查询应用

查询应用​ 在业务分析过程中,查询明细数据有时需要满足如下场景: 在自助化的操作界面中用户可以自主选择查询字段及相应的筛选条件进行查询。用户通过简单的鼠标点击能够快速获得所需数据,并提供聚合计算等高级功能。 上述场景可以通过查…

数据结构与算法-21算法专项(中文分词)(END)

中文分词 搜索引擎是如何理解我们的搜索语句的? mysql中使用 【like “%中国%”】,这样的使用方案 缺点1:mysql索引会失效缺点2:不能模糊,比如我搜湖南省 就搜不到湖南相关的 1 trie树 Trie树,又称前缀树…

C++ 中的可调用对象

目录 一.可调用对象简介 1.什么是可调用对象? 2.可调用对象有什么用? 二.函数指针和仿函数 1.函数指针 a.函数指针的使用语法 b.函数指针的应用场景 2.仿函数 a.仿函数的基本概念 b.仿函数的优点 三.lambda表达式和function 1.lambda表达式 …

完全了解一个asp.net core MVC项目模板

当我们使用Visual Studio 2022去新建一个基于asp.net core Web项目的时候,一般有三种选择,一种是空项目,一种是基于MVC的项目、再有一种就是基于包含Razor Pages实例的web应用。如下图: 今天,我们打算选择基于MVC模…

《MYSQL 实战45讲》 慢查询产生的原因

一.查询长时间不返回的原因 首先要执行下show processlist来查看各个线程的状态(是否在等待锁) 1.DML写锁导致其他线程对改表的读取被阻塞 当一个线程正在持有t表的DML写锁时,其他线程查询语句就会被阻塞,一直等到DML写锁释放才…

RWA“两链一桥”平台在香港金融科技周亮相

第九届香港金融科技周今日开幕,记者在主题为Trust Bridge的论坛上获悉,蚂蚁数科旗下蚂蚁链在此次金融科技周首次公开了其为RWA业务打造的“两链一桥”平台,旨在帮助更多内地新能源资产赴港RWA,实现技术赋能实体资产。 “两链一桥“…