redis中list的实现方式

47次阅读
没有评论

共计 1408 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

了解 redis 中 list 的实现方式?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是丸趣 TV 小编给大家带来的参考内容,让我们一起来看看吧!

Redis 列表(list)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。

list

常用命令: 

lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。

应用场景: 

Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一。

我们可以轻松地实现最新消息排行等功能。

Lists 的另一个应用就是消息队列,可以利用 Lists 的 PUSH 操作,将任务存在 Lists 中,然后工作线程再用 POP 操作将任务取出进行执行。

实现方式: 

Redis list 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis 内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

RPOPLPUSH source destination

命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

将列表 source 中的最后一个元素 (尾元素) 弹出,并返回给客户端。

将 source 弹出的元素插入到列表 destination,作为 destination 列表的的头元素。

如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转 (rotation) 操作。

一个典型的例子就是服务器的监控程序:它们需要在尽可能短的时间内,并行地检查一组网站,确保它们的可访问性。

redis.lpush downstream_ips , 192.168.0.10 
 redis.lpush downstream_ips , 192.168.0.11 
 redis.lpush downstream_ips , 192.168.0.12 
 redis.lpush downstream_ips , 192.168.0.13 
 Then: 
 next_ip = redis.rpoplpush downstream_ips , downstream_ips

BLPOP

假设现在有 job、command 和 request 三个列表,其中 job 不存在,command 和 request 都持有非空列表。考虑以下命令:

BLPOP job command request 30  # 阻塞 30 秒,0 的话就是无限期阻塞,job 列表为空, 被跳过, 紧接着 command 列表的第一个元素被弹出。

1) command                             # 弹出元素所属的列表

2) update system…                    # 弹出元素所属的值

为什么要阻塞版本的 pop 呢,主要是为了避免轮询。举个简单的例子如果我们用 list 来实现一个工作队列。执行任务的 thread 可以调用阻塞版本的 pop 去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。

感谢各位的阅读!看完上述内容,你们对 redis 中 list 的实现方式大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注丸趣 TV 行业资讯频道。

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计1408字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)