Redis

Redis 笔记(五)-List 列表类型详解

2021-08-08  本文已影响0人  yjtuuige
命令 说明
lpush 将某个值加入到一个key列表头部
lpushx 同lpush,但是必须要保证这个key存在
rpush 将某个值加入到一个key列表末尾
rpushx 同rpush,但是必须要保证这个key存在
lpop 返回和移除列表左边的第一个元素
rpop 返回和移除列表右边的第一个元素
lrange 获取某一个下标区间内的元素
llen 获取列表元素个数
lset 设置某一个指定索引的值(索引必须存在)
lindex 获取某一个指定索引位置的元素
lrem 删除重复元素
ltrim 保留列表中特定区间内的元素
linsert 在某一个元素之前,之后插入新元素
127.0.0.1:6379> lpush list one        # 将一个值或者多个值,插入到列表头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1        # 获取list中值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1        # 通过区间获取具体的值,最左边为 0
1) "three"
2) "two"
127.0.0.1:6379> rpush list right        # 将一个值或者多个值,插入到列表尾部 (右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1        # 获取 list 中值,rpush 插入的值在列表尾部
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> 
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list        # 移除 list 的第一个元素
"three"
127.0.0.1:6379> rpop list        # 移除 list 的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0        # 通过下标获得 list 中的某一个值
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list        # 返回列表的长度
(integer) 3
127.0.0.1:6379> lpush list three        # 在列表中添加一个重复的值
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one       # 移除 list 集合中指定个数的 value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrem list 2 three        # 移除列表中的 2 个 值
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379> rpush list v1
(integer) 1
127.0.0.1:6379> rpush list v2
(integer) 2
127.0.0.1:6379> rpush list v3
(integer) 3
127.0.0.1:6379> rpush list v4
(integer) 4
127.0.0.1:6379> ltrim list 1 2    # 通过下标截取指定的长度,这个list 已经被改变了,截断了只剩下截取的元素
OK
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v3"
127.0.0.1:6379> lpush list a1
(integer) 1
127.0.0.1:6379> lpush list a2
(integer) 2
127.0.0.1:6379> lpush list a3
(integer) 3
127.0.0.1:6379> lpush list a4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "a4"
2) "a3"
3) "a2"
4) "a1"
127.0.0.1:6379> rpoplpush list newlist    # 移除列表的最后一个元素,到新的列表中
"a1"
127.0.0.1:6379> lrange list 0 -1    # 查看原来的列表
1) "a4"
2) "a3"
3) "a2"
127.0.0.1:6379> lrange newlist 0 -1    # 查看目标列表中,存在移动的值
1) "a1"
127.0.0.1:6379> exists list        # 判断 list 是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item        # 如果不存在,去更新列表就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list v1
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "v1"
127.0.0.1:6379> lset list 0 item        # 如果存在,更新当前下标的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379> lset list 1 v2        # 如果不存在,则会报错
(error) ERR index out of range
127.0.0.1:6379> lpush list v1
(integer) 1
127.0.0.1:6379> lpush list v2
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "v1"
127.0.0.1:6379> linsert list before v1 ins    # 在 v1 元素前,插入 ins
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "ins"
3) "v1"
127.0.0.1:6379> linsert list after v1 new    # 在 v1 元素后,插入 new
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v2"
2) "ins"
3) "v1"
4) "new"

小结:

1、list 实际上是一个链表,before Node after , left, right 都可以插入值
2、如果 key 不存在,则创建新的链表
3、如果 key 存在,新增内容
4、如果移除了所有值(空链表),也代表不存在
5、在两边插入或者改动值,效率最高!修改中间元素,效率相对较低
消息队列:左入右出(lpush rpop)、栈:左入左出(lpush lpop

上一篇下一篇

猜你喜欢

热点阅读