ФорумПрограммированиеPHP для идиотов → возникли вопросы о кеш машинах

возникли вопросы о кеш машинах

  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 4 ноября 2009 г. 3:19

    Итак, список вопросов:

    1) у меня в php.ini отведено 16 мб памяти (memory_limit). Значит ли это, что кеш-машина сможет использовать только вот эти 16 мб?

    если ответ на вопрос 1) да, то:
    2) что будет, если когда посредством кеш-машины я сохраняю 10 мб, а моему скрипту вдруг внезапно потребовалось 12 мб (12+10 > 16)?

    3) что будет, когда кеш-машина начнет выходить за пределы отведенной для нее памяти? Начнется паника и данные из памяти удалятся? Все? случайные записи? записи, которые были сохранены раньше всего (queue)?

    если ответ на вопрос 3) да (данные будут удалены), то:
    4) можно ли как-то отследить это неприятное событие?

    5) какие есть ограничения на длину ключа у кеш-машин?

    Прошу отвечать в таком стиле:
    кеш-машина xCache: 1) да, 2) да, 3) нет (потому что бла-бла), 4) да

    почему я их задаю?
    да, найдется умник, который скажет: ну а хуле, поставь все эти кеш-машины, и потестируй. Ребята, их очень много, ставить каждую и на каждой тестить - нет времени. Наверняка же кто-то работал как минимум с какой-то одной. Вот он пусть и напишет.
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 4 ноября 2009 г. 10:28, спустя 7 часов 9 минут 5 секунд

    Нужно привести все известные мне "кеш-машины" и для всех расписать пункты, или таки назовёте те, которые вас интересуют?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 4 ноября 2009 г. 10:38, спустя 10 минут 5 секунд

    vasa_c, со всеми работал?
    особый интерес у меня к APC и eAccelerator. Чуть меньше - Memcached. Главное по первым двум знать ответы

    ps: Тут же вроде все на "ты"?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 4 ноября 2009 г. 10:46, спустя 8 минут 4 секунды

    васяц, распиши для всех которые знаешь. будет статья неплохая. +1 получишь )
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 4 ноября 2009 г. 11:09, спустя 22 минуты 39 секунд


    васяц, распиши для всех которые знаешь. будет статья неплохая. +1 получишь )
    +1 ) да, будет интересно почитать )
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 4 ноября 2009 г. 12:17, спустя 1 час 8 минут 24 секунды


    особый интерес у меня к APC и eAccelerator. Чуть меньше - Memcached. Главное по первым двум знать ответы


    APC, eAccelerator это одно, а memcached - нечто другое
    Спустя 75 сек.
    http://adw0rd.ru/2009/freebsd-eaccelerator/
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 4 ноября 2009 г. 12:32, спустя 14 минут 49 секунд

    Ну, ставить всё и проверять не обязательно, достаточно для начала почитать документацию.
    Я использую memcache, про него и напишу.
    APC и eAccelerator же вообще изначально предназначены для кэширования байт-кода, а не данных.

    1. у меня в php.ini отведено 16 мб памяти (memory_limit). Значит ли это, что кеш-машина сможет использовать только вот эти 16 мб?


    Задумываемся над тем, что такое memory_limit. Это максимальная память, которую может захапать отдельный сценарий. Сценарий заканчивается - память освобождается. Все же эти кэши предназначены для доступа из различных процессов, поэтому память конкретного процесса к ним никакого отношения не имеет.

    У каждого кэша свои настройки. Читаем доки.
    http://danga.com/memcached/ (первый же пример запуска)
    http://www.eaccelerator.net/wiki/Settings
    http://ru.php.net/manual/en/apc.configuration.php

    3) что будет, когда кеш-машина начнет выходить за пределы отведенной для нее памяти? Начнется паника и данные из памяти удалятся? Все? случайные записи? записи, которые были сохранены раньше всего (queue)?


    Нет, паники не начнётся. Данные будут удалены совершенно спокойно.
    По идее те, которые используются меньше всего. А может какие-то другие, а может и даже тогда, когда есть память.
    Кэш не должен гарантировать сохранность данных, а наоборот, должен гарантировать их удаление через заданное TTL-время. На то он и кэш - для кэширования промежуточных результатов, которые можно сохранить.

    В eAccelerator походу по другому. eaccelerator_put: When false is returned, this could mean the limit of the total cache is exceeded or the size of the data is to big for the eaccelerator.shm_max directive.

    можно ли как-то отследить это неприятное событие?

    Про eAccelerator выше.
    А про memcache - зачем и в каком виде? И что делать если удастся?

    В кэше не нужно такого. А нужно подобное хранилище с сохранением данных: memcacheDB, redis и т.д.

    какие есть ограничения на длину ключа у кеш-машин?

    У мемкэша, по-моему 250 символов. Можно уточнить в документации, как и для всех остальных.
    Хотя если возникают такие вопросы, может вы что-то не совсем так делаете? Зачем слишком большие ключи?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 4 ноября 2009 г. 13:55, спустя 1 час 22 минуты 56 секунд

    APC и eAccelerator же вообще изначально предназначены для кэширования байт-кода, а не данных.

    однако они офигенски с этим справляются. Побыстрее мемкеша даже

    Хотя если возникают такие вопросы, может вы что-то не совсем так делаете? Зачем слишком большие ключи?

    да не, все нормально. Это я так, перестраховываюсь. Примерный размер ключа у меня будет 32-40 символов хеш + около 12 символов что-то типа тега (что б по регекспу удалять). Некоторые данные будут без хеша, только с тегом.
    Спустя 23 сек.
    в общем первый пошел) Спасибо
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 4 ноября 2009 г. 14:19, спустя 24 минуты 7 секунд


    однако они офигенски с этим справляются. Побыстрее мемкеша даже



    еще бы блядь :-D
    Сапожник без сапог
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 12:22, спустя 22 часа 3 минуты 15 секунд


    однако они офигенски с этим справляются. Побыстрее мемкеша даже
    Это типа сравнили пушистое с кислым?
    Спустя 243 сек.

    По идее те, которые используются меньше всего. А может какие-то другие, а может и даже тогда, когда есть память.
    Кэш не должен гарантировать сохранность данных, а наоборот, должен гарантировать их удаление через заданное TTL-время. На то он и кэш - для кэширования промежуточных результатов, которые можно сохранить.

    У нас написана специальная обертка над мемкешом, которая раз в N запросов, сохраняет данные в файловый кеш.
    Таким образом при падение мемкеша или случайном протухании в нем важных данных они поднимаются снова. В основном это расчитано на аварийное востановление, ибо по идее логики приложения критичные данные не должны пропадать.
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 12:51, спустя 28 минут 25 секунд

    AlexB, покажи код кешируемый при вашей обертке а?)
    Спустя 12 сек.
    в смысле примеры кода где кеш используется
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 5 ноября 2009 г. 16:05, спустя 3 часа 14 минут 24 секунды


    AlexB, покажи код кешируемый при вашей обертке а?)
    Спустя 12 сек.
    в смысле примеры кода где кеш используется
    +1 )
    AlexB, очень интересная весчь, на неё глянуть можно? )
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 6 ноября 2009 г. 5:02, спустя 12 часов 56 минут 45 секунд

    Нате, ковыряйтесь
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 6 ноября 2009 г. 5:17, спустя 15 минут 11 секунд

    AlexB, спасибо. посмотрю ближ время :)
    Сапожник без сапог
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 6 ноября 2009 г. 6:09, спустя 51 минуту 51 секунду

    Абырвалг, это мне напомнило очаровательный оператор из c#

    там можно было бы написать таг.

    $s['persistent'] = !$s['persistent'] ?? false;




    ps: убрал изсет, всегда работаю ~E_NOTICE
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!