php - 内存缓存性能

标签 php performance memcached newrelic

我感觉我网站的Memcached查询速度比Mysql慢。请查看我从 New Relic 获得的网站性能截图。

enter image description here

我不知道如何在我的 CentOS 服务器上优化 memcached。请查看 Memcached 的配置和性能截图。我觉得总连接数很高。

enter image description here

请查看下面的实时统计数据 enter image description here

下面是我在我的网站中使用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/

相关文章:

php - 将数组添加到内存缓存

php - 如何使用 PHP 增加 Excel 单元格可以容纳的数据量

c++ - C++ Anagram Solver速度优化

php - 通过 Composer 只安装单个包而不更新其他包

javascript - 为什么在 IE8 上的 JavaScript 中访问图像的尺寸如此昂贵?

mysql - MySQL 日期时间字段的最接近匹配

php - 缓存节点故障导致数据不一致

php - Memcache - 存储 mysql 结果

php - DomPDF 并排放置2个表格

php - 从数据库中提取时避免特定值的最佳方法?