9.Redis-zset

zset

  • zset 有序集合 -> 升序
    • 常用命令
      • zadd
      • zcard
      • zcount
      • zrange
      • zrevrange -> reverse 逆序
      • zrangebyscore
      • zpopmax
      • zpopmin
      • bzpopmax / bzpopmin
      • zrank
      • zrevrank
      • zscore
      • zrem
      • zremrangebyrank
      • zremrangebyscore
      • zincrby
      • 集合间操作
        • zinter -> 交集
        • zunion -> 并集
        • zdiff -> 差集
        • zinterstore
        • zunionstore
        • zdiffstore
    • 内部编码
    • 应用场景
      • 排行榜系统(微博热搜、游戏天梯排行)

zset 有序集合 -> 升序

zset 中的 member 仍然要求是唯一的。
排序规则:按照输入的 score 来进行排序,如果score相同,再按照元素自身字符串的字典序来排序,score 不同仍然按照 score 来排序。

常用命令

zadd

添加或者更新指定的元素以及关联的 score 到 zset 中,score 应该符合 double 类型,+inf/-inf 作为正负 极限也是合法的。
ZADD 的相关选项

  • XX:仅仅⽤于更新已经存在的元素,不会添加新元素。
  • NX:仅⽤于添加新元素,不会更新已经存在的元素。
  • CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更 新的元素的个数。
  • INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和 分数。
  • GT -> greaterthan: 如果限制给定的新的分数,比之前更新的分数大,此时才能更新成功,否则更新不成功。不会影响到新元素的添加。
  • LT -> lessthan: 如果限制给定的新的分数,比之前更新的分数小,此时才能更新成功,否则更新不成功。不会影响到新元素的添加。

语法:
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]

在这里插入图片描述
incr 选项示例:
在这里插入图片描述

zcard

作用:获取 zset 中的元素个数。
语法:
ZCARD key

在这里插入图片描述

zcount

作用:返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。
语法:ZCOUNT key min max
返回值:满⾜条件的元素列表个数

在这里插入图片描述
用 ( 号来排除边界值
在这里插入图片描述

zrange

作用:返回指定区间⾥的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回。
语法:
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

zrevrange -> reverse 逆序

作用:返回指定区间⾥的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。
ps:这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。
语法:
ZREVRANGE key start stop [WITHSCORES]
在这里插入图片描述

zrangebyscore

作用:用于按照元素的分数范围来获取元素,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。
ps:这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。
语法:
ZRANGEBYSCORE key min max [WITHSCORES]
在这里插入图片描述

zpopmax

作用:删除并返回分数最大的 count 个元素。
语法:
ZPOPMAX key [count]
返回值:返回删除的score 和 member 。
在这里插入图片描述

zpopmin

作用:删除并返回分数最小的 count 个元素。
语法:
ZPOPMIN key [count]
返回值:返回删除的score 和 member 。
在这里插入图片描述

bzpopmax / bzpopmin

zpopmin / zpopmax 的阻塞版本
语法: BZPOPMIN/BZPOPMAX key [key ...] timeout
与list的blpop/brpop情况差不多。

zrank

作用:根据number返回指定元素的排名,升序,这里的排名指的就是下标。
语法:
ZRANK key member
在这里插入图片描述

zrevrank

作用:返回指定元素的排名,降序,这里的排名指的就是下标。
语法:
zrevrank key member
在这里插入图片描述

zscore

作用:查询指定元素的分数
语法:
ZSCORE key member
在这里插入图片描述

zrem

作用:删除指定的元素。
语法:
ZREM key member [member ...]

在这里插入图片描述

zremrangebyrank

作用:按照下标删除指定范围的元素,左闭右闭。
语法:
ZREMRANGEBYRANK key start stop
在这里插入图片描述

zremrangebyscore

作用:按照分数删除指定范围的元素,左闭右闭。
语法:

ZREMRANGEBYSCORE key start stop

在这里插入图片描述

zincrby

作用:为指定的元素的关联分数添加指定的分数值
语法:

zincrby key increment member

在这里插入图片描述

集合间操作

在比较 “相同”的时候,只要 member 相同即可。

zinter -> 交集

语法:
ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]

  • numkeys 代表 numkeys 个 key 来参与并集运算。
  • WEIGHTS 代表权重,可以写成小数和整数。
  • aggregate 总计,代表当合并时member相同时,新的score是到底是以求和或者取最小值或者求大值的方式来算。默认以 求和 的来得到 score。

