掌握Redis核心:常用数据类型的高效运用秘籍!

news2024/11/25 20:32:19

在数据驱动的时代,高效地存储和处理数据成为了开发者们的重要任务。Redis,作为一个开源的高性能键值对(key-value)数据库,以其独特的数据结构和丰富的功能,成为了众多项目的首选。

今天,我们就来揭开Redis的神秘面纱,看看它是如何通过不同的数据类型,为我们提供高效、灵活的数据存储和处理能力的。

一、字符串(String):数据的基石

String类型简介

字符串是Redis最基本的数据类型,它可以存储文本、数字或者二进制数据。

使用字符串类型,你可以执行原子性的操作,如追加(APPEND)、设置(SET)和获取(GET)。例如,你可以将用户信息作为字符串存储,并通过键快速检索。

  • 一个key对应一个value。

  • String类型是二进制安全的。只要内容可以使用字符串表示就可以存储到string中。比如jpg图片或者序列化的对象。

  • 一个Redis中字符串value最多可以是512M。

常用命令

set key value: 添加键值对。
在这里插入图片描述

get key: 查询key对应的键值。
在这里插入图片描述

注意:如果设置了两次相同的key,后设置的就会把之前的key覆盖掉。

append key value: 将给定的value追加到原值的末尾。
Description

strlen key: 获得值的长度。
在这里插入图片描述

setnx key value: 只有在key 不存在时 ,才能设置 key 的值。
Description

incr key: 将 key 中储存的数字值增1(只能对数字值操作,如果为空,新增值为1)。
在这里插入图片描述

decr key: 将 key 中储存的数字值减1(只能对数字值操作,如果为空,新增值为-1)。
在这里插入图片描述

incrby / decrby key 步长: 通过自定义步长方式增减 key 中储存的数字值。
在这里插入图片描述

mset key1 value1 key2 value2 …: 同时设置一个或多个键值对。
在这里插入图片描述

mget key1 key2 key3 …: 同时获取一个或多个value。
在这里插入图片描述

msetnx key1 value1 key2 value2 …: 所有给定 key 都不存在时,同时设置一个或多个 key-value 对。

注意:此操作有原子性,只要有一个不符合条件的key。其他的也都不能设置成功。如下图:
在这里插入图片描述

getrange key 起始位置、结束位置: 获得值的范围,类似java中的substring。
在这里插入图片描述

setrange key 起始位置 value: 用 value覆写key所储存的字符串值,从起始位置开始(索引从0开始)。
在这里插入图片描述

setex key 过期时间 value: 可以在设置键值的同时,设置过期时间,单位秒(前面的expire是给已有的键值设置过期时间,注意区别)。
Description

getset key value: 以新换旧,设置了新值同时获得旧值。
在这里插入图片描述

应用场景

存储用户信息: 将用户的姓名、年龄等信息作为字符串存储在Redis中,通过键值对的方式快速检索和更新。

计数器: 使用INCR命令实现访问量、点赞数等计数功能。

二、哈希(Hash):组织数据的框架

Hash类型简介

哈希类型允许你存储字段-值对的集合。这种结构非常适合于存储对象,如用户的个人信息。通过HSET和HGET命令,你可以设置和获取哈希中的字段和值。

哈希类型的优势在于它可以对字段进行原子性操作,而不需要读取整个对象。

常用命令

hset key field value: 给key集合中的 field 键赋值value。
Description

hget key1 field: 从key1集合field取出 value。
在这里插入图片描述

hmset key1 field1 value1 field2 value2… : 批量设置hash的值(一次性设置多个数据值)。
在这里插入图片描述

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

hkeys key: 列出该hash集合的所有field。
在这里插入图片描述

hvals key: 列出该hash集合的所有value。
在这里插入图片描述

hincrby key field increment: 为哈希表 key 中的域 field 的值加上增量。
在这里插入图片描述hsetnx key field

value: 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
在这里插入图片描述

应用场景

存储用户对象: 将用户对象的多个属性(如姓名、年龄、性别等)存储在一个哈希结构中,通过HGETALL命令获取整个对象,或使用HGET/HSET针对某个属性进行操作。

存储配置信息: 将应用程序的配置信息以字段-值对的形式存储在哈希中,方便集中管理和修改。

