Поскольку redis является однопоточным, наши параллельные запросы становятся сериализованными запросами при доступе к redis. Каково значение использования Redis? - PullRequest
1 голос
/ 31 мая 2019

Обычно мы используем redis для кэширования в проекте Spring.Моя проблема в том, что поскольку redis является однопоточным, то наши параллельные запросы становятся сериализованными запросами при доступе к redis.тогда, каково значение использования redis?

Это только из-за того, что «CPU нечасто становится вашим узким местом с Redis, так как обычно Redis связан либо с памятью, либо с сетью» ......использование конвейерной передачи Redis, работающий в средней системе Linux, может доставлять даже 1 миллион запросов в секунду ...... "?

Я изучаю redis , FAQ по документу Redis

1 Ответ

0 голосов
/ 31 мая 2019

Вы в основном задали два вопроса в одном вопросе:

Каково значение использования Redis.

Ну, Redis - этоИзвестно, что быстро, потому что он хранит данные в памяти.Если вы спросите, является ли однопоточное приложение очень ограничительным - ну, это продукт, который по конструкции работает так, может быть, он мог бы быть еще более производительным, если бы он был многопоточным, в конце концов, это зависит от фактической реализации под капотом.

В любом случае, он предлагает гораздо больше, чем просто «получение данных в памяти»: - множество примитивов для работы - настраиваемое постоянство - репликация данных и многое другое

Если вопросбудет ли кэш в памяти быстрее (вы упомянули Spring Framework, поэтому вы находитесь на Java Land) - тогда да.

Фактически Spring Cache поддерживает Guava Cache (вместо Spring 5 / Spring Boot 2 используется Caffeine для той же цели) - и да, это будет быстрее в сравнении с Redis.Но что, если у вас есть распределенное приложение со многими экземплярами и одним экземпляром, которое что-то рассчитало и поместило в кеш, как вы можете получить ту же информацию из другого экземпляра, не распределяя информацию между экземплярами.Ну, есть такие инструменты, как Hazelcast, но это выходит за рамки этого вопроса, дело в том, что когда приложение выходит за рамки базовых, такие задачи, как синхронизация кэша / поддержание его в актуальном состоянии, становятся гораздо менее очевидными.

Если вы можете выполнять 1 миллион операций в секунду.

Теперь этот вопрос слишком неопределенный, чтобы на него ответить:

  • Какое оборудование использует Redis?
  • Какие конфигурации сети?(после того, как все вызовы Redis сделаны по сети)
  • Как часто вы сохраняете на диске (Redis имеет конфигурации для этого)
  • Используете ли вы репликацию и распределяете ли нагрузку между многими серверами Redis, достигающимиобщая пропускная способность намного выше?
  • Какие именно команды выполняются под этим колпаком?

В любом случае, когда дело доходит до бенчмаркинга, вы можете настроить свою систему дополнительным способом.и используйте инструмент, предлагаемый самой Redis:

Глава по сравнительному анализу Redis в руководстве Redis

Инструмент называется redis-benchmark, вы можете запустить его с различными параметрами и посмотреть, какfast redis на самом деле:

Вот пример (я рекомендую вам прочитать полную статью в ссылке):

$ redis-benchmark -t set,lpush -n 100000 -q
  SET: 74239.05 requests per second
  LPUSH: 79239.30 requests per second

Это говорит: подключитесь к серверу redis, доступному на localhost, запустите(-n) 100000 запросов в тихом режиме (параметр -q) и запуск только тестов, специфичных для двух команд: set и lpush

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...