2

这个问题之前可能被问过,但我还不能决定我应该使用什么。我正在构建一个小型 API Wrapper,并且有一些方法可以使用我通过该方法获得的数据的一些缓存。

数据为 JSON 格式。因此,当我浏览时,我找到了一些存储这些数据的解决方案。其中之一是APC,它看起来非常简洁,更像是在客户端使用 localStorage。但是后来我发现这是一个没有预装 PHP 的扩展,并且对于最新版本的 PHP 有一些错误(开发人员认为它不稳定)。我也很难将它添加到 XAMPP,因此我可以在本地对其进行测试。

所以我忽略了它并考虑了其他选项,例如在服务器上创建文件。这似乎也是一个不错的主意,直到我发现当我创建一个文件夹时,chmod0755不是很方便。我首先认为这是我做的事情,但后来我在这里读到一篇文章,说一些关于Safe Mode的内容,它不允许我使用0777模式创建文件夹。所以我一直在寻找一个解决方案,我发现使用 FTP 可以解决它。我尝试了 FTP 的东西,它工作得很好,只是我很难实现一种方法让连接保持打开状态,直到它超时,并且每次调用连接到 FTP 并创建的方法时不要覆盖连接文件夹。

如果我没记错的话,我听说的另一个解决方案是Memcache,但这似乎是一种开销。

所以我有点怀疑我应该用什么来缓存数据。如果有人有一些指示,将不胜感激:)

4

3 回答 3

5

无论您做什么,都不要编写自己的缓存解决方案。能够做到这一点的人,不需要在 SO 上提出问题。

  • 安装 APC。它将解决的问题远远多于它创造的问题。
  • 使用 Memcache 和/或 Redis 缓存对象 - 会话、分数等。
  • 使用 Varnish 在 Web 服务器前缓存 HTML。

我使用 APC、Redis、Memcache 和 Varnish 的组合处理每秒超过 10,000 个请求的应用程序。他们非常非常好。

于 2013-02-06T08:16:42.720 回答
1

我正在使用 Mac 进行开发,并使用以下内容从 php 创建文件夹:

$oldmask = umask(0);
chmod($structure, 0777);
umask($oldmask);

如果你在 Windows 上可能是一些 Windows 设置......我没有太多的 Windows 经验。

如果您在创建文件夹时遇到问题,也可以对 MySQL 进行缓存。

尝试为需要缓存的结果创建一个 md5 哈希,并将其与结果和时间戳一起存储到数据库中的表 cacheTbl 中。

当您存储缓存添加到当前时间时,您需要缓存该数据;

接下来,当您需要这些数据时,您首先查看数据库中是否有您请求的有效缓存,如果是您从那里获取它,如果它不在缓存中,则生成它并将其存储为下一个请求。

它可以通过构建两个简单的函数来轻松实现:

SetCache($hash, $content, $seconds);

GetCache($hash);

如果需要缓存方法结果,请在方法生成要缓存的数据后调用 SetCache 函数,并将 $hash 设置为方法名称之类的名称。

在您的方法之上,您检查 GetCache 是否有有效的缓存,如果有,您从那里获取结果并退出 thr 方法,或者如果没有缓存,您执行该方法的其余部分并存储缓存以供下一个请求。

您稍后可以添加一个 cronjob 来清理所有旧缓存。

如果您需要内存缓存,可以查看: http: //memcached.org/

于 2013-02-06T08:52:36.420 回答
1

你可以试试这个,简单,设置2个功能,搞定。 首先,您从缓存中获取对象。如果它为 null,那么您执行查询,API 获取 JSON、XML 或您喜欢的任何内容,然后您将其设置回缓存,用 600 秒为 500、1000 干草 10,000 访问者等提供服务。

使用此缓存,您无需像 memcache 或 APC 一样访问您的 php.ini 或担心 root 权限来设置它。

<?php
    include("php_fast_cache.php");
    // try to get from Cache first.
    $html = phpFastCache::get("keyword,page");

    if($html == null) {
        $html = Render Your Page || Widget || "Hello World";
        phpFastCache::set("keyword,page",$html,600);
    }

    echo or return your $html;
?>
于 2013-04-28T05:46:53.157 回答