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}'