美文网首页
PHP面试之如何实现一个安全的队列

PHP面试之如何实现一个安全的队列

作者: js189174944 | 来源:发表于2017-10-27 00:15 被阅读0次

面试面的好,薪资拿的高,先送大家一款APP《牛客》,里面都是面试题。

茫茫10月,我面试一家国际物流公司,入职要求是会用redis,面试的时候真的被问到了,面试官不直接问基础的命令,而是问如何实现一个安全的队列

接下来,就告诉大家,如何实现?

Redis的列表数据结构可以让我们方便的实现消息队列

例如用 LPUSH(BLPUSH)把消息入队,用 RPOP(BRPOP)获取消息

绝大部分的情况下,这些操作都是没问题的,但并不能保证绝对安全

当 LPOP 返回一个元素给客户端的时候,会从 list 中把该元素移除,这意味着该元素就只存在于客户端的上下文中,如果客户端在处理这个返回元素的过程崩溃了,那么这个元素就永远丢失了

如何解决?

redis 有一个 RPOPLPUSH (或者其阻塞版本的 BRPOPLPUSH)命令

命令格式

RPOPLPUSH source destination

原子性地返回并移除 source 列表的最后一个元素, 并把该元素放入 destination 列表的头部

用这个命令可以保证队列的安全问题:

相关文章

网友评论

      本文标题:PHP面试之如何实现一个安全的队列

      本文链接:https://www.haomeiwen.com/subject/zgilpxtx.html