Redis_02_初始Redis列表和集合

1、前情提要

在上一篇博客中,大概的讲了怎么样安装Redis和简单的使用Redis中的字符串数据结构,但是Redis中的数据结构一共有五种呢,这一篇博客将大概描述剩下的四种数据结构。

2、初识列表

2.1、理论

列表又是怎么样的呢?Redis是一种key-value存储形式的数据库,那Redis中的列表自然逃不出这种形式,如果把上一篇的字符串的key与value对应关系理解为一对一的话,那列表可以理解为一对多,通俗的话来说就是一个列表有一个名字,这个名字就是key,通过这个key我们就可以找到这个列表。

Redis中的列表有很多的特点,比如把列表想象为一个c语言中链表,特点之一就是可以向头插入数据,也可以在尾部插入数据(在下边为了方便以左代替头,以右代替尾),通过这种方式插入数据(相同的元素可以在列表中重复出现)的同时,还可以在左边弹(取)出数据和弹(取)出右边的数据,除了这些还有给定index(下标)获得该index所对应的元素,还可以获取盖顶范围内的所有元素等等,下表列举了一些常用的命令信息(注意:从列表中弹出的元素价格不再存在于列表中):

命令 作用 返回值
LPUSH 将给定值压入列表的左边 返回插入元素后的列表的长度
RPUSH 将给定值压入列表的右边 返回插入元素后的列表的长度
LPOP 从列表的左边弹出元素  
RPOP 从列表的右边弹出元素  
LINDEX 获取列表在给定位置的单个元素 单个元素值
LRANGE 获取列表在给定范围内的所有值 所有包含的元素

2.2、实践

(1)、首先需要打开Redis的服务端,然后新打开一个cmd窗口进入交互模式

(2)、首先介绍RPUSH与LPUSH两个命令

a、在key为myList的列表中向右插入“one”,“two”,“three”三个元素,操作及结果如下图所示:

b、在key为myList的列表中向左插入“four”,“five”,“six”三个元素,操作及结果如下图所示:

(3)、到这一步我猜列表(这这里使用python中列表表示Redis中列表,不代表两者等同)中元素的排列是:[six, five, four, one, two, three],怎么查看呢?看下面!

(4)、这里将首先介绍LRANGE和LINDEX命令来查看列表中的内容

a、首先使用“lrange myList 0 -1”就可以查看列表中的所有内容了,操作及结果如下图所示:

b、使用LINDEX命令查看index为4的元素,操作及结果如下图所示:

我的天,index为4的元素明明是“one”,怎么输出的会是“two”呢?其实Redis中index的排列是从0开始的,不是我们现如为主认为的1,输出为了方便我们查看,所以将index都加了1,也就是从1开始排列了,但在实际中是从0开始的。

(5)、LRANGE命令中表示范围的两个参数解析

可能很多人不知道为什么LRANGE命令中使用0和-1两个数字就可以查看整个列表了,为了方标描述,我们把确定范围的两个数字中的第一个数字的位置称为L位,第二个数字的位置称为R位,在这里可以提一下python中切片的概念,其实两者都差不多。我们先来观察整个列表,从左到右,我们一共插入了六个数字,它们对应index排列是0-5,但是我们插入了我们不知道个数的元素,我们想直接就知道最后一个元素是什么的情况下怎么办呢?于是我们就使用-1表示最后一个元素的另一种“index”(倒数第一嘛),也就是我们只需要在需要的地方输入-1就可以得到最后一个元素的值,那倒数第二个元素我们就设置为-2,依此类推,所以如果得到的数字是一个非负数,那么就从列表的左边开始找,如果是一个负数,就从列表的右边开始找,所以“lrange myList 0 -1”就可以得到整个列表的值。

c、使用LRANGE的命令得到2-5的值,操作及结果如下图所示:

d、使用LRANGE命令得到(-4)-(-2)的值,操作及结果如下如图所示:

e、使用LRANGE命令试着查询(-2)-(-4)的值,操作及结果如下图所示:

为什么会得到一个空集合呢?说实话我也不知道,再试试LRANGE命令查询4-2的值,操作及结果如下图所示:

具体的我也说不清,留下一个悬念给大家自己慢慢体会,有知道的大佬可以说一下,解解小弟的迷惑,,

(6)、现在谈谈最后两个命令:LPOP和RPOP命令

f、使用LPOP命令弹出列表左边的元素然后使用LRANGE命令查看整个列表元素,操作及结果如下图所示:

g、使用RPOP命令弹出列表右边的元素然后使用LRANGE命令查看整个列表的元素,操作及结果如下图所示:

(7)、结果分析

弹出来的元素在列表中被删除了

3.、初识集合

3.1、理论

集合和列表一样,都是用来存储多个元素的存储结构,key与value的关系都是一对多,但是集合比起列表不同点在于集合中不能出现重复的元素,列表中是可以的,由于集合是使用无序方式存储元素的,所以用户不能像列表那样,将元素存入某一端或从某一端取出,常用命令如下表所示:

命令 功能 返回值
SADD 将元素添加到集合中 返回添加了元素后元素个数
SREM 从集合中移除元素 返回移除元素的个数
SISMEMBER 判断指定元素是否存在于指定集合中 存在返回1,不存在返回0
SMEMBERS 获取集合中的所有元素 返回所有的元素

3.2、实践

a、使用SADD命令将“one”,“two”,“three”,“four”,“five”,“six”添加到key为mySet的集合中,操作及结果如下图所示:

b、使用SMEMBERS得到集合中的所有元素,操作及结果如下图所示:

c、使用SISMEMBER命令判断“five”在不在集合中,操作及结果如下图所示:

d、使用SISMEMBER命令判断“ten”在不在集合中,操作及结果如下图所示:

e、使用SREM命令移除集合中的“four”元素,操作及结果如下图所示:

这一篇博客就暂时写到这里了,下一篇继续解析剩下的两种数据结构,散列和有序集合。

猜你喜欢

转载自blog.csdn.net/qq_36418362/article/details/89047096
今日推荐