【Redis从入门到进阶】第 1 讲:Redis的五大基本数据类型

news2025/1/12 10:03:16
本文已收录于专栏
🍅《Redis从入门到进阶》🍅

专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习Redis,同时也是为了记录我自己学习Redis的过程,将会从基础的数据类型开始记录,直到一些更多的应用,如缓存击穿还有分布式锁等。希望大家有问题也可以一起沟通,欢迎一起学习,对于专栏内容有错还望您可以及时指点,非常感谢大家 🌹。

学习指引

  • 专栏前言
  • 1.Redis的五大基本类型
  • 2.String (字符串)
    • 2.1 set和get
    • 2.2 mset和mget
    • 1.3 incr
    • 1.4 incrby
    • 1.5 incrbyfloat
    • 1.6 setnx
    • 1.7setex
  • 2. Hash (哈希)
    • 2.1 hset和hget
    • 2.2 hmget
    • 2.2 hgetall、hkeys、hvals
    • 2.3 hincrby
    • 2.4 hsetnx
  • 3.List
    • 3.1 lpush
    • 3.2 lpop
    • 3.3 rpush、rpop
    • 3.4 lrange
    • 3.5 blpop、brpop
  • 4.Set
    • 4.1 sadd
    • 4.2 srem
    • 4.3 scard
    • 4.4 sismember
    • 4.5 smembers
    • 4.6 sinter、sdiff、sunion
  • 5.sortedset
    • 5.1 zadd
    • 5.2 zrem
    • 5.3 zscore
    • 5.4 zrank
    • 5.5 zcard
    • 5.6 zcount
    • 5.7 zincrby
    • 5.8 zrange
    • 5.9 zdiff、zinter、zunion

1.Redis的五大基本类型

   Redis给我们提供了五大基本数据类型使用,分别是Stringhashlistzset。它们分别代表字符串、哈希、列表、有序集合,文章主要介绍它们的使用场景和基础的使用命令。

2.String (字符串)

  String类型是Redis用的最多的类型,我们都知道Redis是一个key-value结构的数据库,一个key只能对应一个value,虽然是字符串类型,但它也可以存储数字和浮点数,可以进行自增自减操作。String类型还是一个二进制安全的数据类型,意思是它可以存储任何数据,比如图片等等。它的值能存储的最大限度是512MB。下面我们来看看它的基础操作常见操作有哪些

2.1 set和get

  顾名思义,set就是存储操作,get就是获取操作,如图我们输入指令
help get/set可以看到它的使用详情:
在这里插入图片描述
在这里插入图片描述

在这我们存入一个keyname,valueJack的值,得到返回值为OK
在这里插入图片描述
然后我们通过get去获取这个值也能获取成功:

在这里插入图片描述
当然set的作用不仅是存储,如果redis中已经存在该key的值,我们会覆盖掉它,比如我们现在再次存储一个keyname的值,再获取它,可以发现name的值已经被修改。
在这里插入图片描述

2.2 mset和mget

  这两个操作和上面是类似的,不过是可以同时进行批量操作,同时插入多个数据或者同时获取多个数据。看看help指令:
在这里插入图片描述
我们插入使用mset同时插入三条数据,然后使用mget去尝试获取:
在这里插入图片描述

1.3 incr

   incr的作用比较简单,可以让一个整型的key自增 1 ,如果这个key不存在,则我们会自动生成,我们来看看help指令:
在这里插入图片描述
我们先自增一个不存在的数,然后再自增一遍查看一下值:

在这里插入图片描述
从返回值来看,我们就可以发现它的作用是自增1。

1.4 incrby

  它的作用同incr,只不过incrby我们可以指定它自增多少,我们来看看help指令:
在这里插入图片描述
我们直接对上面使用的num变量操作并通过返回值来查看它的值:
在这里插入图片描述

1.5 incrbyfloat

  从它的名字来看,就知道它是操作浮点数类型的,不过在redis中浮点数也是用字符串来表示的,我们看看help指令:
在这里插入图片描述
再看看简单的演示效果:
在这里插入图片描述

1.6 setnx

  这个指令也是插入数据的,不过它set插入的差距在于它插入的数据必须是redis中不存在的,否则它不执行,也就是它说它不会覆盖原数据。