这里的zhangsan的score(65),是按照 key中zhangsan的score先乘以自己的权重值 2, 加上 key2 对应的权重值3乘以key2 zhangsan的score,即 2 * 10+ 3 * 15 = 65
在这里插入图片描述

zunion -> 并集

语法:

zunion numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]

在这里插入图片描述

zdiff -> 差集

语法:
zdiff numkeys key [key ...] [WITHSCORES]
在这里插入图片描述

zinterstore

语法:
zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

zunionstore

语法:
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

zdiffstore

语法:
zdiffstore destination numkeys key [key ...]

内部编码

有序集合类型的内部编码有两种:

  • ziplist(压缩列表):当有序集合的元素个数⼩于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会⽤ ziplist 来作 为有序集合的内部实现,ziplist 可以有效减少内存的使⽤。
  • skiplist(跳表):当 ziplist 条件不满⾜时,有序集合会使⽤ skiplist 作为内部实现,因为此时ziplist 的操作效率会下降

在后面的版本中,在元素较少且元素的值较小时,ziplist编码被listpack编码替代。

在元素较少且元素的值较小时是listpack编码
在这里插入图片描述
当元素过大时,转换为skiplist

在这里插入图片描述

应用场景

排行榜系统(微博热搜、游戏天梯排行)

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

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

相关文章

访问 GitHub 方法

访问 GitHub 方法 方法一&#xff1a;最常见的就是 fq&#xff0c;但这个是违法的行为&#xff0c;自己私下搞可以&#xff0c;不能教你们。 方法二&#xff1a;利用加速器&#xff0c;这是正规合法操作。这里推荐一个免费的加速器&#xff0c;下载安装 Watt Toolkit加速器,原名…

count(1)与count(*)的区别、ROUND函数

部分问题 1. count(1)与count(*)的区别2. ROUND函数3. SQL19 分组过滤练习题4. Mysql bigdecimal 与 float的区别5. 隐式内连接与显示内连接 &#xff08;INNER可省略&#xff09; 1. count(1)与count(*)的区别 COUNT(*)和COUNT(1)有什么区别&#xff1f; count(*)包括了所有…

3DS Max中绘制圆锥箭头

3DS Max中绘制圆锥箭头 绘制结果绘制过程步骤一&#xff1a;绘制立体圆锥方法1方法2 步骤二&#xff1a;圆锥体调参&#xff08;模型尺寸设置&#xff09;1圆锥体参数说明2圆锥体参数调整 步骤三&#xff1a;绘制圆柱体步骤四&#xff1a;圆柱体调参步骤五&#xff1a;圆锥与圆…

JavaExcel:自动生成数据表并插入数据

故事背景 出于好奇&#xff0c;当下扫描excel读取数据进数据库 or 导出数据库数据组成excel的功能层出不穷&#xff0c;代码也是前篇一律&#xff0c;poi或者easy excel两种SDK的二次利用带来了各种封装方法。 那么为何不能直接扫描excel后根据列的属性名与行数据的属性建立S…

yolov5的pytorch配置

1. conda create -n rdd38 python3.82、pip install torch1.8.0 torchvision0.9.0 torchaudio0.8.0 -f https://download.pytorch.org/whl/cu113/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple 3、conda install cudatoolkit10.2

使用Docker配置深度学习的运行环境

文章目录 推荐实验环境前言docker安装docker操作docker配置常见方法&#xff08;安装包、联网、程序管理器&#xff09;安装驱动的前提要求传统方法安装驱动程序程序管理器安装联网安装deb包安装 安装完成后的设置非传统方法安装-通过容器安装驱动的前提要求安装NVIDIA-Contain…

基于Django的博客管理系统

1、克隆仓库https://gitee.com/lylinux/DjangoBlog.git 若失效&#xff1a;https://gitee.com/usutdzxy/DjangoBlog.git 2、环境安装 pip install -Ur requirements.txt3、修改djangoblog/setting.py 修改数据库配置&#xff0c;其他的步骤就按照官方文档。 DATABASES {def…

在 Amazon 搭建无代码可视化的数据分析和建模平台

现代企业常常会有利用数据分析和机器学习帮助解决业务痛点的需求。如制造业中&#xff0c;利用设备采集上来的数据做预测性维护&#xff0c;质量控制&#xff1b;在零售业中&#xff0c;利用客户端端采集的数据做渠道转化率分析&#xff0c;个性化推荐等。 亚马逊云科技开发者…

低代码赋能| 绿色智慧矿山解决方案

