我有一个场景,我想记录手表失败的密钥。这是一个java应用程序。以下是我的代码中的语句序列 -
Multi
Watch
Hmget
exec
以下是代码 -
for (String key : coreKeys) {
Transaction transaction = jedis.multi();
jedis.watch(key);
transaction.hmget(key, fields);
redisData = transaction.exec();
...........
...........
事务仅在场景中使用,因为我想知道是否有任何正文更改了密钥。所以我的查询是如何判断出手表失败了?在浏览了网上的大多数例子之后,我已经看到语句的顺序应该是
Watch
Multi
Hmget
exec
但是我必须用Watch作为第二个声明来实现它。可能吗?
答案 0 :(得分:3)
您只能知道EXEC返回时手表失败。
WATCH本身总是返回OK。
如果EXEC失败,则EXEC将返回空回复,因为某些观看的数据已更改。在您的代码中,您需要检查redisData是否为空结果,并在需要时再次尝试该事务。