在这里插入图片描述
我们连续插入两次,从返回值来看就可以知道插入成功还是失败,1true0flase,最后get获取值也发现x并未改变。
在这里插入图片描述

1.7setex

  这个指令也是插入数据,不过我们可以指定这个数据的有效期,也就是可以给它设置一个过期时间,这个操作在redis中还是很常见的。
在这里插入图片描述
这里我们插入一个数据并指定它的过期时间,然后我们可以通过TTL指令查看其剩余时间:
在这里插入图片描述
可以发现插入了一个时间为keytime且存活时间为1000秒的数据,TTL查询时还剩994秒。

2. Hash (哈希)

  Redis中的hash是一个键值对集合,它可以存储多个键值对,因此我们一般使用它来存储对象,它与Java中的Map<String,Object>类似。我们直接通过命令学习就可以感受到它的作用。

2.1 hset和hget

  作用同set,但是一个hash对象可能有多个属性,所以我们还需要指定我们插入或者修改的是哪个属性,我们来查看它的help使用命令,可以发现它可以同时直接插入多条field-value,这是因为redis4.0之后就实现了这个功能,hmset被弃用了,所以大家熟练使用hset即可。当hget指令从help指令看来,每次我们只能查询hash的某一个属性。
在这里插入图片描述
在这里插入图片描述

插入数据:
在这里插入图片描述
使用hget查询单个属性
在这里插入图片描述

2.2 hmget

  使用hmget就可以同时获取hash的多个属性,我们来看看help指令教学:
在这里插入图片描述

获取前面插入的数据:
在这里插入图片描述
redis可视化来看查询无问题:
在这里插入图片描述

2.2 hgetall、hkeys、hvals

  使用hgetall就可以直接获取一个hash的全部属性和值,不然属性过多时我们不可能使用hmget去获取,而hkeys则是获取hash的全部属性,hvals则是获取全部的值,我们来看help指令:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行使用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 hincrby

  hincrby 也是起自增效果的,可能指定增长的步长,我们看看help指令。
在这里插入图片描述

我们使用它对上面的插入数据的年龄进行自增10的操作,返回值看出来没什么问题
在这里插入图片描述

但如果我们对非整型的属性进行自增会怎样呢?
它会报错告诉我们这个值非整型

在这里插入图片描述

2.4 hsetnx

  hsetnx的效果也是插入数据,同理它也只会插入hash里不存在的key,如果已经存在它将会插入失败。我们来看看help指令:
在这里插入图片描述
我们首先插入一个已经存在的属性,返回值为0说明插入失败。
在这里插入图片描述
这时我们再插入一个不存在的属性性别,返回值为1说明插入成功。
在这里插入图片描述

3.List

  学过Java应该都对这个接口很熟悉,它的作用也和LinkedList类型,可以看成是一个双向链表的结构,支持头尾操作以及正向检索和反向检索。我们来学习一下它的常见指令

3.1 lpush

  push就是加入的意思,那么lpush就是从左边加入数据,也可以看成在链表头加入数据,可以插入一条也可以插入多条。我们来看看help指令:

在这里插入图片描述
我们使用lpush插入三条数据
在这里插入图片描述
我们通过redis可视化来查看数据,可以发现从上到下的顺序是321,和我们插入的顺序相反,这也证实了我们是从左往右插入的
在这里插入图片描述

3.2 lpop

  pop操作顾名思义,就是弹出的操作,所以lpop会从左边弹出第一个元素,如果没有元素则会返回一个null值,我们来看help指令操作:
在这里插入图片描述

我们来将刚才插入的元素逐渐弹出来看看弹出的元素顺序以及list为空时使用lpop的效果。
在这里插入图片描述

3.3 rpush、rpop

  这两个对应效果和lpush以及lpop是一样的,只不过改成了从右边插入,其余效果都是一样的,所以我们一起进行演示,来看看help指令:
在这里插入图片描述
来看看插入效果
在这里插入图片描述

3.4 lrange

  lrang是查询一段区间内的所有数,我们来看看使用的help指令:
在这里插入图片描述
此时我们查询的list内的元素为:
在这里插入图片描述
来进行查询操作,发现查询 [ 1 , 3 ] [1,3] [1,3]时输出的是5,4,3,而查询 [ 0 , 3 ] [0,3] [0,3]时输出的是6,5,4,3,说明我们的list也是从左往右下标从0开始的。
在这里插入图片描述

