【问题标题】:Redis with PHP - implementing data cachingRedis 与 PHP - 实现数据缓存
【发布时间】:2012-02-21 00:01:39
【问题描述】:

我已经在我的服务器上安装了 redis,并为基于 PHP 的 Web 应用程序中返回的数据实现了对象缓存。 php 模型本质上执行一个相当复杂的查询并返回一个详细的数据数组。我已经测试了缓存,发现一切都按预期工作。我首先检查redis中是否存在key。如果是,redis 返回数据,模型反序列化并返回之前缓存的数据。如果缓存过期,模型执行sql查询,返回数据并在redis中设置key和序列化值。

这是我的问题。

  1. 我不确定如何对其进行真正的基准测试,因为它都是基于浏览器的。有什么工具可以让我获得一个合理的基准来比较缓存和不缓存。我正在考虑一个通过 curl 调用 api 1000 次的 php 脚本。

  2. 我在 redis 中实现了这一点,因为我曾经读过使用 redis 进行缓存可以跨访问该站点的多个会话或 IP 地址工作。例如,如果多个 ip 地址/用户每小时访问 1000 次 api,我假设这种方法将减少 mysql 服务器上的负载,并让 redis 代替返回缓存数据的工作。任何人都可以对此有所了解吗?我的假设是否有效?

欢迎所有的cmets!

谢谢!

戴夫

【问题讨论】:

    标签: php caching redis benchmarking


    【解决方案1】:

    为了对网站进行基准测试,我会使用 Siege 之类的东西,而不是编写特定的 PHP 脚本。

    关于 Redis 的使用,在内存存储(如 memcached 或 Redis)中缓存内容现在非常普遍。 memcached 和 Redis 都适用于此目的,尽管对于纯缓存,memcached 可以说更容易设置。每小时 1000 次仅代表 3.6 TPS - 任何数据存储(包括 MySQL)都将毫无问题地支持此类流量。现在,将此流量乘以 100 或 1000,缓存层(memcached 或 Redis)将成为保护您的数据库所必需的。

    要使用 Redis 进行缓存,您可能需要检查 EXPIRE 命令并查看配置文件中的 maxmemory-policy 参数。

    【讨论】:

    • Didier - 谢谢你的回复!我一定会看看围攻。您对 TPS 的看法是正确的 - 我只是想将其设置为合理的数量以进行基准测试以查看缓存的效果。与此同时,我也开始尝试 APC,并且在这方面取得了很好的成功,因为我看到它也可以用于对象/数据缓存以及操作码缓存。我可以对两者进行试验,也可以将 Siege 作为基准测试。另一方面,我是新来的,并试图给你投票,但我还没有被允许。
    【解决方案2】:

    我已经为 Zend_Cache 库完成了extensive testing 的缓存后端。测试是使用多个 php-cli 进程和随机数据完成的,并考虑了读取性能、写入性能和缓存标记清理性能。如果仅测试缓存后端,则 Web 服务器性能无关紧要,因此我建议通过 CLI 进行测试以简化测试。此外,仅使用一个进程进行测试不会让您准确了解负载在高负载下的后端特性。

    MySQL 本身非常快,如果您正在执行单记录索引查询,那么 MySQL 自己的查询缓存将非常快。我只建议为速度较慢的事物(多个查询的聚合结果或生成 HTML 块)添加一个额外的缓存层。您可以在不包含整个 Zend 框架的情况下使用 Zend_Cache,因此我强烈建议您同时查看 Cm_Cache_Backend_RedisCm_Cache_Backend_File

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 2018-01-09
      • 2017-11-22
      • 2020-08-27
      • 2018-02-14
      • 2020-09-04
      • 2018-04-26
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多