我感觉我网站的Memcached查询速度比Mysql慢。请查看我从 New Relic 获得的网站性能截图。
我不知道如何在我的 CentOS 服务器上优化 memcached。请查看 Memcached 的配置和性能截图。我觉得总连接数很高。
请查看下面的实时统计数据
下面是我在我的网站中使用Memcached的方式
<?php
class dataCache {
function setMemData($key, $var, $flag = false, $expire = 36000) {
global $memcache;
if (!$memcache) {
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die("Could not connect");
}
if ($result = $memcache->set($key, $var, $flag, time() + $expire)) {
return TRUE;
} else {
return FALSE;
}
}
function getMemData($key) {
global $memcache;
if (!$memcache) {
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die("Could not connect");
}
if ($data = $memcache->get($key)) {
return $data;
} else {
return FALSE;
}
}
function delMemData($key) {
global $memcache;
if (!$memcache) {
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die("Could not connect");
}
if ($result = $memcache->delete($key)) {
return TRUE;
} else {
return FALSE;
}
}
}
并且在每个PHP页面的最后,我使用下面的方式关闭连接
if(isset($memcache)){
$memcache->close();
}
这个服务器需要更多内存吗?如何减少连接数?有什么改进性能的建议吗?
------------编辑------------------------
如评论所述,当前连接数为9。总连接数为671731。连接数可能不是问题。
最佳答案
这里有一些方法可以加快速度。
您的总连接数实际上是为 memcached 创建的连接数。
首先,使用 memcached php 扩展而不是 memcache 扩展。它们完全不同,内存缓存扩展几乎被弃用到死。 Memcached 扩展使用 libmemcached,它速度快得令人难以置信并且具有更好的特性(例如二进制协议(protocol)、更好的超时、udp)
其次,使用持久连接。对于您的工作负载,这些应该完全足够,并且可以减少不断重新连接到内存缓存的成本。
第三,使用multi get/set/delete/etc。如果您知道您的请求中需要 10 个内存缓存键,请一次请求所有 10 个。如果您在任何时候循环访问内存缓存请求,这可以大大提高性能。
另一个警告是,NewRelic 在报告内存缓存中花费的时间方面一直很糟糕。由于 zend 引擎的检测方式,它可能会将在 php 中花费的时间误报为在 memcache 中花费的时间。
至于为什么您的 memcache 和 mysql 性能如此接近,您很可能正在运行相当简单的查询,因此在 memcache 和 mysql 上花费的时间是可比的。 Memcache 非常快,但它也是一个网络跃点,这通常是等待 Memcache 所花费时间的最大部分。如果您真的只有一台服务器,您可以尝试在本地运行内存缓存或使用 APC 而不是内存缓存。
关于php - 内存缓存性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027848/