3.5 blpop、brpop

  从名字上来看,它们也是输出弹出元素的操作,但不同于lpoprpop两个在使用时如果list为空会立马返回null值。我们可以给blpopbrpop指定一个等待时间,它们会进行阻塞,虽然此时可能不存在元素,但在阻塞等待的时间内如果进入了元素,将会被弹出,我们来看看help指令:
在这里插入图片描述
在这里插入图片描述

当我们执行改blpop操作时,发现进入阻塞等待状态,此时我们开多一个xshell连接,去给list加入一个数据。当我们操作完成以后,回头看此时的阻塞状态已经结束,输出了我们的list以及弹出的数据还有阻塞时间。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

为什么还会输出我们弹出的是哪个队列呢?其实从上面的help指令能看出,blpop可以同时指定多个等待的list,哪个可以弹出我们就会输出哪个。比如我们下图同时等待三个空的list集合,当给list2加入元素后,就会弹出12,并输出我们弹出的是list2这个集合,以及等待了36.16s
在这里插入图片描述
在这里插入图片描述

4.Set

  Redis中的set其实同Java中的HashSet类型,可以看做是一个valuenullhashmap,因为是哈希表,所以其特性与HashSet类似:

  • 无序
  • 元素不可重复
  • 查找效率高
  • 支持交集、并集、差集等功能

4.1 sadd

  作用就是向一个set中同时添加一个或多个元素,当然元素不可重复,来查看help指令:
在这里插入图片描述
我们来插入多个元素,并插入一些重复的来看看效果,从返回值为5就可以看出我们成功插入的元素只有5个,可视化表也看出来不存在重复元素。
在这里插入图片描述
在这里插入图片描述

4.2 srem

  srem的作用是删除set中指定的元素,可以同时删除多个元素,我们来看看help的指令:
在这里插入图片描述
我们来进行使用,从返回值来看知道成功删除的元素只有两个1,3,因为6,7并不存在与set中。
在这里插入图片描述

4.3 scard

   使用比较简单,就是返回set中的元素个数,我们来查看一下help然后再演示一下使用:
在这里插入图片描述
在这里插入图片描述

4.4 sismember

   用于判断set中是否存在某个数,和hashetcontains函数是一样的效果,我们来看看help指令该怎么使用
在这里插入图片描述

由于前面删除了1,3,此时set中只剩下了
在这里插入图片描述
我们来使用sismember演示一下查询,存在则返回1,否则返回0
在这里插入图片描述

4.5 smembers

   作用比较简单,获取set中的全部元素,来查看help指令
在这里插入图片描述
进行查询使用

在这里插入图片描述

4.6 sinter、sdiff、sunion

  这三个运算是一个二元的运算,也就是同时需要两个set,它们的功能分别是sinter是获取两个set交集sdiff是获取两个set集,sunion是获取两个set并集。来查看help指令:
在这里插入图片描述
准备好两个set存储的元素分别如下:
在这里插入图片描述
在这里插入图片描述
首先使用sinter获取交集:
在这里插入图片描述
使用sdiff获取差集
在这里插入图片描述
使用sunion获取并集
在这里插入图片描述

5.sortedset

  Redis中的sortedset和Java中sortedset也是类似的,是一个有序的不可重复的集合,本质就是在set的基础上增加了有序的特点。它是如何达到有序的功能呢?它是在set的基础上关联上一个粉丝score,然后sortedset会根据这个分数来进行排序,如果分数相同时,则按照存储数据的字典序来进行排序,也就是说sortedset存储的元素不允许重复,但分数允许相同。

5.1 zadd

  zadd是的作用是添加一个或多个元素到sortedset,如果已经存在的我们则更新其score值。我们来看其help指令:
在这里插入图片描述

我们假设一个场景,存在各个成员的考试成绩,这样score就说大家的分数:
在这里插入图片描述
我们此时可以对Jack进行分数更新
在这里插入图片描述
此时再看他们的排名:
在这里插入图片描述

5.2 zrem

  zrem是删除sortedset的一个指定元素,我们来查看help指令
在这里插入图片描述

我们来尝试删除Jack,返回值为1说明删除成功。删除一个不存在的属性时返回值为0
在这里插入图片描述

5.3 zscore

  zscore是获取指定元素的score值,查看help指令:
