Мне нужно сбросить все значения на 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? Спасибо!