三、列表(List):有序数据的队列

List类型简介

列表类型提供了一种顺序存储数据的方式,它类似于Python中的列表或Java中的LinkedList。

你可以使用LPUSH和RPUSH命令在列表的头部或尾部添加元素。列表还支持范围查询和列表内元素的移除操作,非常适合于实现消息队列等场景。

  • List中单键多值,即一个key对应多个value,其中的多个value值使用List进行存储。

  • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

  • 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

常用命令

lpush / rpush key value1 value2 value3 … :从左边/右边插入一个或多个值(l代表left,r代表right)。

lrange key start stop:按照索引下标获得元素(从左到右)。

其中lrange k1 0 -1表示取出k1中全部value值(0表示左边第一个,-1代表右边第一个)。
在这里插入图片描述

lpop / rpop key: 从左边/右边吐出一个值。值在键在,值光键亡。
pop表示把值拿出来。
Description

图片从左边取出k1的一个value值。如下图:
在这里插入图片描述

从右边取出k2的一个value值。如下图:
在这里插入图片描述

value值全部取完的时候,key就没有了。如下图:
在这里插入图片描述

rpoplpush key1 key2: 从key1列表右边吐出一个值,插到key2列表左边。
在这里插入图片描述

lindex key index: 按照索引下标获得元素(从左到右)。
在这里插入图片描述

llen key: 获得列表长度。
在这里插入图片描述

linsert key before value newvalue : 在value的前面插入newvalue插入值。
在这里插入图片描述

lrem key n value: 从开始删除n个value(从左到右)图片。
在这里插入图片描述

lset key index value: 将列表key下标为index的值替换成value。
在这里插入图片描述

应用场景

消息队列: 使用LPUSH/RPUSH命令将待处理的消息添加到列表头部/尾部,使用LPOP/RPOP从列表中取出并处理消息。

关注列表: 存储用户关注的其他用户列表,使用LINSERT命令在列表中插入新关注的对象。

你还在苦恼找不到真正免费的编程学习平台吗?可以试试【云端源想】!课程视频、知识库、微实战、云实验室、一对一咨询……你想要的全部学习资源这里都有,重点是现在还是免费的!点这里即可查看!

四、集合(Set):去重数据的集合

Set类型简介

集合类型用于存储无序且唯一的数据集合。当你需要存储不允许重复的元素时,集合是一个很好的选择。

SADD命令用于向集合中添加元素,而SMEMBERS可以获取集合中的所有元素。集合还支持交集、并集和差集等高级操作,非常适合于处理标签、好友关系等场景。

Redis的Set是string类型的无序,不可重复集合。Set底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是0(1)。

常用命令

sadd key value1 value2 …: 将一个或多个 member 元素加入到key对应的集合中,已经存在的 member 元素将被忽略

smembers key: 取出key对应的集合中的所有值。

sismember key value: 判断集合是否为含有该value值。1表示有,0表示没有。
在这里插入图片描述

scard key: 返回key对应集合中的元素个数。
在这里插入图片描述

srem key value1 value2…: 删除key对应的集合中的某些元素。
在这里插入图片描述

spop key: 随机从key对应的集合中吐出一个值。
在这里插入图片描述

srandmember key n: 随机从key对应的集合中取出n个值。不会从集合中删除 (rand即为random)。
在这里插入图片描述

smove sourceKey destinationKey value: 把集合中一个值从一个集合移动到另一个集合。
在这里插入图片描述
sinter key1 key2: 返回两个集合的交集元素

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

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

应用场景

好友关系: 将用户的好友列表存储在一个集合中,使用SADD命令添加好友,使用SISMEMBER判断某个用户是否为好友。

标签系统: 将文章或商品的标签存储在集合中,使用SUNION/SINTER等命令进行标签的交集、并集操作。

五、有序集合(Sorted Set)

Sorted Set类型简介

有序集合是Redis中的一个高级数据类型,它结合了集合的唯一性和列表的排序功能。

每个元素都关联一个分数(score),根据分数对元素进行排序。ZADD命令用于添加元素和分数,ZRANGE则可以获取排序后的元素列表。

注:zset是sorted set的缩写

常用命令

zadd key score1 value1 score2 value2…: 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
在这里插入图片描述