在这里插入图片描述
我们来使用它获取分数,如果获取的属性不存在则会返回null值。
在这里插入图片描述

5.4 zrank

  zrank是获取某个元素的排名,我们查看help指令:
在这里插入图片描述
我们通过它获取排名,可以看出排名是从0开始,如果不存在的属性则返回null
在这里插入图片描述

5.5 zcard

  作用是获取sortedset的元素个数,查看help指令:
在这里插入图片描述

使用进行查询
在这里插入图片描述

5.6 zcount

  zcount的作用是获取一段分数区间的元素个数,我们查看help指令:
在这里插入图片描述

查询 [ 70 , 90 ] [70,90] [70,90]分数区间,返回值为3,说明查询的区间是闭区间。
在这里插入图片描述
在这里插入图片描述

5.7 zincrby

  作用是让指定元素的score自增,可以指定增长的步长,查看help指令:

在这里插入图片描述
我们让tom的分数增加,返回了增加后的分数为100

在这里插入图片描述

5.8 zrange

  作用是获取指定排名区间的所有元素,我们来查看help指令:
在这里插入图片描述
使用进行查询,下标从0开始:
在这里插入图片描述

5.9 zdiff、zinter、zunion

这个用法同set一样,效果也一样。
在这里插入图片描述

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

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

相关文章

《十八》JS 中的错误处理

error 对象&#xff1a; error 对象是当错误发生时提供错误信息的 JS 内置对象。 当错误发生时&#xff0c;浏览器会生成 error 对象并抛出&#xff0c;并且中断后面代码的执行。 console.log(person.name) console.log(不会被执行到)也可以通过 Error() 构造函数自定义 err…

使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)

文章目录前言一、数据预处理1.分类数据存放2.生成train.txt与val.txt二、更改配置文件1.自定义修改三、定义resnet网络四、train.py训练五、预测predict.py实现六、预测结果七、完整项目代码数据集(大于1500张)总结前言 本打算昨天写这篇博客的&#xff0c;推迟到今天晚上。实…

章节3 配置CentOS

3.1-什么是虚拟机 什么是虚拟机&#xff1f; Virtual Machine&#xff0c;虚拟软件/平台虚拟出来的操作系统。 虚拟机/物理机 虚拟化技术 虚拟化软件&#xff1a;VMware Workstation、VirtualBox、Virtual PC、Citrix Xen Desktop、Parallels Desktop&#xff08;MacOS&am…

刷题日记【第十五篇】-笔试必刷题【有假币+求正数数组的最小不可组成和+最难的问题+因子个数】

1.实例方法需要通过super来调用超类中的实例方法&#xff1b;实例方法需要通过类名称来调用超类的类方法&#xff1b;实例方法需要向下转型才能调用子类的实例方法&#xff1b;实例方法可以直接调用本类的实例方法。 2.HashSet子类依靠【hashCode();equals()】方法区分重复元素…

2.6 场效应管放大电路

一、场效应管放大电路的三种接法 场效应管的源极、栅极和漏极与晶体管的发射极、基极和集电极相对应&#xff0c;因此在组成放大电路时也有三种接法&#xff0c;即共源放大电路、共漏放大电路和共栅放大电路。以 NNN 沟道结型场效应管为例&#xff0c;三种接法的交流通路如图2…

Python 3.11 有什么新功能?

详细概述Python 3.11中最重要功能&#xff0c;包括如何安装 beta 版本以及何时可以获得官方稳定版本。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 Python在过…

【毕业设计】24-基于单片机的电子显示屏的设计与应用(原理图+源码+仿真工程+论文+答辩PPT)

【毕业设计】24-基于单片机的电子显示屏的设计与应用&#xff08;原理图源码仿真工程论文答辩PPT&#xff09; 文章目录资料下载链接任务书设计说明书摘要设计框架架构设计说明书及设计文件源码展示资料下载链接 资料下载链接 资料链接&#xff1a;https://www.cirmall.com/ci…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.13 ES 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.13 ES 下载与安装4.13.1 下载4.13.2 安装4.13.3 使…

网页设计作业学生网页课程设计作业成品DIV+CSS-关于家乡的HTML网页设计

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业&#xff0c;游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和cs…

卷积神经网络总结

