当前位置: 首页 > news >正文

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

前言:

        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

 

相关文章:

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

前言: Redis是一种快速、高效的开源内存数据库,被广泛用于构建各种类型的应用程序。其被设计成支持多种数据类型,这使得Redis在处理各种场景的数据存储和操作中非常灵活。Redis的数据类型提供了对不同数据结构的直接支持,包括字符…...

数据结构 - 3(链表12000字详解)

一:LinkedList的使用 1.1 ArrayList的缺陷 上篇文章我们已经基本熟悉了ArrayList的使用,并且进行了简单模拟实现。由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移&am…...

Jmeter性能测试插件jpgc的安装

一、获取插件包 1.访问官网获取 官网地址: 2.百度网盘下载 链接:百度网盘 请输入提取码 提取码:blmn 二、安装路径 将下载到的plugins-manager.jar插件存放到%JMETER_HOME%/lib/ext目录下 ​ 三、安装插件 1.重启Jmeter 如果已启动了…...

关于safari浏览器浏览html video标签无法正常播放的问题

问题: 前端demo使用一个video标签包含一个非静态资源的mp4文件。在chrome浏览器下可以正常展示,但是safari却不可以。 原因: 1. mp4文件必须用ffmpeg合成的,其他压缩的mp4文件是不可能展示的。请确定mp4文件并用正常的ffmpeg进…...

【C++代码】最大二叉树,合并二叉树,二叉搜索树中的搜索,验证二叉搜索树--代码随想录

题目:最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 …...

母婴用品会员商城小程序的作用是什么

随着政策放松,母婴行业相比以前迎来了更高的发展空间,由于可以与多个行业连接,因此市场规模也是连年上升,母婴用品是行业重要的分支,近些年从业商家连年增加,但在实际经营中,商家所遇经营痛点也…...

c++初阶--内存管理

目录 c/c 内存分布c内存管理方式new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete的实现原理内置类型自定义类型 malloc/free和new/delete的区别内存泄露什么是内存泄漏,内存泄露的危害如何避免内存泄漏 在c语言中我…...

Burstormer论文阅读笔记

这是CVPR2023的一篇连拍图像修复和增强的论文,一作是阿联酋的默罕默德 本 扎耶得人工智能大学,二作是旷视科技。这些作者和CVPR2022的一篇BIPNet,同样是做连拍图像修复和增强的,是同一批。也就是说同一个方向,22年中了…...

Apifox 学习笔记 - 前置操作之:动态更新请求体中的时间戳

Apifox 学习笔记 - 前置操作之:动态更新请求体中的时间戳 1. 在前置操作中添加一个:自定义脚本或公共脚本2. 定义我们所需的环境变量。3. 在请求参数中使用【时间戳】4. 检验参考资料 1. 在前置操作中添加一个:自定义脚本或公共脚本 2. 定义我…...

2023年9月 青少年软件编程等级考试Scratch二级真题

202309 青少年软件编程等级考试Scratch二级真题(电子学会等级考试) 试卷总分数:100分 试卷及格分:60 分 考试时长:60 分钟 第 1 题 点击绿旗,运行程序后,舞台上的图形是?( ) A:画…...

12.验证码以及付费代理

文章目录 一、验证码的处理1、验证码概述1、2 什么是图片验证码?1、2 验证码的作用1、3 图片验证码使用场景1、4 图片验证码的处理方案 2、图片在网页页面中的形式2、1 如何进行图片形式的转化 3、打码平台 二、代理的使用2、1 付费代理2、1、1 找付费代理服务站点2…...

使用Plotly可视化

显示项目受欢迎程度 改进图表 设置颜色,字体...

【C语言】结构体、位段、枚举、联合(共用体)

结构体 结构:一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量; 结构体声明:struct是结构体关键字,结构体声明不能省略struct; 匿名结构体:只能在声明结构体的时候声…...

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用

涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论,旨在帮助学员深入理解科学原理。结合Python编程工具,专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题&#xf…...

Excel 转为 PDF,PNG,HTML等文件

1.安装 Spire.XLS for Java,下载jar包 下载地址 2.引入方式一&#xff08;我这里这种方式一直无法引入&#xff0c;都是失败&#xff0c;所以用的方式二&#xff09; <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</na…...

docker中使用GPU+rocksdb

配置环境 delldell-Precision-3630-Tower  ~  lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focaldelldell-Precision-3630-Tower  ~  nvcc --version nvcc: NVIDIA (R) Cuda comp…...

好用的跨平台同步笔记工具,手机和电脑可同步的笔记工具

在这个快节奏的工作环境中&#xff0c;每个人都在寻找一种方便又高效的方式来记录工作笔记。记录工作笔记可以帮助大家统计工作进展&#xff0c;了解工作进程&#xff0c;而如果工作中常在一个地方办公&#xff0c;直接选择电脑或者手机中笔记工具来记录即可&#xff0c;但是对…...

【Python 千题 —— 基础篇】浮点数转换为整数

题目描述 题目描述 整数转换为浮点数。 输入描述 输入一个整数。 输出描述 程序将整数转换为浮点数并输出。 示例 示例 ① 2输出&#xff1a; 2.0代码讲解 下面是本题的代码&#xff1a; # 描述: 整数转换为浮点数。 # 输入: 输入一个整数。 # 输出: 程序将整数转换…...

金融科技论文D部分

总结 以每周为例&#xff0c; 动量因子定义每种货币为前一周的回报率 价值因子定义为当前市值与其区块链中过去 7 天平均链上交易价值 利差因子定义为前 7 天硬币发行总量的负数除以在7天期限开始时未偿还的硬币量。 因素定义 为了避免过拟合&#xff0c;我们试图定义每一…...

Apache Tomcat下载安装配置使用超详细

下载安装 tomcat官网 在此我们以Tomcat 9.0.81为例&#xff0c;点击下载压缩包&#xff0c;解压到自己的文件夹。 tar.gz是linux操作系统下的安装版本。zip是windows系统下的压缩版本。Windows Service Installer是windows操作系统下的exe安装版本。 检查是否配置JDK 1.…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...