【从零开始学习Redis | 第二篇】Redis中的数据类型和相关命令

news2024/11/27 0:20:37

前言:

        Redis是一种快速、高效的开源内存数据库,被广泛用于构建各种类型的应用程序。其被设计成支持多种数据类型,这使得Redis在处理各种场景的数据存储和操作中非常灵活。Redis的数据类型提供了对不同数据结构的直接支持,包括字符串、哈希、列表、集合和有序集合。每种数据类型都具有独特的特点和适用场景,允许开发人员根据应用需求选择最适合的数据类型。

本文将深入介绍Redis的五种主要数据类型,讨论它们的特性、用途和最佳实践。并且会如何在Redis中通过各种命令来操作这些数据类型

目录

前言:

常用数据类型:

特性和用途:

常用命令操作

字符串操作命令:

 哈希操作命令:

列表操作命令:

集合操作命令:

有序集合操作命令:

通用操作命令:

总结:


 

常用数据类型:

  1. 字符串(String):最基本的数据类型,可以存储任意二进制数据,以及普通的文本字符串。

  2. 哈希(Hash):包含键值对的无序散列,适合保存对象信息,每个键值对存储了字段和值之间的映射关系。

  3. 列表(List):按照插入顺序排序的字符串元素列表,支持在列表的两端进行插入、删除、获取等操作,可实现栈和队列的功能。

  4. 集合(Set):无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素。

  5. 有序集合(Sorted Set):与集合类似,但每个元素都关联着一个分数(score)用于排序,可以按分数范围或成员值获取元素。

 我们讨论Reids的数据类型,更多的是在说value的数据类型,而Key普遍都是字符串类型

特性和用途:

字符串(String):

        特性:字符串类型是 Redis 最基本的数据类型,可以存储任意二进制数据。除了基本的 get、set、delete 操作外,还有丰富的字符串操作函数,如追加、计数、截取等。

        用途:字符串常用于缓存、计数器、分布式锁等场景。可以用于存储简单的键值对数据,或者用作复杂的数据结构的序列化存储。

        最佳实践:将字符串用于存储较大的值时,要注意数据大小的限制。合理利用字符串操作函数,如使用 incr 自增计数器,或使用 append 追加字符串值。

哈希(Hash):

        特性:哈希类型是一个键值对的无序散列表,适合存储对象的多个属性。哈希可以嵌套多层,支持单独的字段的读取、更新和删除操作。

        用途:哈希常用于存储和操作对象的属性,如用户信息、文章信息等。可以减少键名的冗余,提高数据结构的可读性和可维护性。

        最佳实践:使用哈希可以更好地组织复杂的数据结构,充分利用字段级别的读取和更新操作。可以使用 HSET 和 HMSET 分别设置单个和多个字段的值。

列表(List):

        特性:列表是一个按照插入顺序排序的字符串元素集合,支持在列表的两端进行插入、删除和获取元素。元素可以重复,列表的长度可以动态变化。

        用途:列表常用于实现消息队列、任务队列、操作日志、聊天消息记录等。可以实现先进先出(FIFO)或后进先出(LIFO)的数据结构。

        最佳实践:使用列表操作函数,如 LPUSH、RPUSH、LPOP、RPOP 可以方便地操作列表。在读取大型列表时,要注意时间复杂度和性能问题。

集合(Set):

        特性:集合是一个无序且不可重复的字符串元素集合,支持集合的交集、并集、差集等操作,以及添加、删除、随机获取元素等。

        用途:集合常用于去重、关注列表、标签、好友列表等场景。由于集合元素是无序的,可以快速进行成员检测和集合操作。

        最佳实践:使用集合的交集、并集、差集操作可以方便地进行数据筛选和计算。使用 SADD、SREM 进行成员添加和删除。

有序集合(Sorted Set):

        特性:有序集合是一个与每个成员关联的浮点数分数(score),可用于对成员进行排序。支持按照分数范围或成员值获取元素。

        用途:有序集合常用于排行榜、计分系统、优先级队列等场景。可以按照分数进行排名和排序。

        最佳实践:利用有序集合的分数,可以快速进行成员的增删改查操作。使用 ZADD、ZREM 进行成员的添加和删除,使用 ZRANGE 和 ZREVRANGE 进行范围查询。

常用命令操作

