2010-06-14 2 views
4

Я работаю над некоторым старым (ish) программным обеспечением на PHP, которое поддерживает массив $ cache, чтобы уменьшить количество SQL-запросов. Я думал просто положить memcached на свое место, и мне интересно, избавиться от внутреннего кэширования или нет. Будет ли еще увеличение производительности, если я сохраню внутреннее кэширование или хватит на memcached?memcached против внутреннего кэширования в PHP?

+1

Benchmark различные подходы в объеме приложения и посмотрим, что произойдет. – salathe

+0

Как он поддерживает массив '$ cache' для просмотра страниц? Сериализовано ли оно в файл? Он хранится в APC/Eaccelerator/Memcached/DB/etc? – ircmaxell

+0

Кажется, что нынешний подход бесполезен и нуждается в пересмотре. Каково использование кеша в одном сценарии выполнения? Это похоже на более плохой дизайн, чем реальная потребность в кеше. Действительно ли это приложение требует кэширования? –

ответ

4

Похоже, что memcache (который реализован на металле) будет быстрее, чем какая-либо интерпретируемая php схема кэширования.

Однако: если он не сломан, не исправляйте его.

Если вы удалите код пользовательского кэширования, вам, возможно, придется иметь дело с другим кодом, который зависит от кеша. Я не могу говорить о качестве кода, который вы должны поддерживать, но похоже, что это одно из тех, «вероятно, не стоит».

Позвольте мне сказать так: Доверять ли оригинал (-ы) разработчику, чтобы он написал код, который будет работать, если вы вырвите кеширование? (я, вероятно, не стал бы)

Так что, если существующее кэширование не дает вам проблем, я бы рекомендовал не принимать его.

+3

Как вы думаете, что Memcache будет быстрее интерпретируемой системы (в общем)? Это связано с TCP-связью ... Memcache быстрее, чем запрос к БД, так как оба попали в сеть, но это не обязательно быстрее, чем чтение php-файла с диска ('$ foo = include ('myfoofile.php');' где myfoofile. php содержит ' ircmaxell

+0

Отличный совет ... ситуация в том, что ведущий разработчик ушел и оставил меня (нового парня!) Беспорядок недокументированного кода ,Кэширование вообще не инкапсулировано, это глобальная переменная, на которую тысячи раз ссылаются на код, который действительно влияет на читаемость и запах плохого дизайна, поэтому с точки зрения архитектуры (на мой взгляд!) Это нарушено :-) – bcoughlan

+0

@ircmaxell: Я предполагаю, что оба попали в сеть, потому что его вопрос касается доступа к базе данных. – Kris

1

Там есть преимущество в использовании кэша памяти против локального кэширования, если:

1) вы имеете Mulitple вебсервер убегал ту же базу данных, и Memcache настроить для запуска на нескольких узлах

2) база данных делает не выполнять кэширование результатов запроса или очень медленно получить доступ

В противном случае, если код кеширования не очень плохой, вы не должны ожидать значительного выигрыша в производительности.

НТН

C.

5

Согласно this блоге, внутренний массив PHP является способ быстрее, чем любой другой метод:

Cache Type    Cache Gets/sec 

Array Cache      365000 
APC Cache       98000 
File Cache       27000 
Memcached Cache (TCP/IP)   12200 
MySQL Query Cache (TCP/IP)   9900 
MySQL Query Cache (Unix Socket) 13500 
Selecting from table (TCP/IP)  5100 
Selecting from table (Unix Socket) 7400 
+1

У меня много таких кеш-памяти. Это действительно быстрее. Тем не менее, я вводя MemCache медленно по двум причинам: 1) Некоторые из этих массивов дублируются каким-то образом по другим сценариям, используя MemCache, объединив это 2). Хотя массивы быстрее, они потребляют память и чем больше массив, тем больше памяти. И MemCache достаточно быстр. ** В заключение: Для меня я решил использовать MemCache. Иногда я сохраняю оба на некоторое время, добавляю комментарий TODO и удаляю массив через пару недель. Надеюсь, это поможет – tanovellino

+0

Redis также очень интересен, особенно с возможностью хранения данных на диске и возможностью простой синхронизации данных между несколькими серверами. И если вы хотите действительно высокую производительность с помощью php, я рекомендую изучить [Swoolle] (https://github.com/swoole/swoole-src). Вы получите чрезвычайно низкое время отклика для любой кешированной страницы (на моем компьютере, redis кэшированные html-страницы загружаются в ~ 2 мс с помощью swoole, вместо ~ 10 мс с традиционным php 7 - сервер [h2o] (https: // h2o. examp1e.net/) в обоих случаях страницы были загружены в firefox). –

Смежные вопросы