获取 list
的长度
语法:
LLEN key
list
长度删除 count
个 key
中的元素
语法:
LREM key count element
,
是 list
长度,
是需要移除的元素个数
count > 0
:要删除的元素从左往右找count < 0
:要删除的元素从右往左找count = 0
:删除所有的指定元素保留 start
和 stop
之间区间内的元素,区间外元素就直接被删除了
语法:
LTRIM key start stop
,
是被删除的元素个数
根据下标,修改元素
语法:
LSET key index element
LINDEX
可以很好的处理下标越界的情况,直接返回 nil
。list
则会报错阻塞:当前的线程不走了,代码不继续执行了。会在满足一定的条件之后被唤醒
B
==> block
(阻塞),阻塞队列(BlockingQueue
)
使用队列来作为中间的“交易场所”,期望这个队列有两个特性:
Redis
中的 list
也相当于阻塞队列一样,线程安全是通过单线程模型支持的。阻塞,则只支持“队列为空”的情况,不考虑“队列满”
list
中存在元素,那么 BLPOP/BRPOP
和 LPOP/RPOP
作用完全相同。list
中为空,那么 BLPOP/BRPOP
就会产生阻塞,一直阻塞到队列不空为止阻塞版本会根据 timeout
,阻塞一段时间,期间 Redis
可执行其他命令
BLPOP/BRPOP
的时候,这里是可以显示设置阻塞时间的(不一定是无休止的等待)命令中如果设置了多个键,那么会从左向右进行遍历键,一旦有一个键对应的列表中可以弹出元素,命令立即返回
key
的列表的元素的key
对应多个 list
,这多个 list
哪个有元素了,就会返回哪个元素如果多个客户端同时针对同一个 key
执行 POP
,则最先执行命令的客户端会得到弹出的元素
语法:
BLPOP key [key ...] timeout
key
或者多个 key
,每个 key
都对应一个 list
list
有任何一个非空,BLPOP 都能够把这里的元素给获取到,立即返回list
都为空,此时就要阻塞等待,等待其他客户端往这些 list
中插入元素Redis 6
,超时时间允许设为小数;Redis 5
中,超时时间得是整数)pair
(二元组)key
key
中没有元素的时候,一直阻塞。后来新开一个终端窗口,将 key
里面新加元素,阻塞就结束了,并显示了阻塞时间key
key
都是空的时候,就会阻塞住,但只要其中一个 key
有了元素,阻塞就会停止当前这俩命令虽然可以一定程度的满足“消息队列”这样的需求,但整体来说,这俩功能还是比较有限
ziplist
(压缩列表),把数据按照更紧凑的压缩形式进行表示,节省空间。当元素个数多了,操作起来效率会降低linkedlist
(链表)quicklist
相当于是链表和压缩列表的结合,整体还是一个链表,链表的每个节点,是一个压缩列表