Redis的五种常用数据类型

news2024/12/25 8:59:30

在这里插入图片描述

1.字符串

String的数据结构是简单的Key-Value模型,Value可以是字符串,也可以是数字。

String是Redis最基本的类型,是二进制安全的,意味着Redis的string可以包含任何数据,比如jpg图片。

一个redis中字符串value最大是512M

常用命令

set 添加键值对

get 查询对应键值

append 将给定的追加到原值的末尾

strlen 获得值得长度

setnx 只有在key不存在时 设置key的值

incr

将key中存储的数字值增1

只能对数字值操作,如果为空,新增值为1

decr

将key中存储的数字减1

只能对数字值操作,如果为空,新增值为-1

incrby / decrby <步长> 将key中存储的数字值增减。自定义步长

mset …

同时设置一个或多个键值对

mget …

同时获取一个或多个value

msetnx …

同时设置一个或多个key-value对,当且仅当所有给定key都不存在。(原子性操作)

getrange <起始位置><结束位置>

获得值得范围,包括起始和终止位置

setrange <起始位置>

用 覆写所存储的字符串值,从<起始位置>开始(索引从0开始)

setex <过期时间>

设置键值的同时,设置过期时间,单位秒

getset

设置新值同时获取旧值

2.列表List

在这里插入图片描述

单键多值
Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),底层实际是个双向链表
Lpush:表示的是向链表的左添加,也就是向链表的头添加
Rpush:表示的是向链表的右添加,也就是向链表的尾添加

常用命令

lpush/push… … 从左边/右边插入一个或多个值。

lpop/rpop 从左边/右边吐出一个值。值在键就在,值无键亡。

rpoplpush 从列表右边吐出一个值,插到列表左边。

lrange

按照索引下标获得元素(从左到右)

lrange mylist 0-1 0左边第一个,-1右边第一个,(0-1表示获取所有)

lindex 按照索引下标获得元素(从左到右)

llen 获得列表长度,

linsert before 在的后面插入插入值lrem

从左边删除n个value(从左到右)

lset 将列表key下标为index的值替换成value

数据结构

List的数据结构为快速链表quickList。

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。

它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成

quicklist。

因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的

数据,结构上还需要两个额外的指针prev和next。

Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。

这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

3.集合Set

在这里插入图片描述
Redis 的集合是字符串的无序集合。
在Set集合当中,是不允许有重复的。
set是通过hash table实现的,可以进行添加、删除和查找。对集合我们可以取并集,交集,差集.

与list类似是一个列表的功能,特殊在于set可自动去重。Redis的Set是string类型的无序集合,它底层其实是一个value为null的hash表,添加,删除,查找复杂度都是O(1)

常用命令

sadd … 将一个或多个member元素加入到集合key中,已经存在的

member元素将被忽略

smembers 取出该集合的所有值。,

sismember判断集合是否为含有该值,有1,没有0scard返回

该集合的元素个数。,

srem …删除集合中的某个元素。,spop 随机从该集合中吐出一

个值。

srandmember 随机从该集合中取出n个值。不会从集合中删除。

smove value 把集合中一个值从一个集合移动到另一个集合·

sinter 返回两个集合的交集元素。

sunion 返回两个集合的并集元素。

sdiff 返回两个集合的差集元素(key1中的,不包含key2中的)

数据结构

Set数据结构是dict字典,字典是用哈希表实现的

内部使用hash结构,所有的value都指向同一个内部值

4.Zset

Redis 的有序集合类似于 Redis 的集合,字符串不重复的集合。

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序

集合的每个成员都关联了一个评分(score ) ,这个评分( score )被用来按照从最低分到最高分的方

式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复的。

因为元素是有序的,所以你也可以很快的根据评分( score )或者次序( position)来获取一个范围的

元素。

访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列

表。

常用命令:

zadd … 将一个或多个member元素及其score值

加入到有序集key当中。

uzrangie [WITHSCORES] 返回有序集key 中,下标在

间的元素

带WITHSCORES,可以让分数一起和值返回到结果集。