字符串操作命令:

  1. SET key value:设置指定 key 的值为给定的 value。

  2. GET key:获取指定 key 的值。

  3. DEL key:删除指定 key。

  4. INCR key:将指定 key 的值增加1。

  5. DECR key:将指定 key 的值减少1。

  6. APPEND key value:将指定 value 追加到指定 key 的值末尾。

  7. STRLEN key:返回指定 key 值的字符串长度。

  8. SETEX key seconds value:设置指定 key 的值,并设置过期时间(秒)。

  9. SETNX key value:只在指定 key 不存在时,设置 key 的值为给定的 value。

  10. GETSET key value:设置指定 key 的值,并返回旧值。

  11. MSET key1 value1 key2 value2 …:设置多个 key-value 对。

  12. MGET key1 key2 …:获取多个 key 的值。

  13. STRLEN key:返回指定 key 值的字符串长度。

 哈希操作命令:

  1. HSET key field value:设置哈希类型中指定 key 的 field 域的值为给定的 value。

  2. HGET key field:获取哈希类型中指定 key 的 field 域的值。

  3. HDEL key field1 field2 …:删除哈希类型中指定 key 的一个或多个 field 域。

  4. HEXISTS key field:检查哈希类型中指定 key 是否存在指定的 field 域。

  5. HGETALL key:获取哈希类型中指定 key 的所有 field 和 value。

  6. HKEYS key:获取哈希类型中指定 key 的所有 field。

  7. HVALS key:获取哈希类型中指定 key 的所有 value。

  8. HINCRBY key field increment:将哈希类型中指定 key 的 field 域的值增加指定的 increment 值。

  9. HMSET key field1 value1 field2 value2 …:设置哈希类型中指定 key 的多个 field 和 value。

  10. HMGET key field1 field2 …:获取哈希类型中指定 key 的多个 field 的值。

  11. HLEN key:获取哈希类型中指定 key 的 field 数量。

  12. HSTRLEN key field:获取哈希类型中指定 key 的 field 域的字符串长度。

列表操作命令:

  1. LPUSH key value1 [value2 …]:将一个或多个值插入到列表的左侧(头部)。

  2. RPUSH key value1 [value2 …]:将一个或多个值插入到列表的右侧(尾部)。

  3. LPOP key:获取并删除列表左侧的第一个元素。

  4. RPOP key:获取并删除列表右侧的第一个元素。

  5. LLEN key:获取列表的长度。

  6. LRANGE key start stop:获取指定范围内的元素,包括 start 和 stop,索引从0开始。

  7. LINDEX key index:获取列表中指定索引位置的元素。

  8. LSET key index value:设置列表中指定索引位置的元素值。

  9. LREM key count value:从列表中删除指定个数的元素。

  10. LTRIM key start stop:修剪(按照索引范围)列表,只保留指定范围内的元素。

  11. RPOPLPUSH source destination:从源列表右侧弹出最后一个元素,并将其插入目标列表的左侧。

  12. BLPOP key1 [key2 …] timeout:从左侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。

  13. BRPOP key1 [key2 …] timeout:从右侧阻塞地弹出一个或多个列表的元素,如果列表是空的,则会阻塞直到有元素可用或者超过超时时间。

集合操作命令:

  1. SADD key member1 [member2 …]:向集合中添加一个或多个成员。

  2. SMEMBERS key:获取集合中的所有成员。

  3. SISMEMBER key member:判断指定成员是否存在于集合中。

  4. SCARD key:获取集合中的成员数量。

  5. SREM key member1 [member2 …]:移除集合中的一个或多个成员。

  6. SRANDMEMBER key [count]:从集合中随机获取一个或多个成员。

  7. SPOP key [count]:随机移除并返回集合中的一个或多个成员。

  8. SMOVE source destination member:将指定成员从一个集合移动到另一个集合。

  9. SUNION key1 [key2 …]:获取多个集合的并集。

  10. SINTER key1 [key2 …]:获取多个集合的交集。

  11. SDIFF key1 [key2 …]:获取多个集合的差集(属于第一个集合,但不属于其他集合)。

  12. SDIFFSTORE destination key1 [key2 …]:计算多个集合的差集,并将结果存储在指定的目标集合中。

有序集合操作命令:

  1. ZADD key score1 member1 [score2 member2 …]:向有序集合中添加一个或多个成员,并指定对应的分数。

  2. ZRANGE key start stop [WITHSCORES]:按照分数从低到高的顺序,获取有序集合中指定范围内的成员。

  3. ZREVRANGE key start stop [WITHSCORES]:按照分数从高到低的顺序,获取有序集合中指定范围内的成员。

  4. ZRANK key member:获取有序集合中指定成员的排名(按照分数从低到高排序)。

  5. ZREVRANK key member:获取有序集合中指定成员的排名(按照分数从高到低排序)。

  6. ZSCORE key member:获取有序集合中指定成员的分数。

  7. ZCOUNT key min max:获取有序集合中分数范围内的成员数量。

  8. ZREM key member1 [member2 …]:从有序集合中移除一个或多个成员。

  9. ZINCRBY key increment member:将有序集合中指定成员的分数增加指定的增量值。

  10. ZUNIONSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的并集,并将结果存储在指定的目标有序集合中。

  11. ZINTERSTORE destination numkeys key1 [key2 …] [WEIGHTS weight1 [weight2 …]] [AGGREGATE SUM|MIN|MAX]:计算多个有序集合的交集,并将结果存储在指定的目标有序集合中。

