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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中

本示例介绍如何在vue+openlayers项目中设置带有箭头的线段,箭头位于线段的中间位置。这里用到 forEachSegment 函数, 这个函数接受一个特征和一个回调函数作为参数。它遍历特征中的每个子线段,并调用回调函数传入子线段的中点坐标。 效果图 专栏名称内容介绍Openlayers基础…

代码布局风格指南

代码布局风格指南 本内容面向于新手,内容也比较笼统,看文章阅读量,如果阅读和点赞量较高,就会开一个专栏来进行详细的说明。 在编写C语言代码时,良好的代码风格不仅能够提高代码的可读性,还能方便团队协作…

Springboot整合spring-boot-starter-data-elasticsearch

前言 <font style"color:rgb(36, 41, 47);">spring-boot-starter-data-elasticsearch</font> 是 Spring Boot 提供的一个起始依赖&#xff0c;旨在简化与 Elasticsearch 交互的开发过程。它集成了 Spring Data Elasticsearch&#xff0c;提供了一套完整…

51c自动驾驶~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11491137 #BEVWorld BEV潜在空间构建多模态世界模型&#xff0c;全面理解自动驾驶~一、引言 世界模型建模了有关环境的知识&#xff0c;其可以通过给定的条件对未来进行合理的想象。未来想象要求世界模型具有物理规律的理解…

秦时明月2搭建笔记

1.具体配置 数据库不修改&#xff0c;如果修改了&#xff0c;gm那边也要 2.数据库 3.上传配置文件出现问题 参考&#xff1a;对于测试时&#xff0c;错误信息 Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large-CSDN博客 4.启动tomcat&#x…

“冷”在日语里有这些表达-柯桥商务日语培训成人零基础学习

“冷”在日语里有这些表达: 寒い 这是最常用的表达,与中文的“冷”意思相同。 例句: 部屋が寒いから、エアコンをつけます。(房间冷,我去开空调。) 冷たい 形容物体表面温度较低,有“冷的”的意思。 例句: この水は冷たいですね。(这水挺冷的。) にぶい 指饮料不够冰镇…

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片&#xff0c;芯片通提供了很多 slot &#xff0c;用于存放各类安全证书、密钥、用户数据等&#xff0c;内置…

Python: Print Table on console

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # OS : windows 10 # Datetime : 2024/10/28 22:08 # User : geo…

Midjourney中文版:激发无限创意的艺术之旅

在数字化时代&#xff0c;艺术创作已不再受限于传统工具与技巧的束缚。Midjourney中文版&#xff0c;作为一款专为国内用户打造的智能艺术平台&#xff0c;正以超凡的智能算法和丰富的功能&#xff0c;引领每一位创作者踏上一场前所未有的艺术之旅。 Midjourney AI超强绘画 (原…

Spring+SpringMVC+SpringJDBC搭建web项目实现商品查询

准备工作&#xff1a;创建商品数据库&#xff0c;以及商品表 #创建数据库 DROP DATABASE IF EXISTS goodsDB; CREATE DATABASE goodsDB; USE goodsDB; #创建商品表 goods #id number 商品编号&#xff0c;主键 #name Varchar2(50) 商品名称&#xff0c;非空 #Price Numbe…

OpenHarmony鸿蒙应用开发 | 如何使用vsCode配置cangjie(仓颉)插件编程

前沿 余承东余总&#xff08;余大嘴&#xff09;在2024年10月21日鸿蒙【原生鸿蒙之夜暨华为全场景新品发布会】现场说&#xff0c;cangjie会成为鸿蒙下一代的编程语言&#xff0c;为开发者提供更强大的编程能力&#xff0c;让开发者在鸿蒙设备上实现更多创意。目前cangjie正处…

海亮科技亮相第84届中国教装展 尽显生于校园 长于校园教育基因

10月25日&#xff0c;第84届中国教育装备展示会&#xff08;以下简称“教装展”&#xff09;在昆明滇池国际会展中心开幕。作为国内教育装备领域规模最大、影响最广的专业展会&#xff0c;本届教装展以“数字赋能教育&#xff0c;创新引领未来”为主题&#xff0c;为教育领域新…

相识redis

一、Redis简介 什么是redis&#xff1f; Redis&#xff08;全称为Remote Dictionary Server&#xff09;是一个开源的非关系性数据库用于存储键值对&#xff0c;主要用于数据存储、缓存和消息队列方面&#xff0c;相传redis的初心是做消息队列起家但有心栽花花不开&#xff0…

WPF+MVVM案例实战(一)- 设备状态LED灯变化实现

文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 &#xff0c;新建项目 Wpf_Examples&#xff0c;创建各层级文件夹&#xff0c;安装 CommunityToolkit.Mvvm 和 Microsof…

react18中react-thunk实现公共数据仓库的异步操作

redux及react-redux都只能实现数据的同步修改更新&#xff0c;有点类似于vue中的mutation&#xff0c;只能做同步操作&#xff0c;异步的话不用actions来实现。由于在项目始终不可避免要实现的异步数据的更新&#xff0c;这明显不够用了。是时候引入我们的异步中间件redux-thun…

长思维PRM

思维链 除了常见的连接词如 “and” 和 “so” 之外。还出现了"wait", Alternatively" 等特殊的关键词&#xff0c;"像 “wait” (表示反思)和 “Alternatively”(表示探索不同路径) 这样的关键词是模型能够进行反思和自我纠正的重要指标 迭代式问题解决&…

【PLC编程】GX Works报未能正常执行RUN中写入解决办法

在PLC编程中按F4转换时报未正常执行RUN中写入&#xff0c;可能是程序不一致。 选择工具->选项 选择RUN中写入。去除转换&#xff08;编译&#xff09;中执行RUN中写入 点击确定后&#xff0c;就不会再报此问题。F4转换也能正常转换了。

Java Lock CountDownLatch 总结

前言 相关系列 《Java & Lock & 目录》&#xff08;持续更新&#xff09;《Java & Lock & CountDownLatch & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & Lock & CountDownLatch & 总结》&#xff08;学习总…

IE快捷方式加载特定主页

一、某插件安装后&#xff0c;桌面会增加一个首页为特定网站的IE快捷方式&#xff08;不对原有的IE做任何改动&#xff09;&#xff0c;同时&#xff0c;会把快速启动栏中的IE快捷方式改为特定网站。 解决方案如下&#xff1a; 方法一&#xff1a;直接把桌面新增加的IE快捷方式…

Selenium4自动化测试常用函数总结,各种场景操作实战

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 seleninum作为自动化测试的工具&#xff0c;自然是提供了很多自动化操作的函数&#xff0c;下面列举下比较常用的函数&#xff0c;更多可见官方文档&#xff1a;…