【redis】redis常用的五种数据类型

1、字符串(String)

1.1简介

  • 描述:字符串是Redis中最基本的数据类型,用于存储二进制安全的数据,如字符串、整数、浮点数等。
  • 最大长度:最大能存储512MB的数据。
  • 应用场景:常用于缓存用户会话信息、页面片段等。
  • 底层实现:Redis并没有使用C语言的原生字符串表示,而是使用了简单动态字符串(SDS)来存储字符串,这种数据结构在获取字符串长度、追加字符串等方面的操作复杂度为O(1)

1.2常见命令

  • set < key>< value>:添加键值对
  • get < key>查询对应键值
  • append < key>< value>:将给定的值追加到key的末尾
  • strlen < key>:获取值的长度
  • setnx < key>< value>:只有在key不存在时,设置key-value加入到数据库
  • setex < key> < timeout>< value>:添加键值对,同时设置过期时间(以秒为单位)
  • incr < key>:将key中存储的数字加1处理,只能对数字值操作。如果是空,值为1
  • decr < key>:将key中存储的数字减1处理,只能对数字值操作。如果是空,值为1
  • incrby < key>< increment>:将key中存储的数字值增加指定步长的数值,如果是空,值为步长。 (具有原子性)
  • decrby < key>< decrement>: 将key中存储的数字值减少指定步长的数值,如果是空,值为步长。 (具有原子性)
  • mset < key1>< value1>[< key2>< value2>...]:同时设置1个或多个key-value值
  • mget < key1>[< key2>...]:同时获取1个或多个value
  • msetnx < key1>< value1>[< key2>< value2>...]:当所有给定的key都不存在时,同时设置1个或多个key-value值(具有原子性)
  • getrange/substr < key>< start>< end> 将给定key,获取从start(包含)到end(包含)的值
  • setrange < key>< offset>< value>:从偏移量offset开始,用value去覆盖key中存储的字符串值
  • getset< key>< value>: 对给定的key设置新值,同时返回旧值。如果key不存在,则添加一个 key-value值

1.3注意

  • Redis 中的字符串可以存储非常大的数据,最大可以达到 512MB。
  • 尽管我们称之为“字符串”,但 Redis 的字符串是二进制安全的,这意味着你可以在其中存储任何数据,包括图片、序列化对象等。
  • 当你使用 INCRDECRINCRBYDECRBY 命令时,Redis 会尝试将 key 的值转换为整数,如果无法转换(例如,key 的值不是整数或不存在),则这些命令会失败。
  • APPEND 命令可以用来在现有的字符串后追加数据,而不是替换它。
  • STRLEN 命令返回的是字符串的字节长度,而不是字符数(这取决于你的字符串编码)。

2、哈希(Hash)

2.1简介

  • 描述:哈希是一个键值对的集合,类似于其他编程语言中的字典或映射。
  • 最大容量:每个哈希最多可以存储2^32 - 1个键值对。
  • 应用场景:适合存储对象的属性信息,比如用户信息、商品信息等。
  • 特点:每个哈希表内部都有一个哈希映射表,用于快速定位键值对。

2.2内部编码方式

  • ziplist(压缩列表):当哈希对象同时满足两个条件时,使用ziplist编码:哈希对象保存的所有键值对的键和值的字符串长度都小于64字节;哈希对象保存的键值对数量小于512个。
  • hashtable(哈希表):当哈希对象不能满足ziplist的条件时,就会使用hashtable编码。

