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.rhkb.cn/news/458991.html

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

相关文章

【Windows】电脑端口明明没有进程占用但显示端口被占用(动态端口)

TOC 一、问题 重启电脑后,启用某个服务显示1089端口被占用。 查看是哪个进程占用了: netstat -aon | findstr "1089"没有输出,但是换其他端口,是可以看到相关进程的: 现在最简单的方式是给我的服务指定另…

RHCE的学习(8)

动态网站 lnmp(LAMP) 解析index.php界面 (1)预配,确保服务能够被访问 systemctl stop firewalld setenforce 0 (2)安装nginx服务 mount /dev/sr0 /mnt cat /etc/yum.repos.d/base.repo dnf …

【待学习 】 DHTMLX Gantt

DHTMLX Gantt是一个开源 JavaScript 甘特图库,可以帮助您以美观的图表形式说明和管理项目计划。 它可以将任务之间的依赖关系显示为线条,并允许您设置任务之间的不同关系(完成-开始、开始-开始、完成-完成、开始-完成)。标准版还…

一二三应用开发平台自定义查询设计与实现系列2——查询方案功能实现

查询方案功能实现 上面实现了自定义查询功能框架,从用户角度出发,有些条件组合可以形成特定的查询方案,对应着业务查询场景。诸多查询条件的组合,不能每次都让用户来设置,而是应该保存下来,下次可以直接使…

一文解决单调栈的应用

单调栈的定义: 单调栈是栈的一中特殊形式,在栈中的元素必须满足单调性(一定是单调上升或单调下降等等的规律)。 单调栈的性质: 单调栈解决的问题 单调栈解决的常见问题:给定一个序列,求每个位置…

css绘制s型(grid)

在之前有通过flex布局实现了s型布局&#xff0c;是通过截取数组形式循环加载数据 这次使用grid直接加载数据通过css实现 <div id"app"><template v-for"(item,inx) in items"><div class"row"><template v-for"(ite…

SpringBoot 集成RabbitMQ 实现钉钉日报定时发送功能

文章目录 一、RabbitMq 下载安装二、开发步骤&#xff1a;1.MAVEN 配置2. RabbitMqConfig 配置3. RabbitMqUtil 工具类4. DailyDelaySendConsumer 消费者监听5. 测试延迟发送 一、RabbitMq 下载安装 官网&#xff1a;https://www.rabbitmq.com/docs 二、开发步骤&#xff1a;…

微信小程序美团点餐

引言&#xff1a;外卖已经成为了都市人的必备&#xff0c;在无数个来不及&#xff08;懒得&#xff09;做饭的时刻拯救孤单寂寞的胃。美团外卖无疑是外卖届的领头羊&#xff0c;它的很多功能与设计都值得我们学习。本文将从五个方面&#xff0c;对美团外卖展开产品分析&#xf…

vue封装信号强度

图标下载链接: https://pan.baidu.com/s/1828AidkCKU1KTkw1SvBwQg?pwd4k7n 共五格信号 信号5为绿色&#xff0c;信号4为绿色&#xff0c;信号3为黄色&#xff0c;信号2为黄色&#xff0c;信号1为红色&#xff0c;信号0为灰色。 子组件 /components/SignalStrength/index.vu…

【Python爬虫实战】深入解析 Selenium:从元素定位到节点交互的完整自动化指南

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 前言 Selenium 是进行网页自动化操作的强大工具&#xff0c;在测试、数据抓取、用户行…

Sqoop的安装配置及使用

Sqoop安装前需要检查之前是否安装了Tez,否则会产生版本或依赖冲突&#xff0c;我们需要移除tez-site.xml&#xff0c;并将hadoop中的mapred-site.xml配置文件中的mapreduce驱动改回成yarn&#xff0c;然后分发到其他节点&#xff0c;hive里面配置的tez也要移除&#xff0c;然后…

实战应用WPS WebOffice开放平台服务

概述 根据公司的业务需要&#xff0c;主要功能是在线编辑文档&#xff0c;前端的小伙伴进行的技术调研&#xff0c;接入的是WPS WebOffice&#xff0c;这里只阐述技术介入的步骤、流程和遇到的坑进行的一些总结。 实践 WPS WebOffice 开放平台进行认证 在开始之前&#xff…

大数据-193 Apache Tez - DAG 作业计算框架 核心解释 工作原理 配置集成

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Anki插件Export deck to html的改造

在Anki中进行复习时&#xff0c;每次只能打开一条笔记。如果积累了很多笔记&#xff0c;有时候会有将它们集中输出成一个pdf进行阅读的想法。Anki插件Export deck to html&#xff08;安装ID&#xff1a;1897277426&#xff09;就有这个功能。但是&#xff0c;这个插件目前存在…

岛津分子泵软件TMP系列分子泵EI-D系列控制电源 EI Monitor(232和485控制)

岛津分子泵软件TMP系列分子泵EI-D系列控制电源 EI Monitor(232和485控制)

探索Unity:从游戏引擎到元宇宙体验,聚焦内容创作

unity是实时3D互动内容创作和运营平台&#xff0c;包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助Unity将创意变成现实。提供一整套完善的软件解决方案&#xff0c;可用于创作、运营和变现任何实时互动的2D和3D内容&#xff0c;支持平台包括手机、…

图为大模型一体机新探索,赋能智能家居行业

在21世纪的今天&#xff0c;科技的飞速进步正以前所未有的速度重塑着我们的生活方式。从智能手机到物联网&#xff0c;从大数据到人工智能&#xff0c;每一项技术创新都在为人类带来前所未有的便利与效率。其中&#xff0c;图为AI大模型一体机作为人工智能领域的最新成果&#…

DiskGenius一键修复磁盘损坏

下午外接磁盘和U盘都出现扇区损坏&#xff0c;估计就是在开着电脑&#xff0c;可能是电脑运行的软件还在对磁盘进行读写&#xff0c;不小心按到笔记本关机键&#xff0c;重新开机读写磁盘分区变得异常卡顿&#xff0c;估摸就是这个原因导致扇区损坏。在进行读写时&#xff0c;整…

深度学习:YOLO v1网络架构、损失值及NMS极大值抑制

引言 随着深度学习的发展&#xff0c;物体检测&#xff08;Object Detection&#xff09;成为计算机视觉领域的一项重要任务。传统的物体检测方法往往依赖于手工设计的特征和滑窗搜索策略&#xff0c;效率低下且效果有限。近年来&#xff0c;基于深度学习的方法&#xff0c;尤…

leetcode-63-不同陆路径II

题解&#xff1a; 1、设dp[i][j]为到达(i,j)点的路径。当grid[i][j]1时,dp[i][j]0;否则dp[i][j]为到达(i-1,j)的最多路径与到达(i,j-1)的最多路径之和。当(i,j)位于第一行时&#xff0c;dp[i][j]dp[i][j-1]。当(i,j)位于第一列时&#xff0c;dp[i][j]dp[i-1][j]。 2、初始化M…