卷积操作特征图大小计算 图中蓝色部分为55大小的输入卷积层的特征图&#xff0c;黄色部分 为33大小的卷积核&#xff0c;其内部黑色数字为卷积核权重参数&#xff0c;经过卷积操作以后得 到右侧绿色33大小的输出特征图。 如果使用input_N表示输入图像的大小&#xff0c;n表示参…

DJYOS驱动开发系列二:基于DJYOS的IIC驱动编写指导手册

1.概述 DJYOS的DjyBus总线模型为IIC、SPI之类的器件提供统一的访问接口&#xff0c;IICBUS模块是DjyBus模块的一个子模块&#xff0c;为IIC器件提供统一的编程接口&#xff0c;实现通信协议层与器件层的分离。也标准化了IIC总线和 Device驱动接口&#xff0c;本手册指导驱动工…

树与二叉树(二)

**&#x1f6c0; ♡ ♢ ♤ ♧ ♣ ♦ ♥ ♠&#x1f6c0;** &#x1f4a5;**欢迎来到半之半的博客**&#xff0c;**这篇文章主要讲述数据结构中非常重要的一块内容&#xff0c; 即树与二叉树&#xff0c;相信大家学完必会加深自己的理解。&#x1f4a5;****&#x1f55d;我是半只…

Android BLE HIDS Data ,从问询DB 到写入Android 节点的flow 之三

问题点5&#xff1a;Android BLE具体连接flow 并问询DB的API flow 之第二阶段问询&#xff1b; 表示第二阶段的log “Start service discovery: srvc_idx ”在Android9没有&#xff0c;但在Android 8.0中有&#xff0c;所以后续截图基于Android8.0。 -->执行API bta_gattc_…

ORB-SLAM2 ---- Initializer::ReconstructH函数

目录 1.函数作用 2.函数解析 2.1 调用函数解析 2.2 Initializer::ReconstructH函数总体思路 2.2.1 代码 2.2.2 总体思路解析 3.Initializer::CheckRT 3.1 函数作用 3.2 构造函数 3.3 代码 3.4 流程解析 3.4.0 初始化参数 3.4.1 计算初始化两帧的投影矩阵 3.…

[计算机毕业设计]基于SM9的密钥交换方案的实现与应用

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

VMware虚拟机安装黑苹果步骤与常见问题,VMware16,MacOS12.01(Moterey)

资源准备&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1JFtpMVrULiky9l3SvCXX-w 提取码&#xff1a;c452 说明&#xff1a; 1.镜像版本10.14和12.01根据需要选择其一即可&#xff0c;10.14的后缀为cdr&#xff0c;12.01的后缀为ISO&#xff0c;这两种文件VMware都支…

排名前十的运动蓝牙耳机品牌,2022年值得推荐的运动耳机

现在越来越多人使用耳机了&#xff0c;无论是在公交上还是地铁上又或者在运动时&#xff0c;都能看见很多人使用耳机。大多数人群都喜欢在运动健身的时候佩戴着耳机听音乐&#xff0c;音乐能让我们释放压力&#xff0c;并且心情也能够得到愉悦&#xff0c;相比传统有线运动耳机…

抖店token的生成和刷新的实际开发笔记

目录 前言 一、获取token准备事宜 第1点&#xff0c;app_key的获取 第2点&#xff0c;获取method 第3点&#xff0c;获取grant_type 二、token的生成使用步骤 1.token的生成的代码逻辑 三、刷新token的准备事宜 1.refresh_token的获取 2.grant_type的获取 四、token的刷…

AIOT在数字化转型中的机遇和挑战

目录 引言 为什么 IOT 要结合 AI 数字化转型机遇 什么是企业数字化转型 AIOT 在数字化转型中的作用 面临的挑战 架构挑战 安全风险 安全挑战分析 常见安全问题 如何应对 产业赋能 问题分析 如何应对 算力建设 总结 引言 传统的安防市场已经逐渐接近业务成长天花…

一棵完全二叉树的第7层(根节点为第0层)有12个叶子节点,求整棵树最多有多少个节点和最少有多少个节点

答案 一棵完全二叉树的第7层&#xff08;根节点为第0层)有12个叶子节点&#xff0c;求整棵树最多有487487487个节点和最少有139139139个节点。 完全二叉树 定义&#xff1a;一棵深度为kkk的有nnn个节点的二叉树&#xff0c;对树中的节点按从上至下、从左到右的顺序进行编号&am…