Несколько транзакций Redis (multi/exec) в одном конвейере с использованием Jedis

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

Из того, что я видел до сих пор, кажется, что можно только переключить весь конвейер в атомарную транзакцию.

Pipeline pipeline = jedis.pipelined();
pipeline.multi(); // Does not return a Jedis Transaction
// From there, everything done on Pipeline is in a single transaction.

Я ожидал, что pipeline.multi() вернет Transaction.

Я подозреваю, что наличие всего конвейера в одной транзакции будет стоить больше, чем наличие нескольких небольших блоков транзакций в одном конвейере.

Это то, что поддерживается Redis? Если да, можно ли это сделать с помощью Jedis?

Спасибо!


person GuiSim    schedule 25.04.2016    source источник


Ответы (1)


Проведя еще несколько тестов и раскопок, оказалось, что я могу вызывать pipeline.multi() и pipeline.exec() более одного раза и, таким образом, создавать несколько транзакционных блоков.

person GuiSim    schedule 25.04.2016
comment
не могли бы вы поделиться ссылкой, где вы это нашли. - person Abhishek; 19.02.2019
comment
когда вы говорите, что можете вызывать пары multi и exec более одного раза, не означает ли это, что команды, переданные перед выполнением каждого exec, будут выполнены. это превосходит цель конвейера, если есть круговые поездки на сервер Redis. - person Abhishek; 19.02.2019
comment
Это было почти 3 года назад .. Я не помню ссылку, извините @Abhishek, я не уверен, что множественное pipeline.exec() приводит к нескольким круговым поездкам. Я смутно припоминаю, что это метод, который я в итоге использовал, и что он действительно решил мою проблему. Извините, я не могу быть более полезным! - person GuiSim; 19.02.2019