通用操作命令:

  1. SET key value:设置指定键的值。

  2. GET key:获取指定键的值。

  3. DEL key1 [key2 …]:删除一个或多个键。

  4. EXISTS key:检查指定键是否存在。

  5. KEYS pattern:查找与指定模式匹配的键集合。

  6. EXPIRE key seconds:设置键的过期时间,单位为秒。

  7. TTL key:获取键的剩余过期时间,单位为秒。

  8. INCR key:将键的值加一。

  9. DECR key:将键的值减一。

  10. INCRBY key increment:将键的值增加指定的增量。

  11. DECRBY key decrement:将键的值减少指定的增量。

  12. APPEND key value:将指定字符串追加到键的值末尾。

  13. HSET key field value:将哈希表中指定字段的值设置为指定值。

  14. HGET key field:获取哈希表中指定字段的值。

  15. HMSET key field1 value1 [field2 value2 …]:设置哈希表中多个字段的值。

  16. HMGET key field1 [field2 …]:获取哈希表中多个字段的值。

  17. HGETALL key:获取哈希表中所有字段和值。

  18. RPUSHX key value:将值插入到列表的右侧(尾部),仅当列表存在时。

  19. LPUSHX key value:将值插入到列表的左侧(头部),仅当列表存在时。

  20. PUBLISH channel message:将消息发布到指定的频道。

总结:

这些数据类型和相关命令使得 Redis 具备了灵活而强大的功能,能够适应各种不同的业务需求。通过合理使用这些数据类型和命令,我们可以实现快速、高效地存储和操作数据。

总之,Redis 提供了丰富的数据类型和功能强大的命令,使得开发人员能够更加灵活地利用 Redis 构建高性能的应用程序。对于需要快速访问和操作数据的场景,Redis 是一个值得考虑的首选存储方案。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

 

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

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

相关文章

并查集维护集合 ac240食物链

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; const int N50010; int p[N],d[N]; int n,m;int find(int x){if(p[x]!x){ int ufind(p[x]);d[x] d[p[x]];p[x]u;}return p[x]; }int main(){scanf("%d%d",&n,&m);fo…

Java设计模式之六大设计原则

为什么要学习设计模式&#xff1f; 要知道设计模式就是软件工程的方法经验的总结&#xff0c;也是可以认为是过去一段时间软件工程的一个最佳实践&#xff0c;要理解&#xff0c;不要死记硬背。掌握这些方法后&#xff0c;可以让你的程序获得以下好处&#xff1a; 代码重用性…

SpringCloud-Hystrix

一、介绍 &#xff08;1&#xff09;避免单个服务出现故障导致整个应用崩溃。 &#xff08;2&#xff09;服务降级&#xff1a;服务超时、服务异常、服务宕机时&#xff0c;执行定义好的方法。&#xff08;做别的&#xff09; &#xff08;3&#xff09;服务熔断&#xff1a;达…

学习记忆——题型篇——写作——记忆宫殿法

1&#xff0e;什么是数字记忆法? 答&#xff1a; 数字记忆就是把每一个数字转换成图片编码后再进行联想速记。 2&#xff0e;数字记忆法的用途有哪些&#xff1f; 答&#xff1a; 可以记忆学科知识&#xff0c;如地理、历史等所有学科或考试中的数据信息&#xff1b;可以速记生…

给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一)

ChuanhuChatGPT 拥有多端、比较好看的Gradio界面&#xff0c;开发比较完整&#xff1b; 刚好讯飞星火非常大气&#xff0c;免费可以领取大概20w&#xff08;&#xff01;&#xff01;&#xff01;&#xff09;的token&#xff0c;这波必须不亏&#xff0c;整上。 重要参考&am…

中断机制-中断协商机制、中断方法

4.1 线程中断机制 4.1.1 从阿里蚂蚁金服面试题讲起 Java.lang.Thread下的三个方法: 4.1.2 什么是中断机制 首先&#xff0c;一个线程不应该由其他线程来强制中断或停止&#xff0c;而是应该由线程自己自行停止&#xff0c;自己来决定自己的命运&#xff0c;所以&#xff0c;…

创意无限,动画随心——Adobe Animate 2024正式发布!

