Redis数据类型之列表List
list中的命令如下:
- lpush:从左边插入,插入的数据是倒叙
LPUSH key value1 [value2]
将一个或多个值插入到列表头部
lpush k1 a b c d e f ; 输出结果 f e d c b a
lpop k1; 输出 f
从左边pop弹出时先弹出的是f,因为从左边push的时候先放a,然后在a的左边再放b,所以顺序是 f e d c b a,导致从左边弹出的时候先弹出 f ,下面介绍LPOP的命令
这里可以看出来list列表有栈的特性:
先进后出FILO
-
rpush:从尾部添加,正序添加 ,rpush k2 a b c d e f --输出结果 a b c d e f
RPUSH key value1 [value2]
在列表中添加一个或多个值到列表尾部
Rpush k2 a b c d e f ; 输出结果a b c d e f
Lpop k2; 输出 a
这里用到了反向命令,LPOP,没有用到RPOP。这样可以实现队列特性
这里可以看出来list列表有队列的特性:
先进先出FIFO -
LPOP:相当于从左往右开始获取一个元素。既第一个元素
LPOP key
移出并获取列表的第一个元素
因为k1 的顺序是f e d c b a -
RPOP:相当于从右往左开始获取一个元素。既获取最后一个元素
RPOP key
移除列表的最后一个元素,返回值为移除的元素。
因为k2的顺序是 a b c d e f -
lindex:
LINDEX key index
通过索引获取列表中的元素 -
linsert:这里的pivot 不是索引,是列表中元素的值,
LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
pivot 表示列表中的值,不是索引。而且他会从左开始找,找到第一个出现的元素在他后面设置值,因为我用的是after 所以是在a后面
-
Llen
LLEN key
获取列表长度 -
Lrem:count表示移除几个元素,从左往右数出现的count个value移除。
LREM key count value
移除列表元素 -
Lset:给指定位置设置值
LSET key index value
通过索引设置列表元素的值 -
Ltrim:只保留strat-end之间的数,其他全去掉。小于start,大于end的。开区间
LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
从这里可以看出列表list还有数组的特性
-
BLpop:表示没有元素则阻塞等待,有则从左边开始弹出1个。而且他有顺序。比如第一个客户端执行这个命令等待中,第二个客户端也执行同样命令等待中,一旦里面有值,则第一个客户端先弹出,第二个没有任何反应,知道再有一个值进入是,第二个才会弹出
BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 -
BRpop:和上面一样,只不过弹出最后一个
BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
这可以实现一个功能就是消息队列,只不过是单波队列,