redis / phpredis,在单个事务中重置所有计数器

时间:2019-04-10 16:36:32

标签: redis transactions

我需要将每个散列中的每个键的所有值重置为0。编写我拥有的脚本,但是它不起作用:

$transaction = $this->redisClient->multi();
try {
    $allHashes = transaction->sMembers('all_hashes:')
    foreach($allHashes as $hash) {
        $keys = $transaction->hKeys($hash);
        $resetData = [];
        foreach ($keys as $key) {
            $resetData[$key] = 0;
        }
        $transaction->hMSet($hash, $resetData);
    }
    $transaction->exec();
} catch (RedisException $e) {
    $transaction->discard();
}

据我了解,这是行不通的,因为当我们运行exec()时,所有执行都开始了,它只是发出了第一个命令transaction->sMembers('all_hashes:'),对于其他命令,没有任何返回值,就像我构建时一样这些重置数组实际上都为空,对吗?以及如何解决它,我应该在这里使用Lua,还是可以通过简单的redis命令以某种方式实现?谢谢!

0 个答案:

没有答案