首页 > 数据库 >redis自学(11)ZSet

redis自学(11)ZSet

时间:2024-03-05 14:23:13浏览次数:28  
标签:11 ZSet zset redis member score 键值 内存 排序

ZSet也就是SortedSet,其中每一个元素都需要制定一个score值和member值:

  •  可以根据score值排序
  •  member必须唯一
  •  可以根据member查询分数

 

因此,zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学习的那种编码结构可以满足?

  •  SkipList:可以排序,并且可以同时存储score和ele值(member),但是它无法满足根据member查询分数和键必须唯一的条件。
  •  HT(Dict):可以键值存储,并且可以根据key找value,但是不能可排序

 

 

内存结构:

 

 

当元素数量不多时,HT和SkipList的优势不明显,而且更耗没存。因此zset还会采用ZipList结构来节省内存,不过需要同时满足两个条件:

① 元素数量小于zset_max_ziplist_entries,默认值128

② 每个元素都小于zset_max_ziplist_value字节,默认值64

 

 

 

 

 

 

编码转换:

 

 

ZipList如何能做到键值对和排序的需求的呢?

ziplist本身没有排序功能,而且没有键值对的概念,因此需要zset通过编码实现:

  •  ZipList是连续内存,因此score和element是紧挨在一起的两个entry,element在前,score在后
  •  score越小越接近队首,score越大越接近队尾,按照score值升序安排

内存图:

 

标签:11,ZSet,zset,redis,member,score,键值,内存,排序
From: https://www.cnblogs.com/bulesea/p/18053960

相关文章

  • 洛谷题单指南-搜索-P1135 奇怪的电梯
    原题链接:https://www.luogu.com.cn/problem/P1135题意解读:计算A到B至少要按几次电梯,本质上就是求A到B的最短路径,可以通过BFS解决。解题思路:位于每一层,有两种选择:向上、向下BFS搜索直接从A找到B,每扩展一层,层数+1,层数即按电梯次数100分代码:#include<bits/stdc++.h>usingnam......
  • windows11下安装使用python多环境管理工具--poetry
    官网https://python-poetry.org/基础环境系统版本python版本poetry版本win1123H2多版本+3.6.8(默认)+3.8.6+3.10.41.8.2安装https://python-poetry.org/docs/我们选择脚本的方式安装使用powershell安装安装命令(Invoke-WebRequest-Urihttps://ins......
  • NTPD monlist Command Enabled|CVE-2013-5211
    NTPDmonlistCommandEnabled|CVE-2013-5211目录NTPDmonlistCommandEnabled|CVE-2013-52111描述2影响范围3漏洞检测3.1Nmap检测4缓解措施5防御措施1描述NTP是用来使计算机时间同步化的一种协议。CVE-2013-5211最早公布是2014年1月10日攻击者HACK发送了一个......
  • 自已写的shell小程序: 查询删除lua+redis和conf配置的nginx黑名单
    #!/bin/bash#定义一些变量REDIS_HOST=192.168.10.38REDIS_PORT=6370REDIS_AUTH=123456NGINX_BLOCKIPCONF_PATH=/data/software/openresty/nginx/conf.d/block_ip.conf#接收需要查询的IP地址echo-e"查询被www.baiinfo.com屏蔽的IP地址,请输入精确的IP地址(支......
  • Win11关闭防火墙
    要在Windows11上关闭防火墙,可以按照以下步骤操作:点击任务栏中的开始菜单,然后选择“设置”。在设置界面,使用搜索框搜索“Defender”,这将打开WindowsDefender防火墙设置。在WindowsDefender防火墙设置界面,选择左侧的“启用或关闭WindowsDefender防火墙......
  • macOS14使用brew下载Redis时出现的问题和解决方法
    当我使用brew下载redis时系统:macOS14(base)hanxuxian@hanxuxiandeMacBook-Air~%brewinstallredis报错信息:Error:git:unknownorunsupportedmacOSversion::dunnoError:'git'mustbeinstalledandinyourPATH!Warning:YouareusingmacOS14.Wedon......
  • 学java11运算符
    运算符java支持以下运算符优先级()多用括号1.算术运算符:+,-,*,/,%(取余运算,模运算),++,--//++a先自增再给c赋值a=a+1//a++先给b赋值再自增a=a+1a--和--a原理同上2.赋值运算符:=3.关系运算符:>,<,>=,<=,==,(不等于)!=,instanceof4.逻辑运算符:&&(与),||(或),“!()”(非)&&逻......
  • Redis - 字典的实现与哈希冲突解决
    1.字典的实现edis的字典数据类型的实现主要分为两个部分:typedefstructdict{dictType*type;void*privdata;dicththt[2];longrehashidx;unsignedlongiterators;}dict;其中,type属性表示字典的类型,而privdata属性表示字典的私有数据,它是......
  • Redis学习之路
    Redis代码成就万世基积沙镇海梦想永在凌云意意气风发一.是什么,有什么用用来解决数据量太大。数据索引太大,内存放不下。读写量(读写混合),单独的服务器承受不了。减轻服务器压力,使用缓存来保证效率(主要是用来解决读的问题)。Cache有时间局部性和空间局部性垂......
  • Redis整合Springboot
    六.巅峰1.事务Redis单条命令保证原子性,但是事务不保证原子性原子性:要么同时成功,要么同时失败Redis的事物本质:一组命令的集合,一个事务中的所有命令都会被序列化,事务执行过程中,会按照顺序执行。具有一次性,顺序性,排他性(没有隔离级别的概念)所有的命令在事务中,并没有直接执行,只有......