Можно ли использовать пул соединений jedis для достижения многопоточного поведения?
Несмотря на то, что для связи с redis вы используете несколько соединений, потоков или обработку, все эти команды помещаются в одну очередь, и redis получит один за другим и выполнит один за другим. И каждая отдельная команда является атомарной.Так что это все еще однопотоковое поведение в аспекте redis.
Так как клиентские запросы используют разные соединения, следовательно, один redis должен параллельно обрабатывать несколько запросов на сервере, верно?
Не всегда команды от разных клиентов могут поступать в Redis в произвольном порядке, поэтому, если эти команды имеют какое-либо отношение к данным, могут произойти опасные вещи.
рассмотрим этот простой сценарий, если в Redis есть счетчик S, есливсе клиенты выполняют команду INCR, тогда все в порядке, потому что каждая команда выполняется атомарно, но если какой-то клиентский код похож на что-то, что:
s = get S
t = s + 10
set S t
Тогда все будет неправильно.И вы должны использовать команду Multi / exec, чтобы гарантировать, что несколько команд будут атомарными, а не только одна команда.Более подробную информацию о транзакциях в Redis можно найти на этой странице 1017 *.Подробно.