一:Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
List操作,redis中的List在在内存中按照一个name对应一个List来存储。如图:
二:列表常用操作
1)lpush(name,values) 在name对应的list中添加元素,每个新的元素都添加到列表的最左边
2)rpush(name, values) 在name对应的list中添加元素,每个新的元素都添加到列表的最右边
3)lpushx(name,value) 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
4)rpushx(name, value) 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边
5)llen(name) name对应的list元素的个数
6)linsert(name, where, refvalue, value)) 在name对应的列表的某一个值前或后插入一个新值
# 从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
三:示例
[BEGIN] 2017/7/30 20:56:36
127.0.0.1:6379> lpush name "shi"(integer)1
127.0.0.1:6379> lpush name "san"(integer)2
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
127.0.0.1:6379>RPUSH name jun
(integer)3
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "jun"
127.0.0.1:6379>LPUSHX name tianshi
(integer)4
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "jun"
127.0.0.1:6379>LPUSHX name1 tianshi
(integer)0
127.0.0.1:6379>RPUSHX name xiaoliu
(integer)5
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "jun"
5) "xiaoliu"
127.0.0.1:6379>RPUSHX name1 xiaoliu
(integer)0
127.0.0.1:6379>LLEN name1
(integer)0
127.0.0.1:6379>LLEN name
(integer)5
127.0.0.1:6379> LINSERT name after shi 111(integer)6
127.0.0.1:6379> LRANGE name 0 -1
1) "tianshi"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379> lset name 0 222OK127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379>lrem name xiaoliu
(error) ERR wrong number of argumentsfor 'lrem'command127.0.0.1:6379> LREM name xiaoliu 1(error) ERR valueis not an integer or outof range127.0.0.1:6379> LREM name xiaoliu 0(error) ERR valueis not an integer or outof range127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
6) "xiaoliu"
127.0.0.1:6379> LREM name 1xiaoliu
(integer)1
127.0.0.1:6379> LRANGE name 0 -1
1) "222"
2) "san"
3) "shi"
4) "111"
5) "jun"
127.0.0.1:6379>lpop name"222"
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "111"
4) "jun"
127.0.0.1:6379> LINDEX name 2
"111"
127.0.0.1:6379> LTRIM name 0 2OK127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
3) "111"
127.0.0.1:6379> LPUSH name 1aaa
(integer)5
127.0.0.1:6379>LPUSH name1 aaa
(integer)1
127.0.0.1:6379> LRANGE name 0 -1
1) "aaa"
2) "1"
3) "san"
4) "shi"
5) "111"
127.0.0.1:6379>RPOPLPUSH name name1"111"
127.0.0.1:6379> LRANGE name1 0 -1
1) "111"
2) "aaa"
127.0.0.1:6379>BLPOP name name1
(error) ERR timeoutis not an integer or outof range127.0.0.1:6379> BLPOP name name1 1
1) "name"
2) "aaa"
127.0.0.1:6379> LRANGE name 0 -1
1) "1"
2) "san"
3) "shi"
127.0.0.1:6379> LRANGE name1 0 -1
1) "111"
2) "aaa"
127.0.0.1:6379> BLPOP name name1 1
1) "name"
2) "1"
127.0.0.1:6379> BLPOP name1 name 1
1) "name1"
2) "111"
127.0.0.1:6379> LRANGE name 0 -1
1) "san"
2) "shi"
127.0.0.1:6379> LRANGE name1 0 -1
1) "aaa"
127.0.0.1:6379> BRPOPLPUSH name1 name 0
"aaa"
127.0.0.1:6379> BRPOPLPUSH name1 name 0 这里没有name1中没有数据的时候就会阻塞,直到有结果过来
"222" 通过下面窗口发一条数据过来(70.24s)
给nam1发送一个结果222
[root@localhost ~]# redis-cli127.0.0.1:6379> RPUSH name1 222(integer)1
127.0.0.1:6379>