在世界能源日趋紧张的背景下&#xff0c;能源产业的数字化升级是大势所趋。矿山行业作为国家能源安全的“压舱石”&#xff0c;也必须进行产业升级。一直以来&#xff0c;国家都在大力推动智慧矿山建设。通过大数据、GIS、物联网、云计算、人工智能等新兴技术&#xff0c;实现矿…

R语言图形的组合( par(),layout(),par(fig()) )

引入d.class进行画图 > d.class<-read.csv("D://class.csv",header T) > attach(d.class) > opar<-par(no.readonly TRUE)非常简单的数据&#xff0c;需要可自取 链接&#xff1a;https://pan.baidu.com/s/1zNx5z9JsaaRqFueRgGY3mQ 提取码&#x…

微信小程序新版隐私协议弹窗实现最新版

1. 微信小程序又双叒叕更新了 2023.08.22更新&#xff1a; 以下指南中涉及的 getPrivacySetting、onNeedPrivacyAuthorization、requirePrivacyAuthorize 等接口目前可以正常接入调试。调试说明&#xff1a; 在 2023年9月15号之前&#xff0c;在 app.json 中配置 __usePriva…

Vite打包性能优化及填坑

最近在使用 Vite4.0 构建一个中型前端项目的过程中&#xff0c;遇到了一些坑&#xff0c;也做了一些项目在构建生产环境时的优化&#xff0c;在这里做一个记录&#xff0c;以便后期查阅。(完整配置在后面) 上面是dist文件夹的截图&#xff0c;里面的内容已经有30mb了&#xff…

Revit SDK:SpatialFieldGradient 在面上显示渐变颜色(AVF)分析显示样式

前言 这个例子使用Revit显示样式功能将面显示成不同的颜色。分析显示样式参考官方文档。 内容 效果&#xff1a; 核心逻辑&#xff1a; 得到一个 SpatialFieldManager拾取一系列的面&#xff1a;uiDoc.Selection.PickObjects(ObjectType.Face)计算面上的 UV 值&#xff0c;…

COSCon'23 开源市集:共赴一场草坪上的开源派对

一年一度的开源盛会&#xff0c;第八届中国开源年会&#xff08;COSCon23 &#xff09;&#xff0c;将于10月28~29日&#xff0c;在四川成都市高新区菁蓉汇召开&#xff01;本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01; 我们预期会有超过1…

更健康舒适更科技的照明体验!SUKER书客护眼台灯 L1上手体验

低价又好用的护眼台灯是多数人的需求&#xff0c;很多人只追求功能性护眼台灯&#xff0c;显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到&#xff0c;然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯&#xff0c;拥有高品质光源&#xff…

第63步 深度学习图像识别:多分类建模误判病例分析(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 上两期我们基于TensorFlow和Pytorch环境做了图像识别的多分类任务建模。这一期我们做误判病例分析&#xff0c;分两节介绍&#xff0c;分别基于TensorFlow和Pytorch环境的建模和分析。 本期以健康组、肺结核组、COVID-19组、细菌性&am…

mp代码生成插件

mp代码生成插件 1.下载下面的插件 2.连接测试 3.生成代码的配置 4.生成代码 红色的是刚刚生成的。 我觉得不如官方的那个好用&#xff0c;唯一的好处就是勾选的选项能够看的懂得。

视频云存储/安防监控/AI视频智能分析网关V3:工服检测功能详解

在一些工地、后厨、化工、电力等特定的场景中&#xff0c;工服的穿戴是必不可少的。这不仅是安全制度的要求&#xff0c;更能降低工作风险、提高工作效率。TSINGSEE青犀AI 边缘计算网关硬件 —— 智能分析网关可以通过实时监测和识别工人的工装穿戴情况&#xff0c;确保他们符合…

什么是接口测试,如何做接口测试?

比起点点点的功能测试&#xff0c;“接口测试”显得专业又高大上&#xff0c;也因此让有些初级测试人员“望而生畏”。别担心&#xff0c;其实接口测试也是功能测试的一种&#xff0c;它是针对接口进行的功能测试。 写在前面&#xff1a;本文参考了茹炳晟老师的《测试工程师 全…

软件架构设计(三) B/S架构风格-层次架构(一)

层次架构风格从之前的两层C/S到三层C/S,然后演化为三层B/S架构,三层B/S架构之后仍然在往后面演化,我们来看一下层次架构演化过程中都有了哪些演化的架构风格呢? 而我们先简单了解一下之前的层次架构风格中分层的各个层次的作用。 表现层:由于用户进行交互,比如MVC,MVP,…