列表相当于队列
所有的list命令都是以L开头
插入、获取
127.0.0.1:6379> flushall 清空所有
OK
# 依次插入:a b c
127.0.0.1:6379> lpush name a 往列表里面插入值
(integer) 1
127.0.0.1:6379> lpush name b 插入b
(integer) 2
127.0.0.1:6379> lpush name c 插入c
(integer) 3
127.0.0.1:6379> lrange name 0 -1 获取列表全部值
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lrange name 0 1 只获取两位值
1) "c"
2) "b"
当指定获取的值为0到1时得到的却是c和b,
如上所示获取列表里面的值可以发现是从左往右插入值(也就是一直往列表头部插入值)
即插入的真实位置是:c b a 最左边的值为0位
127.0.0.1:6379> lrange name 0 2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush name d 再次插入一个值(这次往右插入)
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
注意此时插入的值在最下面正序排列(也就是往a右边插入值)向尾部插入值
删除值
127.0.0.1:6379> LLEN name 获取整个列表长度
(integer) 4
127.0.0.1:6379> LREM name 0 "a" 移除指定值,0:
(integer) 1
127.0.0.1:6379> lrange name 0 -1 查看a值被删除
1) "c"
2) "b"
3) "d"
127.0.0.1:6379> lpop name 移除头部值(也就是最左边的)
"c"
127.0.0.1:6379> lrange name 0 -1 查看
1) "b"
2) "d"
127.0.0.1:6379> rpop name 移除尾部值(也就是最右边的值)
"d"
127.0.0.1:6379> lrange name 0 -1 查看
1) "b"
可以通过 LREM 命令移除列表中的指定元素:
LREM list count element
count 参数的值决定了 LREM 命令移除元素的方式
(以下演示count的值都为2)
LREM 命令在执行完毕之后将返回被移除的元素数量作为返回值。
127.0.0.1:6379> RPUSH sample1 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
#如果 count 参数的值等于 0
#那么 LREM 命令将移除列表中包含的所有指定元素;
#执行以下命令将移除 sample1 列表包含的所有 "a" 元素:
127.0.0.1:6379> LREM sample1 0 a
(integer) 3
127.0.0.1:6379> lrange sample1 0 -1
1) "b"
2) "b"
3) "c"
4) "c"
#如果 count 参数的值大于 0 ,
#那么 LREM 命令将从列表的左端开始向右进行检查,
#并移除最先发现的 count 个指定元素;
#而执行以下命令将移除 sample2 列表最靠近列表左端的两个 "a" 元素:
127.0.0.1:6379> RPUSH sample2 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
127.0.0.1:6379> LREM sample2 2 a
(integer) 1
(integer) 2
127.0.0.1:6379> lrange sample2 0 -1
1) "b"
2) "b"
3) "c"
4) "c"
5) "a"
#上面的 LREM 命令只要求移除最先发现的两个 "a" 元素
#所以位于列表最右端的 "a" 元素并没有被移除,
如果 count 参数的值小于 0 ,
那么 LREM 命令将从列表的右端开始向左进行检查,
并移除最先发现的 abs(count) 个指定元素(abs(count) 即是 count 的绝对值);
127.0.0.1:6379> RPUSH sample3 "a" "b" "b" "a" "c" "c" "a"
(integer) 7
127.0.0.1:6379> LREM sample3 -2 a
(integer) 2
127.0.0.1:6379> lrange sample3 0 -1
1) "a"
2) "b"
3) "b"
4) "c"
5) "c"
通过下标获取值及截断
lindex通过下标获取值
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush list a b c d
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> lindex list 2
"b"
ltrim截断命令
127.0.0.1:6379> lpush list a b c d
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "d" 3
2) "c" 2
3) "b" 1
4) "a" 0
127.0.0.1:6379> ltrim list 1 2 截断:表示只保留1和2两个位的值
OK
127.0.0.1:6379> lrange list 0 -1 再次获取
1) "c"
2) "b" 对比上面的保留了1.2
rpoplpush移除命令
127.0.0.1:6379> flushall 清空所有
OK
127.0.0.1:6379> flushdb 清空所有
OK
127.0.0.1:6379> rpush name aa bb cc 插入多个值
(integer) 3
127.0.0.1:6379> lrange name 0 -1 获取多个值
1) "aa"
2) "bb"
3) "cc" 最后一个元素
移除列表最后一个元素到新的列表中name1(此列表不存在)
127.0.0.1:6379> rpoplpush name name1
"cc"
127.0.0.1:6379> lrange name 0 -1 获取之后少了CC
1) "aa"
2) "bb"
127.0.0.1:6379> lrange name1 0 -1 查看新的列表存在CC
1) "cc"
lset通过下标更改列表元素
127.0.0.1:6379> flushdb 清空
OK
127.0.0.1:6379> lset naem 0 11 更改一个不存在的列表元素
(error) ERR no such key 报错(lset命令:此列表必须存在)
127.0.0.1:6379> lpush name a1 插入一个值
(integer) 1
127.0.0.1:6379> lrange name 0 -1 获取
1) "a1"
127.0.0.1:6379> lset name 0 b1 使用lset通过下标更改列表的元素
OK
127.0.0.1:6379> lrange name 0 -1 可以看到a1已经变成b1
1) "b1"
因为只有一个元素且下标为0所以更改3是错的
127.0.0.1:6379> lset name 3 f1
(error) ERR index out of range
linsert往指定位置插入值
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush name hello word
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "word"
2) "hello"
before前面插入
127.0.0.1:6379> linsert name before word aa 往word前面插入aa
(integer) 3
127.0.0.1:6379> lrange name 0 -1
1) "aa"
2) "word"
3) "hello"
往hello之后插入bb
127.0.0.1:6379> linsert name after hello bb
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "aa"
2) "word"
3) "hello"
4) "bb"