Используйте 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()/ или дайте мне лучший способ сделать это.