Redis阻止推送直到列表有空位

时间:2017-11-07 08:00:45

标签: redis

我正在寻找像BLPUSH命令这样的命令,它会阻塞,直到列表的长度低于指定的max_size。目的是防止列表无限期增长,如果生产者运行速度快于消费者。

该功能与python的Queue.put()非常相似。

请注意this accepted answer不起作用,因为(1)代码立即返回,根本不会阻塞。 (2)如果我在Lua写一个自旋锁,它会冻结Redis。

有没有办法在Lua中实现BLPUSH,还是必须在C中?

1 个答案:

答案 0 :(得分:0)

TLDR必须是C语言或任何其他C语言绑定语言。

Lua是一种用于编写逻辑和现有Redis命令的方法。由于Redis(大部分)是单线程的,因此Lua运行时引擎会全面关注运行脚本并阻止服务器。

从Redis v4开始,模块允许任何人(具有所需的开发技能)使用(几乎)任何内容扩展Redis,包括blocking operations