zrange key start stop (withscores): 返回有序集 key 中,下标在start和stop之间的元素。(带withscores,可以让分数一起和值返回到结果集)。

zrange rank 0 -1 (withscores): 表示取出全部元素,从小到大排列。如下图:
在这里插入图片描述

zrangebyscore key min max (withscores): 返回有序集 key 中所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
在这里插入图片描述

zrevrangebyscore key max min (withscores): 同上,改为从大到小排列(其中rev表示reverse)。
在这里插入图片描述

zincrby key increment value: 为元素的score加上增量。
在这里插入图片描述

zrem key value: 删除该集合下,指定值的元素。
在这里插入图片描述

zcount key min max: 统计该集合,分数区间内的元素个数。
在这里插入图片描述

zrank key value: 返回该值在集合中的排名。(排在第一位的是0)
在这里插入图片描述

应用场景

排行榜系统: 可以使用有序集合来存储用户的得分,并根据得分进行排序。

带权重的集合: 有序集合可以用来实现带权重的集合,即每个元素都有一个对应的权重值。

时间线排序: 有序集合可以用于实现时间线排序,即将事件或消息按照时间顺序进行排序。

六、总结

本篇文章我们探索了Redis的五种常用数据类型及常用命令和使用场景。每一种数据类型都有其独特的优势和适用情况,掌握它们将使你在数据处理的道路上更加得心应手。

无论是构建缓存系统,还是实现复杂的数据结构,Redis都能提供强有力的支持。希望这篇文章能帮助你更好地理解和运用Redis,让你的项目在数据的世界中脱颖而出。

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

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

相关文章

Windows和Linux安装Docker

Windows和Linux安装Docker Docker官方解释:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的操作系统的机器上,也能实现虚拟化。现在是2024-2-21目前Docker最新版…

Elastic Search:构建语义搜索体验

当你逐步熟悉 Elastic 时,你将使用 Elasticsearch Relevance Engine™ (ESRE),该引擎旨在为 AI 搜索应用程序提供支持。 借助 ESRE,你可以利用一套开发人员工具,包括 Elastic 的文本搜索、向量数据库和我们用于语义搜索的专有转换…

stm32单片机的开发工具介绍

(本文为简单介绍,内容源于网络) STM32单片机是一种高性能、低功耗、易于开发的微控制器,广泛应用于各种智能设备和嵌入式系统中。为了更方便地开发STM32单片机应用程序,ST公司提供了一系列开发工具和软件包。本文将介…

护眼台灯哪个牌子比较好?五个包括品牌专业推荐!

相信寒假结束后,不少家长都在为孩子挑选护眼台灯。现在护眼台灯已经成为绝大数孩子书桌上都会有的灯具,但快速发展的市场背后,也确实存在很多劣质产品,比如小作坊生产、贴牌产品等等,这类产品研发实力过低,…

Socks5代理IP详解:优势与应用场景

Socks5代理IP作为网络代理技术的前沿选择,其在多方面的优势使其在2024年成为了热门选择。 一、Socks5代理IP的核心特性 1、Socks5代理IP与其他代理类型的比较 HTTP代理设计用于web浏览,仅支持HTTP和HTTPS协议。 Socks4代理支持更多类型的网络协议&…

【鸿蒙 HarmonyOS 4.0】开发工具安装

一、准备开发环境 1.1、安装IDE 鸿蒙应用开发需要使用配套的IDE——HUAWEI DevEco Studio。 DevEco Studio基于IntelliJ IDEA Community(IDEA社区版)构建,为鸿蒙应用提供了一站式开发环境,集成了开发、运行、调试以及发布应用的…

大模型学习笔记三:Function Calling

文章目录 一、命令UI界面进化和Plugins的发展及失败二、Function Calling的机制1)示例 1:调用本地函数2)示例 2:多 Function 调用3)示例 3:用 Function Calling 获取 JSON 结构4)示例 4&#xf…

完整分析CRM管理系统的功能,详细说明!

很多使用过CRM管理系统的人都表示,一旦尝试使用客户管理系统进行业务处理之后,就再也离不开了。那么,客户管理系统究竟有什么魔力?以下是CRM管理系统的功能详解。 虽然CRM是围绕客户管理展开的,然而经过这么多年的发展…

