如何在现有网站上逐步引入和测试memcached?

时间:2009-04-21 20:17:20

标签: php memcached

我并不是说实际安装它。我目前使用LAMP进行开发,并希望开始在高流量站点使用memcached。应缓存哪些类型的db调用? (所有?)以及在开发服务器上进行负载测试的好方法是什么?我是否应首先在我的生产网站上查看基准测试?该网站主要是选择,只有很少的更新/插入。在ram使用与流量之间是否应遵循一般指导原则,还是主要仅通过反复试验?

感谢。

4 个答案:

答案 0 :(得分:1)

我将首先使用支持辅助功能的查询。观察它如何响应首先被缓存,稍微修补一下。然后,当您了解您的网站如何对其做出反应时,然后开始尝试缓存其他查询。我从未使用过memcached,但我正在使用codeigniter中的查询缓存。

我开始使用缓存查询,用于填充我网站上的某些下拉框和表单元素。它们很少更改,并且它们不会随着管理操作而更改,例如将新文件加载到向我的表添加记录的数据库中。如果您有任何疑问,我会建议先尝试。

答案 1 :(得分:1)

始终先测量然后优化。写下你的主要瓶颈并对它们进行一些好的性能测试。

目前没有很多基准程序可以模拟你自己的负载,我认为我不能推荐一个,因为每个网站都是独一无二的。

但是有一些工具试图模仿高流量。

答案 2 :(得分:1)

首先,它取决于您需要使用多少内存,需要数据的频率以及数据更新的频率。

  

应缓存哪些类型的数据库调用? (所有?)

如果您以大约相同的速率更新数据,那么它可能不值得缓存。

正如埃里克所说,下载以及您为网站使用的任何其他静态内容都会充分利用内存缓存。

请记住在更新后删除/刷新缓存的项目。

  

什么是在开发服务器上进行负载测试的好方法?

不确定您对此进行了哪种负载测试。

  

我是否应首先在我的生产网站上查看基准测试?该网站主要选择极少的更新/插入。

查看您正在进行的查询类型,可能会记录它们以及调用它们的次数。最常见的可能是缓存。

还要确保没有任何其他可以首先进行的SQL优化。

  

对于ram使用情况与流量相比,是否存在应遵循的一般指导原则,还是主要仅通过反复试验?

我认为没有太多的公羊与交通关系。我会弄清楚你的盒子需要在高峰时段运行什么样的ram,并相应地设置你的内存缓存限制。

答案 3 :(得分:1)

如果您有很多SELECT个并且很少写入数据库,那么MySQL的查询缓存应该可以很好地为您缓存数据。

要了解查询缓存的有效性,请尝试以下操作:

> SHOW GLOBAL STATUS LIKE 'Qcache_hits';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Qcache_hits   | 735740 |
+---------------+--------+
1 row in set (0.00 sec)


> SHOW GLOBAL STATUS LIKE 'Com_select';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Com_select    | 5644038 |
+---------------+---------+
1 row in set (0.00 sec)

要查找命中率计算Qcache_hits / (Qcache_hits + Com_select)

在这种情况下,它是735740 / (735740 + 5644038) = 0.1153

这是11%的命中率并且相当差。

如果您在计算机上看到更高的%,那么使用memcached的情况可能会更少。

MySQL的查询缓存在很多情况下运行良好(我怀疑这包括你的)。每次更新表时,缓存条目都会失效(即使您的缓存查询与未更改的行相关),这是一个很大的缺点。在某些情况下,当您和您的应用程序可以比MySQL查询缓存更智能地了解缓存过期时,您可以使用memcached来缓存更接近行级别的项目。

让我知道查询缓存命中率的结果。你甚至可能发现你现在已经禁用了查询缓存(!)

您可以通过运行以下查询来验证它是否已启用:

> SHOW GLOBAL VARIABLES LIKE '%cache';

检查那里的have_query_cache = YESquery_cache_size > 0