Используйте mget() внутри блока транзакций multi() в салате

У меня есть несколько потоков, и я обновляю запись в Redis. Чтобы не обновлять одно и то же значение в одно и то же время, я пытался использовать multi() блок транзакций.

RedisAsyncCommands<String, String> redisAsyncCommands = redisConnection.async();

Вот как я инициализировал свое соединение.

this.redisAsyncCommands.multi();
RedisFuture<List<String>> getResult = this.redisAsyncCommands.mget(keys);
List<String> productJsons = getResult.get(redisFlushTimeOut, TimeUnit.SECONDS);

System.out.println(productJsons.toString());
// update process....

// Execute all commands issued after MULTI
RedisFuture<List<Object>> insertResult = 
this.redisAsyncCommands.exec();

RedisCommandResult redisCommandResult = new RedisCommandResult();
redisCommandResult.setResultList(insertResult.get(redisFlushTimeOut, TimeUnit.SECONDS));
return redisCommandResult;

Вот как я пытался получить запись из Redis и обновить ее с помощью multi(), Это дает мне TimeoutException, Но после удаления multi() а также exec() работает нормально Но я думаю, что это повлияет при использовании нескольких потоков. Пожалуйста, помогите мне использовать mget() внутри multi()/ или дайте мне лучший способ сделать это.

0 ответов

Другие вопросы по тегам