Redis教程——数据类型(有序集合、位图)

news2024/11/23 11:29:55

上篇文章我们学习了Redis教程——数据类型(哈希、集合),这篇文章学习Redis教程——数据类型(有序集合、位图)

有序集合ZSet

有序集合和集合都是string类型的无序集合,其数据是唯一,都是通过哈希表实现。添加、删除、查找的复杂度都是O(1)。

不同的是有序集合每个元素都会关联一个double类型的分数,通过分数对集合中的成员进行从小到大的排序。

有序集合主要应用于排行榜。

基本命令

通过zadd命令定义有序集合数据类型,其语法格式如下:

zadd 键名 分数 元素 [分数 元素]

示例代码如下:

zadd zset1 40 v1 30 v2 50 v3 60 v4

注意:

  • 有序集合的元素是唯一的,但分数可以重复;

  • 成员重复时,会取后面的元素;

遍历

通过zrange、zrevrange、zrangebyscore命令遍历集合中元素,其语法格式如下:

zrange 键 开始下标 结束下标 [withscores]   # 按分数从小到大遍历
zrevrange 键 开始下标 结束下标 [withscores]       # 按分数从大到小遍历

示例代码如下:

zrange zset1 0 -1    # 按分数从小到大遍历集合所有的元素
zrange zset1 0 -1 withscores  # 按分数从小到大遍历所有元素,带分数
zrevrange zset1 0 -1 withscores      # 按分数从小到大遍历所有元素,带分数

如下图所示:

除了上面的遍历方式,我们还可以通过zrangebyscore命令按分数进行筛选遍历,其语法格式如下:

zrangebyscore 键 最小分数 最大分数 [withscores] [limit 开始下标 结束下标]

示例代码如下:

