文章目录
Redis中所有有关list的操作命令都是『L』开头
基本操作
##左侧插入 - 头插法 lpush
127.0.0.1:6379> lpush l1 1 # 从左边向l1中插入值1(头插法)
(integer) 1
127.0.0.1:6379> lpush l1 2 # 从左边向l1中插入值2
(integer) 2
127.0.0.1:6379> lpush l1 3 # 从左边向l1中插入值3
(integer) 3
右侧插入 - 尾插法 rpush
127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> rpush l1 name age 从右边向l1中插入值name age(尾插法)
(integer) 5
127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
4) "name"
5) "age"
##通过区间获取值 lrange
127.0.0.1:6379> lrange l1 0 -1 # 取出l1中所有的值,注意:list取出是从后向前,类似于『栈』
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrange l1 0 1 # 取出第0和第1个值,像栈一样,先进后出
1) "3"
2) "2"
127.0.0.1:6379>
删除list中的值 lpop、rpop
127.0.0.1:6379> lrange l1 0 -1
1) "3"
2) "2"
3) "1"
4) "name"
5) "age"
127.0.0.1:6379> lpop l1 # 从头部(左边)删除一个值,删除成功会返回被删除的值
"3"
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
4) "age"
127.0.0.1:6379> rpop l1 # 从尾部(右边)删除一个值,删除成功会返回被删除的值
"age"
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
通过索引获取 lindex
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
127.0.0.1:6379> lindex l1 3 # 获取不到会返回nil
(nil)
127.0.0.1:6379> lindex l1 2 # 索引从0开始
"name"
获取list的长度 llen
127.0.0.1:6379> lrange l1 0 -1
1) "2"
2) "1"
3) "name"
127.0.0.1:6379> llen l1 # 获取list的长度
(integer) 3
移除指定的值 lrem
127.0.0.1:6379> lrange l1 0 -1 # 2个1 2个2 3个name
1) "1"
2) "2"
3) "name"
4) "name"
5) "2"
6) "1"
7) "name"
127.0.0.1:6379> lrem l1 1 1 # 移除l1中的1,从上到下移除1个
(integer) 1
127.0.0.1:6379> lrange l1 0 -1 # 1个1 2个2 3个name
1) "2"
2) "name"
3) "name"
4) "2"
5) "1"
6) "name"
127.0.0.1:6379> lrem l1 2 name # 移除l1中的name,从上到下移除2个
(integer) 2
127.0.0.1:6379> lrange l1 0 -1 # 1个1 2个2 1个name
1) "2"
2) "2"
3) "1"
4) "name"
截取数据 ltrim
127.0.0.1:6379> rpush mylist liuyi chener zhangsan lisi wangwu
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "liuyi"
2) "chener"
3) "zhangsan"
4) "lisi"
5) "wangwu"
127.0.0.1:6379> ltrim mylist 1 3 # 从第1个位置开始,取3个
OK
127.0.0.1:6379> lrange mylist 0 -1 # ltrim操作会改变数据
1) "chener"
2) "zhangsan"
3) "lisi"
更新指定下标的值 lset
127.0.0.1:6379> lset mylist 3 hahaha # 在list不存在的情况下set会报错
(error) ERR no such key
127.0.0.1:6379> rpush mylist name age sex
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> lset mylist 2 hahaha #索引从0开始,根据索引位置进行更新
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "name"
2) "age"
3) "hahaha"
使用场景
- 消息队列
# 从右边插入(尾插法)消息
127.0.0.1:6379> rpush messageQueue "email zhangsan "
(integer) 1
127.0.0.1:6379> rpush messageQueue "email lisi"
(integer) 2
127.0.0.1:6379> rpush messageQueue "email wangwu"
(integer) 3
127.0.0.1:6379> rpush messageQueue "email liuyi"
(integer) 4
127.0.0.1:6379> rpush messageQueue "email chener"
(integer) 5
# 查看全部消息
127.0.0.1:6379> lrange messageQueue 0 -1
1) "email zhangsan "
2) "email lisi"
3) "email wangwu"
4) "email liuyi"
5) "email chener"
# 从左边消费
127.0.0.1:6379> lpop messageQueue
"email zhangsan "
127.0.0.1:6379> lpop messageQueue
"email lisi"
# 查看剩余消息
127.0.0.1:6379> lrange messageQueue 0 -1
1) "email wangwu"
2) "email liuyi"
3) "email chener"
- 可以作为栈来使用,左边插入左边出 或者 右边插入右边出