- 可以把
List当成一个栈、或队列来使用
lpush、lpop则为栈lpush、rpop则为队列
所有的List命令均以l开头
1.2 向列表中添加元素
lpush key value1 ... valuen:将valuei依次插入到列表key的头部
127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> lpush list1 v1(integer) 1127.0.0.1:6379> lpush list1 v2(integer) 2127.0.0.1:6379> lpush list1 v3(integer) 3127.0.0.1:6379> keys *1) "list1"
lrange key start stop:取出key对应的List中从start到stop(包括stop)的所有元素
127.0.0.1:6379> keys *1) "list1"127.0.0.1:6379> lrange list1 0 -11) "v3" # 由于每次插入到头部,所以先取出的是最后一次插入的值 v32) "v2"3) "v1"
rpush key value1 ... valuen:将valuei依次插入到列表key的尾部
127.0.0.1:6379> lrange list1 0 -11) "v3"2) "v2"3) "v1"127.0.0.1:6379> rpush list1 right1 right2(integer) 5127.0.0.1:6379> lrange list1 0 -11) "v3"2) "v2"3) "v1"4) "right1"5) "right2"
linsert key before|after pivot value:在列表key中元素pivot的(前before|after后)插入元素value
127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "world"127.0.0.1:6379> linsert mylist before world insert(integer) 3127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "insert"3) "world"127.0.0.1:6379> linsert mylist after world after(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "insert"3) "world"4) "after"
1.3 将元素移出列表
lpop key:移除列表key的头部元素rpop key:移除列表key的尾部元素127.0.0.1:6379> lrange list1 0 -11) "v3"2) "v2"3) "v1"4) "right1"5) "right2"127.0.0.1:6379> lpop list1 # 移除列表key的头部元素"v3"127.0.0.1:6379> rpop list1 # 移除列表key的尾部元素"right2"127.0.0.1:6379> lrange list1 0 -11) "v2"2) "v1"3) "right1"
1.4 列表特定数据操作
lindex key index:获取列表key下标index对应的元素值
127.0.0.1:6379> lrange list1 0 -11) "v2"2) "v1"3) "right1"127.0.0.1:6379> lindex list1 1 # 通过下标获得列表中的值"v1"127.0.0.1:6379> lindex list1 0"v2"
llen key:获取列表key的长度
127.0.0.1:6379> llen list1(integer) 3
lrem key count value:移除列表key中count个值为value的元素
127.0.0.1:6379> lrange list1 0 -11) "v2"2) "v1"3) "right1"127.0.0.1:6379> lrem list1 1 v2(integer) 1127.0.0.1:6379> lrange list1 0 -11) "v1"2) "right1"
ltrim key start stop:从start到stop截取列表key并替换原有的列表key
127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> rpush mylist hello hello1 hello2 hello3(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "hello"2) "hello1"3) "hello2"4) "hello3"127.0.0.1:6379> ltrim mylist 1 2 # 截取列表 mylist 的第 1 到 2 个元素OK127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello2"
lset key index value:更新列表key的指定下标index的元素为value
127.0.0.1:6379> lset mylist 0 hello(error) ERR no such key # 列表不存在时无法更新127.0.0.1:6379> lpush mylist hello(integer) 1127.0.0.1:6379> lset mylist 0 hellochangeOK127.0.0.1:6379> lrange mylist 0 -11) "hellochange"127.0.0.1:6379> lset mylist 2 hello2(error) ERR index out of range # index 超过列表长度时,无法更新127.0.0.1:6379> lset mylist 1 hello1(error) ERR index out of range
1.5 组合命令
rpoplpush source destination:将列表source的尾部元素取出并插入到列表destination的头部
- 可以用做移动元素
- 不存在
rpoprpush、lpoprpush、lpoplpush命令127.0.0.1:6379> lpush mylist hello hello1 hello2(integer) 3127.0.0.1:6379> lrange mylist 0 -11) "hello2"2) "hello1"3) "hello"127.0.0.1:6379> rpoplpush mylist myotherlist"hello"127.0.0.1:6379> lrange mylist 0 -11) "hello2"2) "hello1"127.0.0.1:6379> lrange myotherlist 0 -11) "hello"
1.6 列表元素判断
exists key:判断列表key是否存在
127.0.0.1:6379> exists mylist(integer) 0
二、小结
List类型数据实际上是一个链表
- 如果
key不存在则需要创建新的链表 - 如果
key存在,则可以直接新增内容 - 如果移除了所有的值,则变为空链表,也代表不存在
- 在两边插入或者改动值的效率最高,中间元素的编辑效率相对较低