Yii2: какой кэш быстрее?

16.01.2017

Сравнение способов кэширования данных в yii2

Сейчас все кому ни лень, на самых простых проектах, устанавливают redis для хранения сессий и кэша. И думают что раз редис все хранит в памяти то он очень быстрый, поэтому мы возьмем 4 самых популярных хранилища кэша (DbCache, FileCache, MemCache и RedisCache), и проведем сравнение в скорости работы с ними, дабы выяснить кто есть быстрее.

Оговорю исходные данные: локальный компьютер (6 ядер, 16 Гб оперативы), окружение под докером.

Кладем в кэш 243 страны и 1174 города России (ну вот что было под рукой), давайте проверим сколько времени понадобится для 1000 и 10 000 обращений(get) к кэшу стран и городов по-отдельности.

Код для теста выглядит примерно так: https://gist.github.com/neo-classic/1e4ce615d11845...

1000-small 10000-small 1000-big 10000-big
yii\caching\DbCache 0.29597496986389 3.4144880771637
yii\caching\FileCache 0.13741493225098 1.3948631286621 0.73716807365417 7.1196439266205
yii\redis\Cache 0.33352589607239 3.1606900691986 1.4502551555634 13.193529844284
yii\caching\MemCache* 0.49091291427612 5.101499080658 1.6024460792542 15.228641986847

*использовал memcached
**соответственно 1000 получений кэша и 10000 получений.

А теперь давайте подумаем почему обычный файловый кэш самый быстрый? Я думаю это потому что меньше системных вызовов, нет накладных расходов в виде обработки запроса кодом редиса или мемкэша.

Как мне подсказал коллега, файловый кэш ещё можно попробовать ускорить: создать ram-диск, поэкспериментировать с функциями кэширования.

Подводя итог можно сказать, что для простого проекта с 1 бэкенд-сервером на php(или в принципе 1 сервером для всего), достаточно файлового кэша, скорее всего вы быстрее упретесь в производительность mysql/php, чем в кэш. В том случае, если у вас уже несколько php-серверов, то Вы уже и сами знаете чем распределить сессии или кэш.

blog comments powered by Disqus
Наверх