五、分类算法 总结

代码: from sklearn.datasets import load_iris, fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.naive_bayes import MultinomialNB from s…

【FreeRTOS基础入门】事件组与同步点

文章目录 前言一、事件组是什么案例1.1 事件组的概念 二、事件组的操作2.1 事件组与其他实现同步与互斥方法的区别2.2 创建事件组2.3 删除事件组2.4 设置事件2.5 等待事件2.6 示例代码 三、同步点3.1 同步点是什么3.2 设置同步点 总结 前言 FreeRTOS是一个广泛应用于嵌入式系统…

vue3中使用 tui-image-editor进行图片处理,并上传

效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…

windows极限摸鱼软件(仅6678kb)

时间过得真快啊&#xff0c;不知不觉春节假期就过完了。你已经开始工作了吗&#xff1f;反正我是一直没闲着。 歇的时间久了&#xff0c;一上班这节奏很难一下子转换过来。也可能刚上班&#xff0c;没什么事情做&#xff0c;有点无聊。 &#xff08;好吧&#xff0c;我承认了…

Java 面向对象进阶 11 多态的优势和弊端(黑马)

优势&#xff1a; 代码&#xff1a; public class test {public static void main(String[] args) {Animal a new Dog();a.eat(); } } class Animal{public void eat(){System.out.println("动物再吃东西");} } class Dog extends Animal{Overridepublic void eat(…

如何修改unity的背景颜色

要在Unity中将背景颜色设为黑色&#xff0c;可以按照以下步骤进行&#xff1a; 1、在Unity编辑器中&#xff0c;选择你想要修改背景颜色的摄像机对象&#xff08;一般是Main Camera&#xff09;。 2、在Inspector面板中&#xff0c;找到"Clear Flags"&#xff08;清…

Leetcode155(设计最小栈)

例题&#xff1a; 分析&#xff1a; 题目要求我们必须在常数时间内检索到最小元素。 我们可以使用两个栈&#xff08;A、B&#xff09;来实现&#xff0c;A栈用来正常存储数据、弹出数据&#xff0c; B栈用于存储A栈中的最小元素&#xff0c;如下图&#xff1a; 刚开始&#…

三十年一个大轮回!日股突破“泡沫时期”历史高点

2月22日周四&#xff0c;英伟达四季报业绩超预期&#xff0c;而且本季度业绩指引非常乐观&#xff0c;提振美股股指期货并成为芯片股和AI概念股情绪的重要催化剂。今日亚洲芯片股和AI股起飞&#xff0c;日本在芯片股的带动下突破1989年泡沫时期以来的历史最高收盘价。 美股方面…

SqlServer2016离线安装--Microsoft R Open 和 Microsoft R Server安装文件位置

问题 SQL SERVE 2016离线安装&#xff0c;会出现“Microsoft R Open 和 Microsoft R Server 脱机安装”的界面&#xff0c; 无法点击下一步的情况&#xff0c;如下图&#xff1a; 原因 离线安装时需要下载两个文件 解决方案 1、访问路径下载文件 https://go.microsoft.c…

MATLAB 导出可编辑的eps格式图像

任务描述&#xff1a;部分期刊要求提交可编辑的eps格式图像&#xff0c;方便美工编辑对图像进行美化 我试了直接print或者在figure窗口导出&#xff0c;发现导出的文件放到Adobe AI中并不能编辑&#xff0c;经Google找到解决办法&#xff1a; %EPS exportgraphics(gcf,myVect…

Nginx基础入门

一、Nginx的优势 nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个SMTP&#xff08;邮局&#xff09;服务器。 Nginx的web优势&#xff1a;IO多路复用&#xff0c;时分多路复用&#xff0c;频分多路复用 高并发&#xff0c;IO多路复用&#xff0c;epoll&#xf…

2024年1月手机市场行业分析:苹果手机份额骤降,国产高端手机成功逆袭!

小米Ultra发布。 一方面&#xff0c;我们有望看到国产手机再一次超越自己的决心&#xff0c;继续创新追逐高端&#xff1b;另一方面&#xff0c;我们也不得不正视目前手机市场所面临的危机状态。 2024年1月的线上手机市场远不如去年。根据鲸参谋数据显示&#xff0c;今年1月京…