想象一下一个简单的键值服务器,允许以下动词:
PUT键值 - 将键值设置为值 GET键 - 获取键的值(如果已设置)或指示键缺失 WAIT键超时 - 如果设置了键的值,请立即获取。否则,阻止/等待,直到其他人PUT键,尽快返回。如果达到超时,则表示失败。
这些语义在各种本地执行环境中有点类似于Futures和Promises,但在分布式环境中,我想象它通常是通过消息传递协议和键值存储的某种组合来实现的。
我想知道是否有人:
答案 0 :(得分:0)
仍不确定调用语义是什么 - 但这可以通过使用redis阻止来实现。
使用阻止pop / push与单元素列表,我们可以按如下方式实现GET:
BRPOPLPUSH q q 0
如果列表已经存在,它将立即返回值,然后将其添加回列表。如果没有,它将在添加值之前阻塞(或者您可以使用最后一个arg设置超时)。
要设置值,您只需按下列表即可。
LPUSH q 1
如果您想确保真正的SET语义,您可能更喜欢事务
MULTI
DEL q
LPUSH q 1
EXEC