[PHP] Вопрос по apc_add
1.
Антон (14.12.2014 / 23:34)
Всем привет!
Требуется складывать в хранилище значения(ассоциативные массивы, не объекты).
Так вот в мануале вообще нет примеров как им пользоваться, только примеры которые повторяют apc_store(), но мне нужно именно добавлять в хранилище новые массивы с временем жизни массива в хранилище.
Я пытаюсь ложить так
На входе $items содержит список массивов
foreach ($items as $item) {
apc_add('category_items', $item, $item['leftTime']);
}
Все отрабатывает нормально, каждый массив живет минимум 1 мин, запускаю скрипт еще раз, пытаюсь получить из хранилища кеш вот так
$items = apc_fetch('category_items');
И получаю только один самый первый массив который туда был положен..
Гугл перерыл, но не нашел как пользоваться apc_add().
Кто то может поделиться опытом?
2.
KpuTuK (14.12.2014 / 23:52)
WmLiM (14 Декабря 2014 / 23:34)
Всем привет!
Требуется складывать в хранилище значения(ассоциативные массивы, не объекты).
Так вот в мануале вообще нет примеров как им пользоваться, только примеры которые повторяют apc_store(), но мне нужно именно добавлять в хранилище новые массивы с временем жизни массива в хранилище.
Я пытаюсь ложить так
На входе $items содержит список массивов
foreach ($items as $item) {
apc_add('category_items', $item, $item['leftTime']);
}
Все отрабатывает нормально, каждый массив живет минимум 1 мин, запускаю скрипт еще раз, пытаюсь получить из хранилища кеш вот так
$items = apc_fetch('category_items');
И получаю только один самый первый массив который туда был положен..
Гугл перерыл, но не нашел как пользоваться apc_add().
Кто то может поделиться опытом?
так само собой))) у тебя ключ то одинаковый на все массивы вот он и перезаписывает)))
3.
Антон (15.12.2014 / 00:24)
2.
KpuTuK, блин, я думал первое значение это имя хранилища куда складываются данные... как быть тогда.
Добавлено через 07:23 сек.
2.
KpuTuK, он не перезаписывает, это написано в мане, только вот не разобрал что там нельзя сделать так как мне надо. Придется дописывать сравнение времени и удаление массива если время хранения истекло((
4.
KpuTuK (15.12.2014 / 00:33)
WmLiM (15 Декабря 2014 / 00:24)
2. KpuTuK, блин, я думал первое значение это имя хранилища куда складываются данные... как быть тогда.
приведи пример массива $items))
Конечно если имена известны то можно
foreach ($items as $item) {
apc_add('items_'. $item['name'], $item, $item['leftTime']);
}
ну или же просто скопом все категории
apc_add('category_items', $items, 'время');
ну и соответственно
$items = apc_fetch('category_items');
Добавлено через 02:15 сек.
http://php.net/manual/ru/function.apc-store.php ?
5.
Антон (15.12.2014 / 02:32)
4.
KpuTuK, вот имена как раз и не известны, я хотел сделать так чтобы каждый массив находился в определённом контейнере, из которого удалился бы через время которое ему выделили.
Придётся дописать проверку контейнера на предмет устаревших массивов,больше ничего не могу придумать..
6.
Антон (15.12.2014 / 02:49)
А вообще можно получить доступ к кешу который был создан в одном скрипте из другого?
7.
Владислав (15.12.2014 / 03:16)
6.
WmLiM, да
8.
Антон (15.12.2014 / 06:03)
7.
byvlad, спасибо, значит я где-то ошибся.
9.
Антон (15.12.2014 / 09:56)
А в другом скрипте чтобы получить данные из кеша так же надо использовать apc_fetch(key)?
10.
Антон (15.12.2014 / 11:47)
Не могу понять что я не так делаю...
Ложу в одном скрипте массив с пометкой через сколько удалить
apc_store('item', $item, 600);
Тут же загружаю другой скрипт где пытаюсь вытащить массив
$item = apc_fetch('item');
В $item получаю false, не могу понять как достать кеш положенный в хранилище в другом скрипте..
11.
Антон (15.12.2014 / 22:48)
Сейчас попытаюсь объяснить полностью ситуацию с которой столкнулся может кто подскажет..
Вопчем есть php скрипт который граббит страничку сайта, его я отлаживал через XDebug все работает как часы,он ложит то что спарсил(списки) в кеш таким кодом
apc_store('item', $item, 600);
Все нормально ложется и берется из кеша. Этот скрипт запускает в фоне другой скрипт который должен брать эти списки из кеша, сам граббер я запускаю командой
exec("nohup php $script_path >/dev/null 2>&1 &");
И вот тут начинается странное, данные в кеш даже не ложатся, не то чтобы их как то взять от туда. Сам скрипт выполняется, я проверял каждую строчку кода путем записи темпового файла на предмет того что если где то ошибка то файл не запишется, но я даже проверял данные есть перед тем как положить их в кеш, а вот еще странно то что функция apc_store() возвращает false при таком запуске. Я понять ничего не могу как с этим бороться.
12.
Антон (15.12.2014 / 23:26)
Выше описанное решено путем включения в конфиге apc функции apc.enable_cli.
Теперь появилась другая проблема, данные записываются и читаются нормально, но только из граббера, а вот из другого скрипта они уже не считываются, но вот что интересно функция apc_exists() показывает что в хранилище есть кеш с таким ключем, но вот пытаясь вытащить кеш apc_fetch(key) получаю false.
Замкнутый круг какой то, только одно решилось появилось другое..
13.
Антон (16.12.2014 / 14:34)
Что то у memcache та же дребедень, только на этот раз данные не ложатся в кеш
14.
Антон (16.12.2014 / 15:13)
Есть кто нет тут вообще кроме ботов?
URL:
https://visavi.net/topics/41705