2.3常见命令

  • hset< key>< field>< value>[< field>< value>..1:用于为哈希表中的字段赋值,如果字段在hash表中存在,则会被覆盖
  • hmset:用法同hset,在redis4.0.0中被弃用
  • hsetnx< key>< field><value>:只有在字段不存在时,才设置哈希表字段中的值
  • hget< key>< field> 返回哈希表中指定的字段的值
  • hmget < key>< field>[< field>...]:获取哈希表中所有给定的字段值hgetall<key>:获取在哈希表中指定key的所有字段和值
  • hexists <key>< field>:判断哈希表中指定的字段是否存在,存在返回1,否则返回0
  • hkeys<key>:获取哈希表中所有的字段
  • hvals< key>:获取哈希表中所有的值
  • hlen<key>:获取哈希表中的field数量
  • hdel< key>< field>[< field>...]:删除一个或多个哈希表字段
  • hincrby<key>< field><increment>:为哈希表key中指定的field字段的整数值加上增加
  • increment
  • hincrbyfloat<key><field><increment>:为哈希表key中指定的field字段的浮点数值加上增加increment

3、列表(List)

3.1简介

  • 描述:列表是一个有序的字符串集合,允许在列表的两端进行插入和删除操作。
  • 底层实现:在Redis 3.2之前,List的底层实现是LinkedList或者ZipList。Redis 3.2之后,引入了LinkedList和ZipList的结合QuickList,使得List的底层实现更为高效。从Redis 7.0开始,ZipList被ListPack取代。
  • 应用场景:常用于实现消息队列、任务队列等功能。

3.2特性与功能

  • 有序性:列表中的元素是有序的,可以通过索引下标获取某个元素或者某个范围内的元素列表。
  • 重复性:列表中的元素可以是重复的,即同一个值可以在列表中出现多次。
  • 插入和删除:可以在列表的头部(左边)或尾部(右边)插入(push)或删除(pop)元素。
  • 容量:一个列表最多可以存储2^32-1个元素,即约42.9亿个元素。

3.3常见命令

  • lpush < key>< value1>[< value2>...]:从左侧插入一个或多个值
  • lpushx< key>< value1>[< value2>...]:将一个或多个值插入到已存在的列表头部
  • lrange <key>< start><stop>:获取列表指定范围内的元素,0左边第1位,-1右边第1 位,0 ~-1取出所有
  • rpush< key>< value1>[< value2>...]:从右侧插入一个或多个值
  • rpushx< key>< value1>[< value2>..]:将一个或多个值插入到已存在的列表尾部
  • lpop<key>[count]:移除并获取列表中左边第1个元素,count表明获取的总数量,返回的为移除的元素
  • rpop<key>[count]:移除并获取列表中右边第1个元素,count表明获取的总数量,返回的为移除的元素
  • rpoplpush<source><destination>:移除源列表的尾部的元素(右边第一个),将该元素添加到目标列表的头部(左边第一个),并返回
  • lindex< key>< index>:通过索引获取列表中的元素llen< key>:获取列表长度
  • linsert<key>before after< pivot><element>:在< pivot>基准元素前或者后面插入<element>,如果key不存在,返回0。如果<pivot>不存在,返回-1,如果操作成功,返回执行后的列表长度
  • lrem<key><count><element>:根据count的值,移除列表中与参数相等的元素
  • ocount=0 移除表中所有与参数相等的值
  • ocount>0 从表头开始向表尾搜索,移除与参数相等的元素,数量为count
  • ocount<0 从表尾开始向表头搜索,移除与参数相等的元素,数量为count的绝对值lset<key><index><element>:设置给定索引位置的值
  • ltrim< key>< start> < stop>:对列表进行修剪,只保留给定区间的元素,不在指定区间的被删除
  • brpop < key> timeout:阻塞式移除指定key的元素,如果key中没有元素,就等待,直到有元素或 超时,执行结束。

 

4、集合(Set)

4.1简介

  • 描述:集合是一个无序的、唯一的字符串集合,不允许重复元素存在。
  • 操作:支持添加、删除和判断元素是否存在等操作。
  • 应用场景:适合存储标签、用户关注列表等数据。

4.2特性

  • 无序性:集合中的元素是无序的,即不保证元素的插入顺序。
  • 唯一性:集合中的元素是唯一的,不存在重复的元素。
  • 高效:集合的插入、删除和查找操作的时间复杂度都是O(1),即常数时间复杂度,这使得集合在处理大量数据时非常高效。
  • 原子性:Redis的所有操作都是原子的,即在一个命令执行的过程中,不会被其他客户端打断,这保证了数据的一致性。

4.3常见命令

  • sadd<key>< member>[< member>..]:将一个或多个成员元素加入到集合中,如果集合中已经
  • 包含成员元素,则被忽略
  • smembers<key>:返回集合中的所有成员。
  • sismember<key><member>:判断给定的成员元素是否是集合中的成员,如果是返回1,否则返回0
  • scard<key>:返回集合中元素个数
  • srem< key>< member>[< member>...]:移除集合中一个或多个元素
  • spop<key>[<count>]:移除并返回集合中的一个或count个随机元素
  • srandmember<key>[<count>]:与spop相似,返回随机元素,不做移除smove<source><destination><member>:将member元素从source源移动到destination目标
  • sinter< key>[< key>...]:返回给定集合的交集(共同包含)元素
  • sinterstore<destination><key1>[< key2>..]:返回给定所有集合的交集,并存储到destination目标中
  • sunion < key>[< key>...]:返回给定集合的并集(所有)元素
  • sunionstore<destination><key1>[< key2>..]:返回给定所有集合的并集,并存储到destination目标中
  • sdiff< key>[< key>..]:返回给定集合的差集(key1中不包含key2中的元素)
  • sdiffstore<destination><key1>[< key2>..]:返回给定所有集合的差集,并存储到destination目标中蛍距

 

5、有序集合(Sorted Set)

5.1简介

  • 描述:有序集合是一个有序的字符串集合,每个元素都会关联一个分数(score),通过分数可以对元素进行排序。同时,有序集合也保持了元素的唯一性。
  • 应用场景:常用于排行榜、热门文章等场景。
  • 底层实现:有序集合的底层实现主要依赖于跳跃表(SkipList)和哈希表(Dict),跳跃表用于维护元素的排序,哈希表则用于快速定位元素。

5.2基本特性

  • 有序性:有序集合中的元素根据它们的分值进行排序,分值可以是重复的,但元素本身在集合中是唯一的。
  • 唯一性:有序集合中的元素是唯一的,不允许有重复的元素。
  • 分值:每个元素都关联一个double类型的分值,用于排序。
  • 容量:有序集合中的成员数最多为2^32 - 1个(约42.9亿个元素)。

5.3常见命令

  • zadd<key><score>< member>[< score>< member>..]:将一个或多个元素及其分数加入到有序集合中
  • zrange < key>< min>< max> [byscore | bylex] [rev] [ limit offset count] [withscores]: 返回有序集合指定区间的成员,(byscore按分数区间,bylex按字典区间,rev反向排序(分数大的写前边小的写后边),limit分页(offset偏移量,count返回的总数),withscores返回时带有对应的分数)
  • zrevrange<key>< start>< stop>[ limit offset count]:返回集合反转后的成员
  • zrangebyscore <key>< min>< max> [withscores][ limit offset count]:参考zrange用法
  • zrevrangebyscore< key>< max>< min> [withscores] [ limit offset count]:参考zrange用法
  • zrangebylex<key>< min>< max>][ limit offset count]:通过字典区间返回有序集合的成员
  • zrangebylex k2-+:减号最小值,加号最大值
  • zrangebylex k2 [aa(ac:[中括号表示包含给定值,(小括号表示不包含给定值zcard < key>:获取集合中的成员数量
  • zincrby<key><increment><member>:为集合中指定成员分数加上增量
  • incrementzrem< key><member>[< member>...]:移除集合的一个或多个成员
  • zcount<key>< min>< max>:统计集合中指定区间分数(都包含)的成员数量
  • zrank< key>< member>:获取集合中成员的索引位置
  • zscore < key>< member>:获取集合中成员的分数值

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL注入和防御方法

SQL注入是一种攻击手段&#xff0c;通过在SQL查询中插入恶意SQL代码片段&#xff0c;欺骗数据库服务器执行非授权的数据库操作。这种攻击可能导致数据泄露、篡改或丢失。为了防范SQL注入&#xff0c;可以采取以下几种策略&#xff1a; 1.使用预编译语句&#xff08;Prepared St…

戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!

随着科技的快速发展&#xff0c;笔记本电脑已成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着时间的推移&#xff0c;笔记本可能会遇到各种问题&#xff0c;如系统卡顿、失灵等。这时&#xff0c;重装系统往往是一个有效的解决方案。本文将详细介绍如何在戴尔笔…

stm32-USART通信

什么是usart&#xff1f;和其他通信又有什么区别&#xff1f; 如下图&#xff1a; USART是一种用于串行通信的设备&#xff0c;可以在同步和异步模式下工作。 usart有两根数据线&#xff0c;一根发送线&#xff08;tx&#xff09;一根接收线&#xff08;rx&#xff09;&#x…

2、Redis持久化与高可用架构

一、Redis 持久化 RDB 快照&#xff08;Snapshot&#xff09; 基本概念&#xff1a;RDB&#xff08;Redis DataBase&#xff09;快照是将 Redis 内存中的数据在某个时间点保存到磁盘中的一种持久化方式&#xff0c;默认保存到 dump.rdb 的二进制文件中。通过 RDB 快照&#xff…

Pytorch课程论文设计参考

Pytorch下基于卷积神经网络的手写数字识别 论文格式 利用wps初步美化论文格式教程 wps论文格式变的的原因 格式变的根本原因是word为流式文件&#xff0c;就算同是word同一个版本不同电脑也会有可能变&#xff0c;字体变是因为没有嵌入字体然后观看的那台没有这个字体。 一、…

Excel单元格输入逐字动态提示可选输入效果制作

Excel单元格输入逐字动态提示可选输入效果制作。INDEX函数整理动态列表&#xff0c;再配合IF函数干净界面&#xff0c;“数据验证”完成点选。 (笔记模板由python脚本于2024年06月27日 22:26:14创建&#xff0c;本篇笔记适合喜欢用Excel处理数据的coder翻阅) 【学习的细节是欢悦…

视频监控管理平台LntonCVS智能视频监控平台系统详细介绍

安防视频监控平台LntonCVS以其卓越的灵活性和便捷的部署特性在众多同类产品中脱颖而出。它不仅支持多种主流标准协议&#xff0c;如国标GB28181、RTSP/Onvif、RTMP等&#xff0c;还兼容了海康Ehome、海大宇等厂家的私有协议和SDK接入&#xff0c;为用户提供了更加丰富的选择。 …

什么是有效的电子签名?PDF电子签名怎样具备法律效力?

电子签名逐渐成为商务文书和法律文件中不可或缺的一部分。《电子签名法》自2005年4月1日起施行&#xff0c;这一立法是中国信息化法律的重要里程碑&#xff0c;为电子签名应用奠定了法律基础。电子签名不仅仅是一种技术手段&#xff0c;更是一种法律认可的签名形式。那么究竟什…

【vue3】【vant】 移动端中国传统文化和民间传说案例

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端中国传统文化和民间传说案例 获取源码方式项目说明&#xff1a;其中功能包括项目包含&#xff1a;项目运行环境运行截图和视频 获取源码方式 加Q群&#xff1a;632562109项目说…

clickhouse count和uniqCombined

count(distinct ) 和 uniqCombined 获取去重后的总数。 去重&#xff1a;order by distinct argMax group by 哪个好&#xff1f;&#xff1f; clickhouse数据去重函数介绍&#xff08;count distinct&#xff09;_clickhouse distinct-CSDN博客

重生之我要学后端0--HTTP协议和RESTful APIs

http和RESTful APIs HTTP协议RESTful APIs设计RESTful API设计实例 HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下&#xff1a; 客户端请求&#xff08;Request&#xf…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特殊加密算法(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

Python和tkinter实现的字母记忆配对游戏

Python和tkinter实现的字母记忆配对游戏 因为这个小游戏用到了tkinter&#xff0c;先简要介绍一下它。tkinter是Python的标准GUI(图形用户界面)库&#xff0c;它提供了一种简单而强大的方式来创建图形界面应用程序。它提供了创建基本图形界面所需的所有工具&#xff0c;同时保…

生产者发送数据,kafka服务器接收数据异常的问题记录

现象&#xff1a; 某个客户要求审计日志用kafka的方式传输给他们&#xff0c;使用了第三方的librdkafka库来开发。 往客户提供的kafka服务器上的一个topic发送数据&#xff0c;这个topic有三个分区&#xff0c;客户反馈接收到的数据和发送端发送的实际数量对不上&#xff0c;他…

Elasticsearch环境搭建|ES单机|ES单节点模式启动|ES集群搭建|ES集群环境搭建

文章目录 版本选择单机ES安装与配置创建非root用户导入安装包安装包解压配置JDK环境变量配置single-node配置JVM参数后台启动|启动日志查看启动成功&#xff0c;访问终端访问浏览器访问 Kibana安装修改配置后台启动|启动日志查看浏览器访问 ES三节点集群搭建停止es服务域名配置…

平板WPS转换的PDF文件保存位置解析

在日常工作和生活中&#xff0c;我们经常需要将文档转换成PDF格式进行分享&#xff0c;以确保接收者能够无障碍地查看文件内容&#xff0c;不受软件版本或操作系统的限制。WPS作为一款功能强大的办公软件&#xff0c;也提供了文档转换为PDF的功能。然而&#xff0c;有时在转换并…

HarmonyOS--数据持久化--关系型数据库

文档中心 关系型数据库 场景介绍 关系型数据库基于SQLite组件&#xff0c;适用于存储包含复杂关系数据的场景&#xff0c;比如一个班级的学生信息&#xff0c;需要包括姓名、学号、各科成绩等&#xff0c;又或者公司的雇员信息&#xff0c;需要包括姓名、工号、职位等&#…

hnust 1817 算法10-10,10-11:堆排序

hnust 1817 算法10-10,10-11&#xff1a;堆排序 题目描述 堆排序是一种利用堆结构进行排序的方法&#xff0c;它只需要一个记录大小的辅助空间&#xff0c;每个待排序的记录仅需要占用一个存储空间。 首先建立小根堆或大根堆&#xff0c;然后通过利用堆的性质即堆顶的元素是最…

Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!

1. 安装homebrew 打开终端&#xff0c;使用以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示逐步完成即可&#xff0c;镜像选择我这里都是保持1的选项。 2. 重启终端 安装完成homebrew后&#xff0c;需…

Vite: 关于Rollup打包

概述 Rollup 是一款基于 ES Module 模块规范实现的 JavaScript 打包工具&#xff0c;在前端社区中赫赫有名&#xff0c;同时也在 Vite 的架构体系中发挥着重要作用不仅是 Vite 生产环境下的打包工具&#xff0c;其插件机制也被 Vite 所兼容&#xff0c;可以说是 Vite 的构建基…