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”元素,操作及结果如下图所示:
这一篇博客就暂时写到这里了,下一篇继续解析剩下的两种数据结构,散列和有序集合。