#amazon-web-services #redis #elastic-cache
#amazon-веб-сервисы #redis #эластичный кэш
Вопрос:
У меня есть вариант использования, когда мне нужно извлечь все ключи из AWS Elastic cache (redis), я подумал об использовании MultiGet, чтобы просто избежать сетевых вызовов, но это занимает больше времени по сравнению с отправкой параллельных запросов. ниже приведены подробности
Я использую springboot jedis, и у меня 5000 ключей в redis
redisTemplate.opsForValue().get(key))
// taking 100 ms
return redisTemplate.opsForValue().multiGet(keys);
// All 5000 , taking around 24 second
Пакеты до 500 и параллельная отправка с использованием задачи spring asyc с 10 потоками, занимающими около ~ 5 секунд
return redisTemplate.opsForValue().multiGet(batchedkeys);
Поэтому я не могу понять, как лучше всего получить все ключи, поскольку я прочитал здесь, что redis имеет один рабочий и несколько потоков ввода-вывода. таким образом, один запрос с несколькими ключами должен иметь в целом меньшее время отклика по сравнению с несколькими запросами с отдельными ключами из-за сокращения сетевых вызовов. Пожалуйста, поправьте меня, если мое предположение неверно
Комментарии:
1. Кажется, в вашем подходе нет ничего плохого. Вы уверены в своем расчете времени? Может быть, время других процессов каким-то образом было включено?
2. да, мои временные метки были при входе и выходе из этих вызовов. Добавлен правильный журнал, также я проверил сетевые журналы
3. Вы пробовали
redisTemplate.opsForValue().get(key))
использовать все ключи? Все ли они находятся в пределах 100 мс?4. Да, когда я извлекаю все по отдельности, это было от 100 до 120 мс
5. Я просто плюю здесь. Можете ли вы попробовать использовать Jedis напрямую?