ФорумПрограммированиеPHP для идиотов → Кэширование в память

Кэширование в память

  • phpdude

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

    Spritz 24 декабря 2011 г. 13:19, спустя 4 часа 25 минут 30 секунд


    master, можно еще попробовать на основе sqlite сделать …
    ты в какой книжке эту хуйню прочитал милок?
    Сапожник без сапог
  • phpdude

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

    Spritz 24 декабря 2011 г. 13:27, спустя 7 минут 19 секунд


    Меня интересует такой вопрос. Допустим мы ставим флаг, что кешь генерируется (т.е. нужно отдавать данные не из кеша), но как сделать, что бы этот флаг сам не стал причиной сбоя?


    ответ простой блеядь!

    Ты в кеш ноду кладешь не САМО значение, а структуру вида
    struct {
    data;
    expires;
    }


    При извлечении из кеша проверяешь time () > expires, если тру, то проверяешь есть ли ключ аля $mycachekey + ".lock" к примеру, если есть - нихуя не делаешь, если нет, то устанавливаешь этот ключ в тру с expires (кеш сервера тут, не структурным, чтобы при фейле ключ стерся на всякий), expires у структуры ставишь на time() + 10 например (ну или сколько тебе точно хватит чтобы произвести ребилд ноды) и записываешь эту структуру назад, ребилдишь данные (по возможности в фоне если позволяет язык, чтобы юзеру отдать быстрый ответ ну или тп), записываешь новую структуру в ноду ключа, удаляешь лок, все готово. Наложений по ребилду клча не будет 100%, пока ребилдится ключ все данные будут доступны из старого кеша, волки сыты, сучки целы :-)

    ну а самой структуре глобальный expires ставим на например expires + 60 - то есть на расчетное время которое кеш дожен работать + запас на ребилд в 60 секунд.

    кто не понял объяснений тот блядь ЛОХ и пусть выбирает себе другую профессию
    Сапожник без сапог
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 24 декабря 2011 г. 15:48, спустя 2 часа 21 минуту 16 секунд

    какое-то капитанство
  • phpdude

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

    Spritz 24 декабря 2011 г. 15:55, спустя 7 минут 25 секунд


    какое-то капитанство
    ну как видишь не для всех похоже
    Сапожник без сапог
  • lolcat

    Сообщения: 383 Репутация: N Группа: Кто попало

    Spritz 24 декабря 2011 г. 16:04, спустя 8 минут 34 секунды

    Спасибо за ЖЖ слоника. Много думал.
  • kostyl

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

    Spritz 25 декабря 2011 г. 5:38, спустя 13 часов 33 минуты 49 секунд

    phpdude, дохера операций в которых могут быть конфликты, ты нихуя не ушел от конфликтов…
  • phpdude

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

    Spritz 25 декабря 2011 г. 8:11, спустя 2 часа 33 минуты 6 секунд


    phpdude, дохера операций в которых могут быть конфликты, ты нихуя не ушел от конфликтов…
    не кешируй их да и все. а конфликты это дело такое. ты же теоретик то, ты то понятно ссышь чото сделать :D
    Сапожник без сапог
  • kostyl

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

    Spritz 25 декабря 2011 г. 8:28, спустя 16 минут 50 секунд

    phpdude, причем тут, ты нормально написал. Но суть вопроса в том, как именно. Мне кажется все равно нужен будет какой то лок. Допустим открывать файл для записи в случае "одновременного" обращения. В таком случае непосредственно запись будет происходить при обновлении и при "одновременном" доступе, что не повлияет на производительность. Зато лок будет на самом низком уровне и тут "атомарность" обновления кеша будет соблюдена. Про sqlite я мож и загнул, но суть та же.. )) понял бля :)
  • phpdude

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

    Spritz 25 декабря 2011 г. 9:03, спустя 35 минут 29 секунд

    kostyl, открывать файл на системе которую кешируют от нагрузки - атомарная операция? ты чо сала переел? :D
    Сапожник без сапог
  • master

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

    Spritz 25 декабря 2011 г. 12:08, спустя 3 часа 4 минуты 27 секунд

    блядь, я же написал про семафоры
    не всё полезно, что в swap полезло
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 25 декабря 2011 г. 16:29, спустя 4 часа 21 минуту 5 секунд

    Кеширую по старинке в текстовые файлы, иногда есть выйгрыш в скорости, особенно с тяжелыми sql-запросами или какой-нибудь хуйней
  • kostyl

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

    Spritz 25 декабря 2011 г. 17:23, спустя 54 минуты 8 секунд

    phpdude, ну это я описал пример, когда все равно кешь в файле хранится. Да это тупо, но блядь я че и спросил - за неименеем лучших примеров. Вот мастер предложил семафоры - да, не плохо, но может есть еще варианты?
  • lolcat

    Сообщения: 383 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2011 г. 9:25, спустя 3 дня 16 часов 2 минуты

    У меня и запросы не тяжелые, но с кэшиком всяко немного быстрее получается.
  • arvitaly

    Сообщения: 292 Репутация: N Группа: Адекваты

    Spritz 31 декабря 2011 г. 7:31, спустя 1 день 22 часа 5 минут

    master,

    Ни одна реляционная и nosql базы не выдержит, когда речь пойдет о сотне тысяч посетителей и миллионов запросов.

    Можно сослаться на собственное кэширование, но если выборка для конкретного объекта к примеру 20 SQL запросов, а в качестве ключа используется сам запрос, то размер такого кэша становится несравним с

    ID: DATA

    в memcache к примеру, для чего собственно он и был создан - это эволюция, а не дополнение

  • master

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

    Spritz 1 января 2012 г. 5:54, спустя 22 часа 22 минуты 45 секунд

    arvitaly, исчезни
    не всё полезно, что в swap полезло

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