赞
踩
只有克服了情感的波动,才能专心致志地追求事业的成功
目录
列表相当于 数组或者顺序表。
列表类型是用来存储多个有序的字符串,如图 2-19 所示,a、b、c、d、e 五个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储 个元
素。在 Redis 中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。
注意,它内部的编码方式并非是一个简单的数组,而是更接近于“双端队列”。可以做到比较高效的头插头删,尾插尾删。
当然也特供了许多的获取和删除的操作:
列表类型的特点:
下面是关于list的一些命令。
下面的lpush中第一个字母其实是left,也就是left push,rpush就是right push。
将一个或者多个元素从左侧插入队列中。
语法:lpush key element [ element ..... ]
示例:
在 key 存在时,将一个或者多个元素从左侧放入(头插)到 list 中。不存在,直接返回,他类似于setnx。
语法:LPUSHX key element [element ...]
示例:
注意,这里的lpushx的key一定是已经存在的key,如果key不存在返回0。
类似于lpush,只不过rpush是从最右侧插入,相当于尾插
在 key 存在时,将一个或者多个元素从右侧放入(尾插)到 list 中
上面两个命令的用法和lpush与lpushx完全一致,这里不做过多的解释。
除了设置list,我总得能查看里面的数据吧?别急当然有法子!
获取从 start 到 end 区间的所有元素,左闭右闭。
语法:LRANGE key start stop
示例:
首先创建一个list:
根据我们在前言列表中提到的下标进行实验:
获取除了“1”之外的值:
最简便的获取所有元素的方法,那就是0 -> -1:
因为-1代表最后一个元素。
从list左侧取出数据,这个操作会直接降价左侧的第一个数据删除并作为返回值返回
语法:lpop key
示例:
从尾部删除,然后返回被删除的数据。
语法:同lpop
示例:
同lpop
获取从左数第index位置的元素。此处的lindex中的l可以理解为list index,而不是left
语法:lindex key index
示例:
将这个list,使用lindex,获取其值。
在特定位置插入元素。你可以选择从左侧插入,也可以从右侧插入,你可以选择自己想要的,但是你只能选择其中一种。
语法:linsert key <before | after> pivot element
示例:
这就出现一个问题,一个相同的元素在list中是可以同时存在多份的:
所以list的linsert的基准是通过:
linsert 进行插入的时候,要根据基准值,找到对应的位置从左往右,找到第一个符合基准值的位置即可。
获取list的长度。llen中的第一个l为list,也就是list length的意思。
语法:llen key
示例:
redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LLEN mylist
(integer) 2
list remove,
语法:lrem key count element
示例:
删除右边两个1:
删除:
保留start和stop区间的元素。区间外的元素就被删除了。
语法:ltrim key start stop
示例:
lset
根据下标修改元素,可以类比lindex,lindex是根据下标获取元素,而lset则是根据下标修改元素,lset全称list set。
语法:lset key index newValue。
示例:
设置list:1 2 3 4, 然后修改下标为0的元素的值为5:
什么叫阻塞命令?阻塞: 当前的线程,不走了,代码不继续执行了。会在满足一定的条件之后,被唤醒。
关于阻塞的两个命令:
这个l为left的意思,b则为block的意思,意思为阻塞。咱们redis中的list就相当于一个阻塞队列,线程安全的问题,redis是靠单线程模型去提供支持的。而阻塞只支持队列为空的情况,不考虑队列满。阻塞版本会根据timeout,阻塞一段时间,期间redis可以执行其他命令,使用brpop和blpop的情况可以显示设置阻塞时间的,不一定是无休止的等待。
语法:brpop | blpop key [ key ... ] timeout
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。