redis数据类型List命令

redis list介绍

列表类型(list)可以存储一个有序的字符串列表,
常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,
所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。
这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

向列表两端增加元素

LPUSH key value [value …] 向列表左边增加元素

127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3

RPUSH key value [value …] 向列表右边增加元素

127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

查看列表

LRANGE命令是列表类型最常用的命令之一,
获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),
索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。

LRANGE key start stop

127.0.0.1:6379> lrange list:1 0 2
1) "2"
2) "1"
3) "4"

从列表两端弹出元素

LPOP命令从列表左边弹出一个元素,会分两步完成:
第一步是将列表左边的元素从列表中移除
第二步是返回被移除的元素值。

LPOP key

RPOP key

127.0.0.1:6379> lpop list:1
"3“
127.0.0.1:6379> rpop list:1
"6“

获取列表中元素的个数

127.0.0.1:6379> llen list:1
(integer) 2

删除列表中指定的值

LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同: 
当count>0时, LREM会从列表左边开始删除。 
当count<0时, LREM会从列表后边开始删除。 
当count=0时, LREM删除所有值为value的元素。 

语法:LREM key count value

获得/设置指定索引的元素值

LINDEX key index 获得指定索引的元素值

127.0.0.1:6379> lindex l:list 2
"1"

LSET key index value 设置指定索引的元素值

127.0.0.1:6379> lset l:list 2 2
OK
127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "2"
4) "2"

只保留列表指定片段

LTRIM key start stop 指定范围和LRANGE一致

127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "0"
4) "2"
127.0.0.1:6379> ltrim l:list 0 2
OK
127.0.0.1:6379> lrange l:list 0 -1
1) "6"
2) "5"
3) "0"

向列表中插入元素

该命令首先会在列表中从左到右查找值为pivot的元素,
然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

LINSERT key BEFORE|AFTER pivot value

127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> linsert list after 3 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "4"
3) "2"
4) "1"

将元素从一个列表转移到另一个列表中

RPOPLPUSH source destination

127.0.0.1:6379> rpoplpush list newlist 
"1"
127.0.0.1:6379> lrange newlist 0 -1
1) "1"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "4"
3) "2"

List应用

商品评论列表

在Redis中创建商品评论列表
用户发布商品评论,将评论信息转成json存储到list中。
用户在页面查询评论列表,从redis中取出json数据展示到页面。

商品编号为1001的商品评论key【items: comment:1001】

192.168.101.3:7001> LPUSH items:comment:1001 '{"id":1,"name":"商品不错,很好!!","date":1430295077289}'