我正在寻找类似的东西BLPUSH
该命令将阻塞,直到列表的长度低于指定值max_size
。目的是防止生产者运行速度快于消费者时列表无限增长。
功能与 python 非常相似Queue.put() https://docs.python.org/3/library/queue.html#queue.Queue.put.
注意这个接受的答案 https://stackoverflow.com/questions/27067177/redis-is-there-a-blpush不起作用,因为(1)代码立即返回,这根本不阻塞。
(2)如果我在Lua中写一个自旋锁,它会冻结Redis。
有没有办法实现BLPUSH
在Lua中,还是必须在C中?
您可以使用 2 个列表来实现这一点BRPOP
/BLPOP
。附带的tokens
列出轨道中的可用空间queue
list.
示例伪代码假设 maxsize 为 3 个元素(只是为了使示例具体化)。
DEL queue, tokens # start with 2 keys, delete to start with a clean slate
LPUSH tokens 0 0 0 # push maxsize tokens to the tokens list (3 in this example)
On put(item):
BRPOP tokens # remove a token when pushing, this blocks if no tokens exist
LPUSH queue item # this is safe because tokens keeps size count
On get():
LPUSH tokens 0 # add a token when taking from the queue
BRPOP queue # take from the queue, block when empty
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)