Laravel 7: MariaDB в сочетании с Redis, но Redis работает медленнее с большими объектами - PullRequest
1 голос
/ 18 июня 2020

Я успешно реализовал комбинацию redis и mysql. В одном разделе своего приложения я думал, что уменьшу нагрузку на сервер mysql и буду использовать redis до тех пор, пока данные не будут изменены, однако я заметил, что это все еще быстрее, когда те же данные извлекаются из Mysql, чем из redis.

Вот сценарий.

User1: 10 000 записей с редким изменением раз в день или около того.

То, что я делаю, - это весь объект, который извлекает эти 10K записей (сериализованный объект размером около 20 МБ) сохраняется в redis. Идея состоит в том, что, поскольку последующие от 100 до 1000 запросов будут только обновлением страницы, почему бы не избежать mysql совпадений и не получить эти данные из redis.

Однако я заметил, что когда этот объект извлекается из Redis, это занимает больше времени, чем когда я проверяю sh redis и выполняется запрос mysql. Я думал, что redis был бы быстрее или имел бы ту же mysql -подобную скорость, по крайней мере, но здесь все по-другому. Ошибка "разрешенная память исчерпана" (которую я знаю, как исправить), но она не выдает никаких ошибок, когда те же данные извлекаются из mysql.

Может быть, Redis не подходит для кеширования огромных объектов? Или есть еще что-то?

Спасибо

1 Ответ

2 голосов
/ 18 июня 2020

Redis не предназначен / не подходит для хранения / выборки больших объектов. Вы будете страдать при получении / установке этих объектов в сети / пропускной способности. Поскольку он однопоточный, другие запросы также будут страдать при сохранении / выборке этих больших объектов.

Как указано в документации по тесту ;

Скорость RAM и пропускная способность памяти кажутся менее критичными для глобальной производительности, особенно для небольших объектов. Однако для large objects (>10 KB) это может стать заметным. Обычно покупка дорогих модулей быстрой памяти для оптимизации Redis не является рентабельной.

Что вы можете сделать, так это перепроектировать уровень кэша с помощью hashes или lists в зависимости от запроса требования вашего приложения. Вы можете проверить здесь для получения дополнительной информации. Также я ответил на аналогичный вопрос в здесь

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