Redis与PHP-实现数据缓存


Redis with PHP - implementing data caching

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

以下是我的问题。

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

  2. 我在redis中实现了这一点,因为我曾经读到redis的缓存将在访问网站的多个会话或ip地址中工作。例如,如果多个ip地址/用户每小时访问api 1000次,我假设这种方法将减少mysql服务器上的负载,并让redis来返回缓存的数据。有人能解释一下吗?我的假设有效吗?

欢迎所有评论!

谢谢!

Dave

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

关于Redis的使用,在内存存储中缓存东西(如memcached或Redis)现在非常常见。memcached和Redis都适用于此目的,尽管对于纯缓存,memcached可以说更容易设置。每小时1000次仅代表3.6 TPS-任何数据存储(包括MySQL)都将支持这样的流量,而不会出现任何问题。现在,将这个流量乘以100或1000,缓存层(memcached或Redis)将成为保护数据库的强制性层。

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

我已经为Zend_cache库做了大量的缓存后端测试。测试使用多个php-cli进程和随机数据进行,并考虑了读取性能、写入性能和缓存标记清理性能。如果只测试缓存后端,则与web服务器性能无关,因此我建议通过CLI进行测试以简化测试。此外,只使用一个进程进行测试并不能准确了解重负载下后端的特性。

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