Кэширование данных JSON - PullRequest
5 голосов
/ 22 июля 2011

Я никогда раньше не кэшировал данные, но я чувствую, что это значительно улучшит мой сайт.

По сути, я извлекаю данные JSON из внешнего API, который помогает базовой функциональности моего сайта. Эта информация на самом деле не меняется так часто, но мои пользователи получают информацию из API тысячи раз в день. Если бы он обновлялся один раз в день, это было бы хорошо. Я хочу ежедневно запускать задание cron, которое будет извлекать информацию и обновлять кеш.

Я уже пробовал несколько разных вещей, обе потянулись с использованием PHP:

1) Хранить данные в таблице SQL
У меня это работало, но нет причины, по которой я должен пинговать базу данных каждый раз, когда я могу просто сохранить ее в базовом HTML / JSON.

2) .JSON-файл (с использованием fwrite)
Я сохранил его, но единственный способ, которым это сработало, - это если функция обратного вызова .getJSON() добавляется к данным JSON, а затем данные заключаются в круглые скобки (я полагаю, что это jsonp).

У кого-нибудь есть какие-либо советы или указания, чтобы вести меня? Как я уже сказал, я никогда не делал ничего подобного, поэтому я даже не знаю, направляюсь ли я в нужном направлении.

Edit:

Хорошо, я поговорил со своим хостингом, и так как я на общем хостинге (dreamhost), я не могу установить memcached, что отстой. Единственная информация, которую они могли дать мне, заключалась в том, что если она включена на http://pecl.php.net/, то я, скорее всего, могу ее использовать. Они сказали, что APC доступен. Я не уверен, подходит ли это моей проблеме. Я хотел бы иметь возможность получить доступ к кешу непосредственно в jQuery. Спасибо

Ответы [ 6 ]

6 голосов
/ 22 июля 2011

Вы можете использовать memcached. Memcached - это хранилище значений ключей в памяти для небольших порций произвольных данных (строк, объектов) из результатов вызовов базы данных, вызовов API или рендеринга страницы. Очень прост в реализации и занимает мало места в системе.

2 голосов
/ 23 июля 2011

Поскольку вы не можете использовать memcached, вернитесь к опции базы данных и сохраните ее в таблице с помощью механизма MEMORY .

1 голос
/ 22 июля 2011

try memcached .Вы можете легко сгенерировать строковый ключ и сохранить с ним любой блоб json.работает как словарь, за исключением того, что сохраняется в памяти.

Существует возможность задать срок его действия (в противном случае он просто остается в кэше навсегда).Поэтому, когда пользователь запрашивает данные, просто проверьте, хранятся ли они в memcached.Если это хорошо, верните его.Если это не так, сделайте все, что вы делаете, чтобы построить его, затем поместите его в memcached с 24-часовым сроком действия.

0 голосов
/ 22 июля 2011

это для хранения:

file_put_contents($path, $json_text);

и это для восстановления:

$json_text = file_get_contents($path);
echo $json_text;

echo может использоваться для передачи json точно так, как это происходит из запроса http.если вам нужно разобрать его в переменную (в javascript), вы можете использовать array = JSON.parse('<?php echo $json_text; ?>');.если вам нужно разобрать в php, используйте $array = json_decode($json_text);.

0 голосов
/ 22 июля 2011

Попробуйте Redis . И хранить данные легко и без неожиданных ошибок при установке / получении - кодировать их с помощью base64.

0 голосов
/ 22 июля 2011

Если ваши данные варьируются в зависимости от пользователя:

Я сделал это, сохранив объект в массиве $ _SESSION.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...