我使用Redis和Scala(rediscala库).我需要创建一个这样的事务:
redisTransaction.watch(key)
redisTransaction.zremrangebyscore(key, limit, limit) *>
redisTransaction.zadd(key, (someValue, entry)) *>
redisTransaction.set[ByteString](s"$lastSeqNumKey", sequenceNum) *>
redisTransaction.exec().void
Run Code Online (Sandbox Code Playgroud)
最后一个表达式应该返回一个Future[Unit]我希望在事务失败时失败的表达式.但是,Redis文档指出:
使用WATCH时,如果执行中止,EXEC可以返回Null回复.
什么是"空回复"?我的Future[Unit]遗嘱可能是一个null值,还是空字符串或类似的东西?我想写一个测试,我需要一些关于它的提示.
一次修正,没有void办法redisTransaction.exec().
简短回答:
exec()Future(MultiBulk(None))如果事务失败或执行中止,则调用将返回.
答案很长:
正如文件所说,
使用WATCH时,如果执行中止,EXEC可以返回Null回复.
并链接到NULL回复的解释
RESP Bulk Strings也可用于使用用于表示Null值的特殊格式来表示值的不存在.在这种特殊格式中,长度为-1,并且没有数据,因此Null表示为:
"$-1\r\n"这称为Null Bulk String.当服务器使用Null Bulk String回复时,客户端库API不应返回空字符串,而应返回nil对象.例如,Ruby库应返回'nil',而C库应返回NULL(或在reply对象中设置特殊标志),依此类推
这表明服务器将回复NULL响应,客户端必须处理它.它不能是一个空字符串,在这个库中它被解析并映射来自服务器的响应MultiBulk(None)
有一个用于解码redis的NULL响应的测试用例.
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |