本文已收录于专栏
🍅《Redis从入门到进阶》🍅

专栏前言

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

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一样,效果也一样。
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