PHP:缓存 RSS 数据以避免每次加载页面时都请求它
我正在解析来自此 RSS 源的数据: http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=SAM|AR|AR005|MONTE%20MAIZ,那里的数据每小时更新一次。
为了解析它,我在类初始化时加载 RSS 并将其转换为可用的对象。
这样做的问题是,每次页面加载时,RSS都会被重新解析,HTTP请求会延迟页面加载。
我正在考虑使用一个cronjob来每小时解析RSS,然后将数据保存在JSON结构中。但我真的不想依赖 cron,因为并非所有共享托管服务器都提供它(尽管它们应该提供)。
关于如何执行此操作还有其他建议吗?
I'm parsing data from this RSS feed: http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&locCode=SAM|AR|AR005|MONTE%20MAIZ, The data there updates once every hour.
To parse it, I load the RSS at the initialization of my class and convert it into an usable object.
The problem with this is that every time the page loads, the RSS is parsed again, and the HTTP request delays the page loading.
I was thinking of a cronjob to parse the RSS hourly, and then save the data in a JSON structure. But I'd really like to not depend on the cron, as not all shared hosting servers provide it (although they should).
Any other suggestions on how to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Zend_Cache。服务器将首次加载提要,但稍后的调用将利用缓存。
实际上,我已经实现了您所详细说明的内容:
您仍然可以让 cronjob 调用 _loadFeedEntries(),这将缓存结果。
您甚至可以在系统中设置 cronjob,每隔 CACHE_LIFETIME 秒导航到您的站点,从而“保持”缓存更新。
You can use Zend_Cache. The server will load the feeds first time, but later calls will utilize the cache.
Actually, I've implemented what you have detailed:
You still can make cronjob to call _loadFeedEntries(), which will cache the result.
You can even make cronjob in your system to navigate to your site every CACHE_LIFETIME seconds, thus "keeping" the cache updated.
您可以根据页面请求进行(非常)简单的缓存,以避免依赖 cron。
也就是说:
当客户端请求您的页面时,尝试从缓存文件加载数据。如果缓存文件不存在或太旧,请访问服务的 RSS 源进行更新并将其写入缓存文件。
写入缓存,
如果您使用
file_put_contents( FILENAME, json_encode( $some_data_struct ));
读取它
您可以使用简单的
json_decode( file_get_contents( FILENAME ));
You could do (very) simple caching upon page request, to avoid relying on cron.
That is:
When a client requests your page, try loading the data from a cache file. If the cache file doesn't exist, or is too old, hit the service's RSS feed for an update and write it to a cache file.
If you write to the cache with
file_put_contents( FILENAME, json_encode( $some_data_structure ));
you can read it in with a simple
json_decode( file_get_contents( FILENAME ));