我正在构建一个系统,该系统在队列的末尾推送一个唯一的id,该id带有一个关联的等待列表号。当用户注册到系统时,会给他们一个等待列表编号,该编号与在队列末尾推送的唯一id相关联。
当从队列前面弹出队列成员或在队列中提升成员时,与队列中唯一id关联的等待列表号将减少1。队列成员在执行某个任务(可以是调用promote函数的任何任务)时被提升
系统应具有以下功能functions:-
getwaitlist(id string):-调用时函数返回使用id的队列成员的当前等待列表号
promotemember(id string):-函数在调用时执行两个things:-
如果该成员不在队列的第0个索引处,则该成员将其等待列表位置与其前面的成员交换。
如果成员位于队列的第0个索引处,则该成员将从队列中弹出,其等待列表将变为0,其余成员的等待列表将减少1。
我能想到的解决方案是使用redis列表来构建队列。但是我面临的问题是从队列中检索一个元素,因为使用lindex需要o(n)个时间,并且应该事先知道元素的索引。使用lrange需要o(n)个时间来获取所有元素。
在redis列表中没有办法交换元素的位置,它必须通过提取整个列表,交换元素并将其推回redis来分别完成,这涉及到太多的操作。
有没有更好的方法、架构或技术堆栈可以让系统性能更高效?
暂无答案!
目前还没有任何答案,快来回答吧!