Redis学习-List

来源:互联网 发布:洪厚甜网络书法 编辑:程序博客网 时间:2024/05/22 21:52

redis的list实际上是linked list,基于链表的一个实现。插入速度很快,但检索速度不是很快,如果对数据的访问速度要求比较高,建议使用排序集合sorted sets

相关命令

lpush向list的左边添加一个元素
rpush向list的右边添加一个元素
lrange从list中取出一定范围的元素,因为redis list是一个链表的实现,元素正向从0,1…N,反向从-1,-2…N,以此类推,0表示左边第一个元素,-1表示最后一个元素(右边第一个元素),既可以正向序号访问(lrange mylist 1,2),也可以用反向序号访问(lrange mylist -2,-1)。注意:lrange是从左边往右访问的,所以用反向序号时,要注意序号顺序(lrange mylist -2 -1)

127.0.0.1:6379> lpush mylist A(integer) 1127.0.0.1:6379> lpush mylist B(integer) 2127.0.0.1:6379> rpush mylist C(integer) 3127.0.0.1:6379> rpush mylist D(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "B"2) "A"3) "C"4) "D"127.0.0.1:6379> lrange mylist -2 -11) "C"2) "D"

rpushx 在list右边新增一个元素,仅list存在时有效
lpushx 在list左边新增一个元素,仅list存在时有效
rpoplpush list1 list2 弹出list1最右边的一个元素,将其追加到list2的最左端,并返回给用户
brpoplpush list1 list2 timeout 弹出list1最右边的一个元素,将其追加到list2的最左端,并返回给用户;如果list1为空,那么在timeout秒之内阻塞并等待可弹出的元素
lpop 从list的左边弹出一个元素
rpop 从list的右边弹出一个元素
blpop [list …] timeout 从第一个非空列表的最左边弹出一个元素,或者在timeout秒内阻塞并等待可弹出的元素出现
brpop [list …] timeout 从第一个非空列表的最右边弹出一个元素,或者在timeout秒内阻塞并等待可弹出的元素出现
ltrim截取list,截取后list中就只包含截取范围内的值。截取也可以使用正向序号和反向序号。超过范围的下标截取并不会报错,比如,start超过list尾部,或者start大于end,结果会是list变成列表,key会被自动删除。如果end超过list尾部,会当成最后一个元素来进行截取
lset key index value设置index位置上list元素的值为value

注:blpop、brpop、 rpoplpush、brpoplpush这几个命令的特性特别适用于队列。

127.0.0.1:6379> rpushx mylist X(integer) 5127.0.0.1:6379> rpushx mylist1 W(integer) 0127.0.0.1:6379> rpush list1 1(integer) 1127.0.0.1:6379> rpush list1 2(integer) 2127.0.0.1:6379> rpush list1 3(integer) 3127.0.0.1:6379> rpoplpush list1 list2"3"127.0.0.1:6379> lrange list1 0 -11) "1"2) "2"127.0.0.1:6379> lrange list2 0 -11) "3"27.0.0.1:6379> rpush list_key A(integer) 1127.0.0.1:6379> rpush list_key B(integer) 2127.0.0.1:6379> rpush list_key C(integer) 3127.0.0.1:6379> lrange list_key 0 -11) "A"2) "B"3) "C"127.0.0.1:6379> ltrim list_key 0 1OK127.0.0.1:6379> lrange list_key 0 -11) "A"2) "B"

lrem list count value 从list列表中移除前count出现的值为value的元素。count参数通过 下面几种方式来影响这个操作:
- count > 0:从头往尾移除值为value的元素
- count < 0:从尾往头移除值为value的元素
- count = 0:移除所有值为value的元素

127.0.0.1:6379> rpush list A(integer) 1127.0.0.1:6379> rpush list B(integer) 2127.0.0.1:6379> rpush list C(integer) 3127.0.0.1:6379> rpush list C(integer) 4127.0.0.1:6379> rpush list A(integer) 5127.0.0.1:6379> rpush list A(integer) 6127.0.0.1:6379> lrange list 0 -11) "A"2) "B"3) "C"4) "C"5) "A"6) "A"127.0.0.1:6379> lrem list -2 C(integer) 2127.0.0.1:6379> lrange list 0 -11) "A"2) "B"3) "A"4) "A"127.0.0.1:6379> lrem list 2 A(integer) 2127.0.0.1:6379> lrange list 0 -11) "B"2) "A"

llen list获取list的长度
linsert key before/after pivot value 在key中指定值pivot的前面或后面插入新值value,当key不存在时,什么事情也不做,不会报错。当key存在但保存的不是一个list时,会返回error
lindex通过索引值获取一个元素

127.0.0.1:6379> rpush list hello(integer) 1127.0.0.1:6379> rpush list world(integer) 2127.0.0.1:6379> linsert list before world 123(integer) 3127.0.0.1:6379> lrange list 0 -11) "hello"2) "123"3) "world"127.0.0.1:6379> lindex list 0"hello"127.0.0.1:6379> lindex list -2"123"
原创粉丝点击