先创建一个 key 叫做 mylist,mylist存一个list。
list数据类型底层是一个链表。先进后出,后进先出。
命令中的L(Left)、R(Right)代表链表的头部L(下标0的位置)和尾部R(下标length-1的位置)
list中的允许有相同的元素
1、LSET key index value
设置 index 位置的list元素的值为 value。当index超出范围时会返回一个error。
lset mylist 0 123
如果key不存在会报错
2、LINSERT key BEFORE|AFTER pivot value
作用:在list的某个元素前或者后插入某个新元素。
2.1、当 key 不存在时,这个list会被看作是空list,任何操作都不会发生,返回0
2.2、当 key 存在,正常插入元素:LINSERT key BEFORE pivot value
当前mylist中只有一个元素123
在123之前插入元素0
linsert mylist before 123 0
2.3、当 key 存在,正常插入元素:LINSERT key AFTER pivot value
当前mylist中有2个元素:【0,123】
在0后面插入一个元素12,插入成功后,mylist有3个元素:【0, 12, 123】
linsert mylist after 0 12
2.4、当key存在,但保存的不是一个list的时候,会返回error。
linsert mylist after 0 {"username":"zhangsan"}
2.5、当 pivot 值找不到的时候返回 -1。
mylist中不存在元素456,尝试在456后面插入789,就会返回-1
linsert mylist after 456 789
3、LPUSH key value [value ...]
一个列表从下标0开始,到下标len(list)-1结束,lpush是将一个元素或者多个元素插入到key指向的List的左侧。
3.1、若Key不存在:进行 push 操作前会创建一个空列表。
lpush mylist1 0 1
返回值:在 push 操作后的 list 长度
一下push多个元素,例如0和1,是把0和1从左到右依次push,因此先push 0,再push 1。所以等都push成功后,查看列表元素第一个是1,第2个是0
3.2、若Key存在,但key对应的不是list而是其他数据类型,返回一个错误
之前创建了一个myhash的key,key对应的hash。因此向myhash push元素时,会报错
lpush myhash 1
4、RPUSH key value [value ...]
一个列表从下标0开始,到下标len(list)-1结束,rpush跟lpush的区别就是,rpush是将一个元素或者多个元素插入到key指向的List的右侧。
rpush mylist 4 5 6
依次将4、5、6push到mylist的右侧,成功后返回list的长度6。查看mylist push后的元素排列如下。
5、LPUSHX key value [value...]
LPUSHX 比 LPUSH多了一个X,这个X代表Exist,因此LPUSHX的作用是,仅当key已经存在且存着一个list的时候,才将值插入到list的头部。如果key不存在时,不做任何操作。
lpushx mylist2 1
mylist2不存在,因此什么也不做,返回值0
lpushx mylist -1mylist存在,且存着一个list,因此push成功,返回list长度
查看操作后的mylist,-1成功插到了mylist头部
此命令同样可以push多个元素。
6、RPUSHX key value [value...]
RPUSHX与LPUSHX命令的唯一区别是,当key存在且存着一个list的时候,是插到list的尾部。同样当key不存在的时候,什么也不做
rpushx mylist2 1
mylist2不存在,因此什么也不做,返回值0
rpushx mylist -2 -3mylist存在,且存着一个list,因此push成功,返回list长度
查看操作后的mylist,-2和-3成功插到了mylist尾部
7、LPOP key
移除并且返回 key 对应的 list 的第一个元素 。
若key存在返回第一个元素的值,或者当 key 不存在时返回null。
lpop mylist2
lpop mylist
mylist2不存在,返回null,mylist存在且第一个元素是-1,弹出成功后,返回了此元素值-1
8、RPOP key
RPOP跟LPOP的区别仅在于是移除并获取列表的最后一个元素。
rpop mylist2
rpop mylist
mylist2不存在,返回null,mylist存在且最后一个元素是-3,弹出成功后,返回了此元素值-3
9、LLEN key
若key存在且存着一个list,则返回list的长度,否则返回0
10、LINDEX key index
根据index获取list中的元素。如果index越界返回null,如果在范围内,返回对应的元素值。当key存的不是一个list时,报错。
lindex myhash 0
myhash存的不是list,将会报错
lindex mylist 3mylist中有7个元素。第3个元素是4。若想访问第8个元素,就超出了范围,会返回null
11、LRANGE key start stop
返回存储在key的列表里指定范围内的元素。start和stop偏移量都是基于0的下标。偏移量也可以是负数,列表尾部即最后一个元素是-1,倒数第二个元素是-2,以此类推。
例如,mylist长度是7,想获取整个列表的元素有两种方式。
lrange mylist 0 7 或者 lrange mylist 0 -1
lrange mylist 3 8
如果stop偏移量大于list的长度,那就取到列表最后的一个元素为止。
如果stop偏移量小于start偏移量,那就不会做任何操作。