Adobe Animate 2024是一款全新的多平台动画和互动设计工具&#xff0c;它为用户提供了强大的工具和功能&#xff0c;以创造出各种类型的动画作品。无论是短片、广告、游戏还是交互式应用程序&#xff0c;Animate都能够满足您的需求。 Animate 2024的主要特点包括&#xff1a; …

mysql面试题48:MySQL中 Innodb的事务与日志的实现方式

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官: Innodb的事务与日志的实现方式 以下是InnoDB事务和日志的实现方式的详细说明: 事务日志(Transaction Log): InnoDB使用事务日志来保证事务的…

windows TBB的使用

windows TBB的使用 1. Install with GUI 1. Install with GUI To install oneTBB using GUI, complete the following steps: Go to the Download page.Select the preferred installer Online installer has a smaller file size but requires a permanent Internet connec…

计算机网络 | 网络层

计算机网络 | 网络层 计算机网络 | 网络层功能概述SDN&#xff08;Software-Defined Networking&#xff09;路由算法与路由协议IPv4IPv4 分组IPv4 分组的格式IPv4 数据报分片 参考视频&#xff1a;王道计算机考研 计算机网络 参考书&#xff1a;《2022年计算机网络考研复习指…

前端基础一:用Formdata对象来上传图片的原因

最近有人问&#xff1a;你是否能用json来传图片&#xff0c;其实应该这么理解就对了。 一、上传的数据体格式Content-Type 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data 以上三种类型旨在告诉服务器需要接收的数据类型同事要…

企业级CI/CD 持续集成/交付/发布

jenkins 安装与使用 nmcli g hostname jenkins 加载缓存 yum makecache fast 上传jdk11、jdk8 获取、上传war包 1、jenkins.io/download 2.4.27 2、老师发的 上传 maven 上传tomcat软件包 &#xff08;apache.org-tomcat8-下载&#xff09; 注意8009端口 /usr... vi /etc/pro…

「蓝桥·算法双周赛」第一场公开赛

三带一【算法赛】 - 蓝桥云课 (lanqiao.cn) 给定四个字符&#xff0c;判断是否其中有三个相同&#xff0c;另一个与他们不同 #include <bits/stdc.h> void solve() {std::string s;std::cin>>s;char as[0],bs[1],cs[2],ds[3];if(ab&&ac&&a!d) std:…

Puppeteer监听网络请求、爬取网页图片(二)

Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09; Puppeteer监听网络请求、爬取网页图片&#xff08;二&#xff09;一、爬取需求二、实现讲解三、效果查看 一、爬取需求 首先打开浏览器&#xff0c;打开指定网站监听网站发出的所有请求&#xff0c;记录请求&a…

【数据结构】线性表与顺序表

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 线性表与顺序表 1. 线性表2. 顺序表2.1 …

【Java 进阶篇】JavaScript 正则表达式(RegExp)详解

JavaScript 正则表达式&#xff0c;通常简写为 RegExp&#xff0c;是一种强大的文本匹配工具&#xff0c;它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛&#xff0c;不仅限于 JavaScript&#xff0c;在许多编程语言中也都有类似的实现。 …

Spring MVC 十一:@EnableWebMvc

我们从两个角度研究EnableWebMvc&#xff1a; EnableWebMvc的使用EnableWebMvc的底层原理 EnableWebMvc的使用 EnableWebMvc需要和java配置类结合起来才能生效&#xff0c;其实Spring有好多Enablexxxx的注解&#xff0c;其生效方式都一样&#xff0c;通过和Configuration结合…

Hermes - 指尖上的智慧:自定义问答系统的崭新世界

在希腊神话中&#xff0c;有一位智慧与消息的传递者神祇&#xff0c;他就是赫尔墨斯&#xff08;Hermes&#xff09;。赫尔墨斯是奥林匹斯众神中的一员&#xff0c;传说他是乌尔阿努斯&#xff08;Uranus&#xff09;和莫伊拉&#xff08;Maia&#xff09;的儿子&#xff0c;同…

【Java 进阶篇】JavaScript Math对象详解

在JavaScript编程中&#xff0c;Math对象是一个非常有用的工具&#xff0c;用于执行各种数学运算。它提供了许多数学函数和常数&#xff0c;可以用于处理数字、执行几何运算、生成随机数等。在本篇博客中&#xff0c;我们将深入探讨JavaScript中Math对象的各种功能和用法。 什…

城市广告牌安全传感器特点有哪些?

城市广告牌安全传感器特点有哪些&#xff1f; 在现代快节奏的都市生活中&#xff0c;城市的广告牌成为不可或缺的一部分&#xff0c;以各种形式和大小存在于城市的街头巷尾&#xff0c;商业中心和交通要道。广告牌是城市生命线组成的一部分。但是由于天气因素、材料老化、不当维…