zrangebyscore zset1 30 60 withscores  # 筛选分数30到60的元素并从小到大遍历,带分数
zrangebyscore zset1 (30 60 withscores  # 筛选分数30到60的元素,不包含30,从小到大遍历
zrangebyscore zset1 30 (60 withscores  # 筛选分数30到60的元素,不包含60,从小到大遍历
zrangebyscore zset1 30 (60 withscores limit 0 2  # 筛选分数30到60的元素,不包含60,从小到大遍历

运行结果如下:

获取

通过zscore、zcard、zcount、zrank、zrevrank命令获取元素/集合的一些信息,其语法格式如下:

![有序集合-获取信息](/有序集合-获取信息.png)zscore 键 元素   # 获取元素的分数
zcard 键    # 获取集合中元素的数量
zcount 键 最小分数 最大分数  # 获取指定分数范围内的元素个数
zrank 键 元素   # 获取元素下标
zrevrank 键 元素   # 逆序获取元素下标

示例代码如下:

zscore zset1 v2
zcard zset1
zcount zset1 30 50
zrank zset1 v3
zrevrank zset1 v3

运行结果如下:

删除

通过zrem、zmpop命令删除/弹出元素,其语法格式如下:

zrem 键 元素
zmpop 集合的个数 键 min/max count 弹出数量   # redis7新增的命令

示例代码如下:

zrem zset1 v3
zmpop 1 zset1 min count 1
zrange zset1 0 -1

运行结果如下:

分数增减

通过zincrby命令增加元素的分数,其语法格式如下:

zincrby 键 增值数值 元素

示例代码如下:

zincrby zset1 3 v4

运行结果为:63

位图bitmap/bitarray

bitmap由0和1状态表现的二进制位的bit数组,实现一种统计二值状态的数据类型,每个bit只能放1或0,用来判断Y/N状态。

bitmap支持的最大位数是2的32次方位,它可以极大的节约存储空间。

主要应用于签到打卡、是否被点击的情景。

基本命令

使用setbit定义一个bitmap类型数据,其语法格式如下:

setbit 键 偏移位 0/1

示例代码如下:

setbit bit1 1 1
setbit bit1 2 0

注意:偏移位是从0开始计算的。

获取

通过getbit、strlen、bitcount命令键的一些信息,其语法格式如下:

getbit 键 偏移位   # 获取键的偏移位的值
strlen 键     # 统计字节数占用多少
bitcount 键     # 统计键中含有多少个1

示例代码如下:

getbit bit1 1     # 获取bit1的1的值
getbit bit1 2   # 获取bit1的2的值
strlen bit1   # 统计字节数占用
setbit bit1 9 0  # 定义一个bitmap类型数据
strlen bit1   # 统计字节数占用
bitcount bit1  # 统计键中含有多少个1

运行结果如下:

注意:strlen不是统计偏移位的长度,而是占据几个字节,一个字节占八个偏移位。

运算

通过bitop命令对不同的二进制存储数据进行位运算,其语法格式如下:

bitop AND/OR/NOT/XOR 返回的键 键

示例代码如下:

setbit a 0 1
setbit a 1 1
setbit a 2 1
setbit b 0 1
setbit b 1 0
bitop and c a b  # 在a和b中,返回有连续1的键个数
bitcount c

运行结果如下:

由于键a才有连续的1,所以bitcount返回的是1。

好了,Redis教程——数据类型(有序集合、位图)就讲到这里了,下篇文章我们学习Redis教程——数据类型(基数统计、地理空间、位域)

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器等相关文章!

- END -

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

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

相关文章

华为路由器基于接口限速

一、背景 ISP与企业内网通过华为路由器接入Internet时,当大量流量进入路由器时,可能会因为带宽不足产生拥塞,导致丢包,严重影响用户上网体验。对于此需要对网络流量进行限制,其方式通常有防火墙带宽策略、路由器基于接口限速等。 二、华为路由器基于接口限速方式 在路由…

代码随想录算法训练营第四十四天| LeetCode70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

一、LeetCode 70. 爬楼梯 (进阶) 题目链接/文章讲解/视频讲解:https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85%E7%89%88%E6%9C%AC.html 状态:已解决 1.思路 这道题跟70.爬楼…

如何在深度学习中调用CAME

1、介绍 CAME:一种以置信度为导向的策略,以减少现有内存高效优化器的不稳定性。基于此策略,我们提出CAME同时实现两个目标:传统自适应方法的快速收敛和内存高效方法的低内存使用。大量的实验证明了CAME在各种NLP任务(如BERT和GPT-2训练)中的…

【python】直接在python3下安装 jupyter notebook,以及处理安装报错,启动不了问题

目录 问题: 1 先做准备,查看环境 1.1 先看python3 和pip ,以及查看是否有 juypter 1.2 开始安装 1.3 安装完成后得到警告和报错 2 处理安装的报错问题 2.1 网上有说是因为 pip 自身需要更新,更新之 2.1.1 更新pip 2.1.…

vue快速入门(三十二)局部与全局注册组件的步骤

注释很详细&#xff0c;直接上代码 上一篇 新增内容 局部注册组件全局注册组件 文件结构 源码 MyHeader.vue <!-- 用于测试全局注册组件 --> <template><div><h1>又可以愉快的学习啦</h1></div> </template><script>export d…

开启Three.js之旅(会持续完善)

文章目录 Three.js必备构建项目场景Scene相机CameraPerspectiveCamera 渲染器WebGLRendererCSS3DRenderer 灯光LightAmbientLightDirectionalLight 平行光PointLight 加载器CacheFileLoaderLoaderGLTFLoaderRGBELoaderTextureLoader 材质MetarialMeshBasicMaterialMeshLambertM…

武汉星起航:上海股权中心成功挂牌,创始人张振邦领航跨境新纪元

在金秋十月的尾声&#xff0c;上海股权托管交易中心迎来了一场备受瞩目的盛事。2023年10月30日&#xff0c;武汉星起航电子商务有限公司成功挂牌展示&#xff0c;正式登录资本市场&#xff0c;开启了一段崭新的发展篇章。这一里程碑式的跨越&#xff0c;不仅标志着武汉星起航在…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

【机器学习】数据变换---小波变换特征提取及应用案列介绍

引言 在机器学习领域&#xff0c;数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换&#xff0c;我们可以提取出更有意义的特征&#xff0c;提高模型的性能。在众多数据变换方法中&#xff0c;小波变换是一种非常有效的方法&#xff0c;尤其适用于处理非平稳信号和…

会话seesion的使用,结合ddddocr识别简单验证码的登录实现。

古诗文网登录代码&#xff1a; # 古诗文网登录实战 # 验证码链接:https://so.gushiwen.cn/RandCode.ashx # 变动参数链接:__VIEWSTATE所在的地址:https://so.gushiwen.cn/user/login.aspx?fromhttp://so.gushiwen.cn/user/collect.aspx # 登录接口链接:https://so.gushiwen.c…

npx\pnpm 镜像过期解决方法

. // 1. 清空缓存 npm cache clean --force // 2. 关闭SSL验证 npm config set strict-ssl false // 3. 安装 到这里就可以正常使用npm命令安装需要的工具了。如( npm install -g cnpm )

代码学习记录48---单调栈

随想录日记part48 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.19 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;503.下一个更大元素II ;42. 接雨水 503.下一个更大元素II 42. 接雨水 Topic1下一个更…

第二部分 Python提高—GUI图形用户界面编程(六)

其他组件学习 文章目录 OptionMenu 选择项Scale 移动滑块颜色选择框文件对话框简单输入对话框通用消息框ttk 子模块控件 OptionMenu 选择项 OptionMenu(选择项)用来做多选一&#xff0c;选中的项在顶部显示。显示效果如下&#xff1a; from tkinter import * root Tk();ro…

电弧的产生机理

目录&#xff1a; 1、起弧机理 2、电弧特点 3、电弧放电特点 4、实际意义 1&#xff09;电力开关装置 2&#xff09;保险丝 1、起弧机理 电弧的本质是一种气体放电现象&#xff0c;可以理解为绝缘情况下产生的高强度瞬时电流。起弧效果如下图所示&#xff1a; 在电场的…

5 CatBoost模型

目录 1 背景 2 原理 2.1 类别特征处理 2.1.1 传统目标编码&#xff1a; TS 2.1.2 Greedy TS 2.1.3 ordered TS编码 2.1.4 CatBoost处理Categorical features总结 2.2.预测偏移处理 2.2.1 梯度无偏估计 2.3 树的构建​​​​​​​ 3 优缺点 优点 4 代码 1 背景 终于…

关系图卷积神经网络

异质图和知识图谱 同质图与异质图 同质图指的是图中的节点类型和关系类型都仅有一种 异质图是指图中的节点类型或关系类型多于一种 知识图谱 知识图谱包含实体和实体之间的关系&#xff0c;并以三元组的形式存储&#xff08;<头实体, 关系, 尾实体>&#xff0c;即异…

Three.js——聚光灯、环境光、点光源、平行光、半球光

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

阿里云服务器怎么更换暴露的IP

很多客户阿里云服务器被攻击IP暴露&#xff0c;又不想迁移数据换服务器&#xff0c;其实阿里云服务器可以更换IP&#xff0c;今天就来和大家说说流程&#xff0c;云服务器创建成功后6小时内可以免费更换公网IP地址三次&#xff0c;超过6小时候就只能通过换绑弹性公网IP的方式来…

探索人工智能绘图的奇妙世界

探索人工智能绘图的奇妙世界 人工智能绘图的基本原理机器之美&#xff1a;AI绘图作品AI绘图对艺术创作的影响未来展望与挑战图书推荐&#x1f449;AI绘画教程&#xff1a;Midjourney使用方法与技巧从入门到精通内容简介获取方式&#x1f449;搜索之道&#xff1a;信息素养与终身…

访问云平台中linux系统图形化界面,登录就出现黑屏的问题解决(ubuntu图形界面)

目录 一、问题-图形化界面访问黑屏 二、系统环境 &#xff08;一&#xff09;网络结构示意图 &#xff08;二&#xff09;内部机器版本 三、分析 四、解决过程 &#xff08;一&#xff09;通过MobaXterm远程访问图形化界面(未成功) 1、连接方法 2、连接结果 &#xf…