Использование результата ответа транзакции jedis перед выполнением транзакции - PullRequest
0 голосов
/ 14 июля 2020

Предположим, у меня есть транзакция t. Я хочу получить из базы данных что-то, что было бы вставлено ранее в эту транзакцию, и использовать это значение в последующей операции в той же транзакции, например:

byte[] data = t.get(key).get();
t.set(other_key, data);

Однако в Jedis, когда я пробую это, Я получаю исключение JedisDataException, сообщающее мне, что мне нужно выполнить транзакцию перед вызовом get () в ответе транзакции. Есть ли способ использовать результат запроса в той же транзакции, не выполняя ее.

1 Ответ

0 голосов
/ 14 июля 2020

Нет, с транзакцией Redis нельзя. Транзакция Redis заключается в том, что вы отправляете все команды Redis за один go, Redis выполняет эти команды, в то время как команды из других подключений ждут, пока он завершит sh. После завершения он возвращает вам результаты. Обратите внимание: он не возвращает вам результат в середине транзакции, в отличие от MySQL. Таким образом, вы не можете прочитать результат запроса посередине.

Чтобы сделать то, что вы хотите, вам понадобится Lua Script (требуется около десяти минут, чтобы научиться писать то, что вы просили ), он работает на стороне сервера (не нужно возвращать результат клиенту в середине операции).

Вы можете прочитать эти

Redis Транзакция

Redis Lua Скрипт

...