我正在寻找像BLPUSH
命令这样的命令,它会阻塞,直到列表的长度低于指定的max_size
。目的是防止列表无限期增长,如果生产者运行速度快于消费者。
该功能与python的Queue.put()
非常相似。
请注意this accepted answer不起作用,因为(1)代码立即返回,根本不会阻塞。 (2)如果我在Lua写一个自旋锁,它会冻结Redis。
有没有办法在Lua中实现BLPUSH
,还是必须在C中?
答案 0 :(得分:0)
TLDR必须是C语言或任何其他C语言绑定语言。
Lua是一种用于编写逻辑和现有Redis命令的方法。由于Redis(大部分)是单线程的,因此Lua运行时引擎会全面关注运行脚本并阻止服务器。
从Redis v4开始,模块允许任何人(具有所需的开发技能)使用(几乎)任何内容扩展Redis,包括blocking operations。