Как правило, клиент накладывает только накладные расходы на пространство (например, память) и оптимизируется для обеспечения высокой производительности.
Однопоточный синхронный запрос / ответ ограничен (независимо от того, каким клиентом вы пользуетесь, какой язык вы используете) со скоростью около 10-15 К / с. Это потому, что вы используете крошечную долю MTU и еще больше блокируете ожидание ответа.
В режиме синхронизации RTT одного Req / Rep разделит окно на 1 с. Таким образом, если RTT, скажем, 1 мс, вы можете разместить только 1 КБ запросов / ответов за одну секунду. Это просто физика, и с этим ничего не поделаешь. :) Ваши 4k Req / s подразумевают, что вы получаете RTT за 0,25 мс (в среднем).
Но JRedis также предоставляет асинхронные конвейеры (что идеально подходит для вашего случая использования). Я предлагаю вам использовать это:
При использовании асинхронного конвейера достаточно просто разделить 100 МБ / MTU_IN_BITS, чтобы получить представление об идеальной идеальной скорости полного насыщения канала (если полезная нагрузка вашего запроса меньше, чем MTU. (Вы может приблизиться к этому пределу с помощью JRedis Pipelines.) Опять же, обратите внимание, что при конвейерной обработке сам размер сообщения определяет пропускную способность request / s , но, очевидно, пропускная способность byte ограничена сетью.