vzrangebyscore key minmax [withscores] [limit offset count] 返回有序集key中,所有

score值介于min和max之间(包括等于min或 max )的成员。有序集成员按score值递增(从小到大)

次序排列。

zrevrangebyscore key maxmin [withscores] [limit offset count] 同上,改为从大到小排列。

zincrby 为元素的score加上增量.zrem 删除该集合

下,指定值的元素

zcount 统计该集合,分数区间内的元素个数zrank 返回该值

在集合中的排名,从0开始。

数据结构

zset是Redis提供的一个特别的数据结构,一方面等价于Java的数据结构Map<String,Double>,可

以给每一个元素value赋予一个权重score,另一方面又类似于TreeSet,内部的元素会按照权重

score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。

zset底层使用了两种数据结构

(1)hash,作用是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找

到相应的score值

(2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表

5.哈希Hash

在这里插入图片描述
Redis 的哈希是键值对的集合。
Redis 的哈希值是字符串字段和字符串值之间的映射,因此它们被用来表示对象,还有用户信息之类的,经常变动的信息。
Hash更适合用于对象的存储,String更适合字符串存储。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长

度较短且个数较少时,使用ziplist,否则使用hashtable

常用命令

hset 给集合中的键赋值

hget 从集合取出value v

hmset … 批量设置hash的值

hexists 查看哈希表key 中,给定域field是否存在。“

hkeys 列出该hash集合的所有field

hvals 列出该hash集合的所有 valuee

hincrby 为哈希表key中的域field 的值加上增量1 -1

hsetnx 将哈希表key中的域field 的值设置为value,当且仅当域field不存在

数据结构

Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较

短且个数较少时,使用ziplist,否则使用hashtable。

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

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

相关文章

光伏系统MPPT、恒功率控制切换Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

从0开始学go第五天

gin框架返回JSON package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/json", func(c *gin.Context) {//用map序列化//方法一&#xff1a;用map&#xff0c;后面用接口类型// data : map[string…

电视盒子什么品牌好?内行分享权威电视盒子品牌排行榜

因工作关系每天都会接触到各种类型的电视盒子&#xff0c;对整个行业可以说了如指掌&#xff0c;身边朋友们在挑选电视盒子时也会问我电视盒子什么品牌好&#xff0c;哪些电视盒子值得入手&#xff0c;今天我来分享业内公认最权威的电视盒子品牌排行榜&#xff1a; TOP 1.泰捷超…

使用 labelImg 制作YOLO系列目标检测数据集(.xml文件)

文章转载自K同学&#xff0c;谨防原文失效 第一步&#xff1a; WIN键R 输入cmd 打开命令行窗口 第二步&#xff1a; 在命令行窗口中输入pip3 install labelImg&#xff0c;安装 labelImg 第三步&#xff1a; 输入labelImg 打开labelImg窗口 第四步&#xff1a; ✨ 标注小技巧…

Edge浏览器无法下载RP插件问题解决方案

1、进入本地C:\Windows\System32\drivers\etc 2、编辑hosts文件&#xff0c;在最后结尾加入以下内容 131.253.33.219 edge.microsoft.com 131.253.33.219 msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com3、进入 https://microsoftedge.microsoft.com/addons/search/RP…

背靠背 HVDC-MMC模块化多电平转换器输电系统-用于无源网络系统的电能质量调节(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

网络安全——黑客自学(笔记)

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…

【技术干货】如何通过 DP 实现支持经典蓝牙的联网单品设备与 App 配对

经典蓝牙模块&#xff08;Classic Bluetooth&#xff09;主要用于呼叫和音频传输&#xff0c;所以经典蓝牙最主要的特点就是功耗大&#xff0c;传输数据量大。蓝牙耳机、蓝牙音箱等场景大多采用经典蓝牙&#xff0c;因为蓝牙是为传输声音而设计的&#xff0c;是短距离音频传输的…

【ORM】浅聊C#和Java的ORM底层框架

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 国庆假期马上结束&#xff0c;闲暇时间&#xff0c;突然对Ado.Net这个词的由来感兴趣&#xff0c;然后就一顿复习了一遍&#xff0c;顺便也了解了下java关于ORM框架的底层是什么&#xff…

隐式转换导致慢sql引起的性能问题

背景: 环境上有个接口压测吞读量一直上不去,该接口的逻辑大概是查询我方数据库2个表,然后调用外围2个接口 分析过程: 1.问题1(gap时间) a. 查看调用链发现调用链存在大量gap时间,这种gap时间一般就是资源没了,比如等待获取连接池,或者gc回收等待,归根接底都是…

数据结构----结构--非线性结构--图

数据结构----结构–非线性结构–图 一.图&#xff08;Graph&#xff09; 1.图的结构 图是多对多的结构 2.图的基本概念 图的基本概念为G(V,E) V是顶点的集合 E是边的集合 G是图 一个图其实是顶点和边的二元组合 观察下图,思考V和E集合中的元素分别都是什么 V{V1,V2,V…

一篇理解http协议

一、http协议。 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种在Web中广泛使用的应用层协议&#xff0c;它定义了客户端和服务器之间的通信规则&#xff0c;简化了Web应用程序的开发和交互过程。其实传输是由TCP协议完成的。 HT…

【window10】Dart+Android Studio+Flutter安装及运行

安装Dart SDK安装Android Studio安装Flutter在Android Studio中创建并运行Flutter项目 安装前&#xff0c;请配置好你的jdk环境&#xff0c;准备好你的梯子~ 安装Dart SDK 浅浅了解一下Dart&#xff1a; Dart 诞生于2011年&#xff0c;是由谷歌开发的一种强类型、跨平台的客户…

苹果爆出台积电及三星3纳米制程良率远低于60% | 百能云芯

韩媒消息指出&#xff0c;台积电和三星的3纳米制程良率都未超过60%&#xff0c;远低于吸引硬件供应商所需的水准。韩媒近期不断炒作iPhone 15系列过热与台积电3纳米芯片技术有关&#xff0c;但苹果已澄清该问题主要是iOS 17操作系统漏洞及第三方应用程序所造成。 三星是第一家开…

强化学习------Sarsa算法

简介 SARSA&#xff08;State-Action-Reward-State-Action&#xff09;是一个学习马尔可夫决策过程策略的算法&#xff0c;通常应用于机器学习和强化学习学习领域中。它由Rummery 和 Niranjan在技术论文“Modified Connectionist Q-Learning&#xff08;MCQL&#xff09;” 中…

ueditor

下载文件在文件夹下npm install 安装依赖&#xff08;如果没有安装 grunt , 请先在全局安装 grunt&#xff09; 在文件下载目录下 npm install3. 在终端执行 grunt default grunt default

P1014 [NOIP1999 普及组] Cantor 表

#include <bits/stdc.h> using namespace std; int main() {int n,k1;cin>>n;while (n>k) {nn-k;k;}if(k%20) cout<<n<<"/"<<(k1-n);else cout<<k1-n<<"/"<<n;return 0; }

Angular学习笔记:路由

本文是自己的学习笔记&#xff0c;主要参考资料如下。 - B站《Angular全套实战教程》&#xff0c;达内官方账号制作&#xff0c;https://www.bilibili.com/video/BV1i741157Fj?https://www.bilibili.com/video/BV1R54y1J75g/?p32&vd_sourceab2511a81f5c634b6416d4cc1067…

到github上去学别人怎么写代码

线性回归是一种线性模型&#xff0c;例如&#xff0c;假设输入变量"(x) “与单一输出变量”(y) “之间存在线性关系的模型。更具体地说&#xff0c;输出变量”(y) “可以通过输入变量”(x) "的线性组合计算得出。单变量线性回归是一种线性回归&#xff0c;只有1个输入…

【2023研电赛】东北赛区一等奖作品:基于FPGA的小型水下无线光通信端机设计

本文为2023年第十八届中国研究生电子设计竞赛东北赛区一等奖作品分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&a…