@vladislav997

Почему Redis обрабатывает запрос в 5 раз дольше, чем запрос напрямую в бд?

есть таблица на 10к записей, поместил ее редис, решил сравнить время запроса, в итоге получилось что запрос в редис 400-500 ms, а напрямую в бд - 80-110 ms.

redis:
const localeCities = await this.redis.get('locale_cities');
const data = localeCities.filter(
    (city) => city.name_en.toLowerCase().includes(place.toLowerCase())
);

напрямую:
const data = await this.localeCityRepository
    .createQueryBuilder('city')
    .where('LOWER(city.name_en) LIKE :place', { place: `%${place.toLowerCase()}%` })
    .getMany();

почему так?
---------
upd: как записываю данные в redis
async setLocaleCities() {
      const cities = await this.localeCityRepository.find();

      const filteredCities = cities.map((city) => ({
        name_en: city.name_en,
        // другие поля
      }));

      return await this.redis.set(
        'locale_cities',
        JSON.stringify(filteredCities),
      );
  }
  • Вопрос задан
  • 305 просмотров
Решения вопроса 1
Eugene-Usachev
@Eugene-Usachev
Так в Postgres ты производишь выборку на стороне СУБД, а в случае с Redis выгружаешь всё по сети. Если в среднем строка весит 100 байт (а ты JSON используешь, так что там и больше быть может), то ты гоняешь по сети 10 000 * 100 байт, то есть примерно мегабайт памяти. Так и потом ты этот JSON разбираешь в JS (в нём же, да?), в то время как Postgres разбирает таблицу в C++.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Почему бы тебе не сохранять каждый город как отдельный ключ в Redis... например locale_city:moscow, local_city:tokyo.

А потом искать : redis.keys("local_city:*sc*")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы