基本的数据类型,在Redis 里面,可以弄成 栈、队列、阻塞队列!
list 所有的命令都是以 L 开头的
基本命令
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 thrww
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "thrww" # 0
2) "two" # 1
3) "one" # 2
127.0.0.1:6379> RPUSH list ZERO
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1 # 从最底下开始添加
1) "thrww"
2) "two"
3) "one"
4) "ZERO"
127.0.0.1:6379>
移除命令 RPOP、LPOP
127.0.0.1:6379> lrange list 0 -1
1) "thrww"
2) "two"
3) "one"
4) "ZERO"
127.0.0.1:6379> LPOP list 1 # 从最顶端开始删除
1) "thrww"
127.0.0.1:6379> RPOP list 1 # 从最低端开始删除
1) "ZERO"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
通过下标获取 list 某个值
127.0.0.1:6379> LINDEX list 1
"one"
127.0.0.1:6379> LINDEX list 0
"two"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
获取 list 长度
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>
移除指定的值
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> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LPUSH list three
(integer) 4
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
# 移除指令 键 移除数量 移除内容
127.0.0.1:6379> lrem list 2 three # LREM KEY COUNT ELEMENT
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379>
list 截取 (trim)
127.0.0.1:6379> RPUSH list one
(integer) 1
127.0.0.1:6379> RPUSH list two
(integer) 2
127.0.0.1:6379> RPUSH list three
(integer) 3
127.0.0.1:6379> RPUSH list frow
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
3) "three"
4) "frow"
127.0.0.1:6379> ltrim list 1 2
OK
127.0.0.1:6379> lrange list 0 -1 # 截取保留 下标0到1
1) "two"
2) "three"
127.0.0.1:6379>
rpoplpush 移除列表最后一个元素,添加到别的 list 里面
127.0.0.1:6379> rpush mylist one
(integer) 1
127.0.0.1:6379> rpush mylist thow
(integer) 2
127.0.0.1:6379> rpush mylist three
(integer) 3
127.0.0.1:6379> rpoplpush mylist mylist1
"three"
127.0.0.1:6379> lrange mylist 0 -1
1) "one"
2) "thow"
127.0.0.1:6379> lrange mylist1 0 -1
1) "three"
127.0.0.1:6379>
Lset ( 将列表中指定下标的值替换为另外一个值,更新操作 )
127.0.0.1:6379> lset list 0 item # 不存在会报错
(error) ERR no such key
127.0.0.1:6379> lpush list value0
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "value0"
127.0.0.1:6379> lset list 0 item # 下标为 0 更改为 item
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
127.0.0.1:6379>
linsert
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist world
(integer) 2
127.0.0.1:6379> linsert mylist before hello item1
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "item1"
2) "hello"
3) "world"
127.0.0.1:6379> linsert mylist after hello item2
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "item1"
2) "hello"
3) "item2"
4) "world"
127.0.0.1:6379>
小结
- list 实际是一个链表,before node after , left right 都可以插入值
- 如果key 不存在,创建新的链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在!
- 在两边插入或者改动值,效率最高!中间元素,相对来说效率最高