redis лучший способ получить несколько ключей с помощью jedis

#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 напрямую?