Memcache缓存居然不如直接File文件缓存?

使用本地的环境测试10万次和 100万次 缓存的读写,测试环境和结果如下。

环境

Win7 x64 AMD7750双核 内存8G
Apache 2.4.9
PHP 5.5.12 ts vc11
memcache 2.2.7 

代码

<?php
function convert($size)
{
    $unit = array(‘b‘, ‘kb‘, ‘mb‘, ‘gb‘, ‘tb‘, ‘pb‘);

    return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ‘ ‘ . $unit[$i];
}

function cacheFile($key)
{
    $dir = ‘cache‘;
    if (!is_dir($dir) && !mkdir($dir)) {
        throw new Exception(" can‘t make dir $dir");
    }

    $filepath = $dir . DIRECTORY_SEPARATOR . sprintf(‘%x‘, crc32($key));

    if (!(file_exists($filepath) && ($data = file_get_contents($filepath)) && !empty($data))) {
        $data = date(‘Y-m-d H:i:s‘);
        file_put_contents($filepath, $data);
    }

    return $data;
}

function cacheMem($key)
{
    $mem = new Memcache();
    $mem->connect(‘127.0.0.1‘, 11211);
    $data = $mem->get($key);
    if (empty($data)) {
        $data = date(‘Y-m-d H:i:s‘);
        $mem->set($key, $data);
    }

    return $data;
}

$t1 = microtime(true);
$i = 0;
$limit = 1000 * 100; //10 万次
$data = null;
while ($i < $limit) {
//    $data = cacheFile($i);
    $data = cacheMem($i);
    $i++;
}
$timeUse = microtime(true) - $t1;
$arr = [
    ‘cost‘ => sprintf(‘%.7fs‘, $timeUse),
    ‘mem‘ => convert(memory_get_usage())
];
var_dump($arr);

结果 1万次

            花费时间           内存耗费
File        1.9 sec           250kb
Memcache    11 sec            250kb

结果 10万次

            花费时间    内存耗费
File        94s        251.18KB
Memcache    超时120s 报错

Memcache 10万次测试失败,报错内容如下

Warning: Memcache::connect(): in D:\localhost\speed.php on line 37
Warning: Memcache::get(): No servers added to memcache connection in D:\localhost\speed.php
Warning: Memcache::set(): No servers added to memcache connection in D:\localhost\speed.php on line 41
Fatal error: Maximum execution time of 120 seconds exceeded in D:\localhost\speed.php on line 38

结论

memcache 用来做缓存却还没有 直接File文件缓存快,之所以做这个测试,是因为面试的时候我回答自己并没有使用这个memcache 来做缓存,直接使用File文件缓存(单台服务器),结果直接被技术官认定为是很菜鸟。但我通过这样的测试,虽然是在win下面,可为什么Memcahe性能还不如File ?

还是说我测试的方式存在错误? 求解 [email protected]

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-01 12:06:28

Memcache缓存居然不如直接File文件缓存?的相关文章

缓存处理类(MemoryCache结合文件缓存)

想提升站点的性能,于是增加了缓存,但是站点不会太大,于是不会到分布式memcached的缓存和redis这个nosql库,于是自己封装了.NET内置的缓存组件 原先使用System.Web.Caching.Cache,但是asp.net会在System.Web.Caching.Cache缓存页面等数据,于是替换了System.Web.Caching.Cache为MemoryCache. 而在使用MemoryCache的时候,重新启动网站会丢失缓存,于是加了自己的扩展,将缓存序列化存放在文件内,在

PHP缓存之文件缓存

1.PHP文件缓存内容保存格式        PHP文件缓存内容保存格式主要有三种: (1)变量 var_export 格式化成PHP正常的赋值书写格式: (2)变量 serialize 序列化之后保存,用的时候反序列化: (3)变量 json_encode格式化之后保存,用的时候json_decode 互联网上测试结果是:serialize格式的文件解析效率大于Json,Json的解析效率大于PHP正常赋值. 所以我们要是缓存数据建议采用序列化的形式解析数据会更快. 2.PHP文件缓存的简单案

php 文件缓存

http://www.oschina.net/code/snippet_162279_6098 <?php class cache {       private static $_instance = null;     protected $_options = array(         'cache_dir'        => "./",         'file_name_prefix' => 'cache',         'mode'      

phalcon: 缓存片段,文件缓存,memcache缓存

几种缓存,需要用到前端配置,加后端实例配合着用 片段缓存: public function indexAction() { //渲染页面 $this->view->setTemplateAfter('common'); //缓存片段 //前端配置 $frontcache = new \Phalcon\Cache\Frontend\Output(array( "lifetime" => 86400 )); //后端处理 $cache = new \Phalcon\Cac

PHP高效文件缓存类FCache

自己用的阿里云低配置,最近访问不错,经常出现mysql崩溃的问题,提单说请加内存,这回复还不如直接说:请交钱! 于是自己在git找了php的文件缓存,发现都是将缓存放到一个缓存文件!!!意味着: 1.无论你是读取多大的数据,都需要从磁盘读出整个文件到内存,然后解析,获取你要的部分数据: 2.在缓存数据很大的时候,并不能起到缓存加速网站访问的目的,同时增加磁盘的读写负荷: 3.在某一个临界点,可能会导致缓存性能比数据库还差: 4.未经过严格测试,个人预估一般网站的数据都会达到100M以上,如果每次

Volley随笔之文件缓存DiskBasedCache类

Volley提供了一个基于文件的缓存类DiskBasedCache保存缓存数据.这个类完成缓存工作的原理大致如此,首先声明一个文件夹,文件夹下的文件与cacheKey一一对应,也就是说每一个文件时不同网络请求的返回数据.文件的格式是这样,文件头是数据结构CacheHeader,描述了缓存的信息,之后就是缓存数据. 下面是DiskBasedCache的代码,不得不说很优美! /*  * Copyright (C) 2011 The Android Open Source Project * * L

PHP文件缓存实现

有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些功能: 功能实现:get.set.has.increment.decrement.delete.flush 能够在较短的时间内返回数据 支持key过期 为了避免一个文件内的数据过大,造成读取文件的时候延迟较高,我们采用一个key-value一个文件的方式实现存储结构. 为了支持key过期,我们需要把expire数据写入到文件中,所以需要对写入的数据进行序列化处理

PHP程序缓存之文件缓存处理方式

PHP程序缓存之文件缓存处理方式在开发程序过程中,缓存的设置大大提升程序效率,减小数据库负载.基本配置缓存和常规配置缓存 基本配置缓存在项目开发中类似这样子的格式: 文件:config.php $CFG['database'] = 'mysql'; $CFG['pconnect'] = '0'; $CFG['db_host'] = 'localhost'; $CFG['db_name'] = 'appcom'; $CFG['db_user'] = 'root'; $CFG['db_pass']

文件缓存

Cache: 1 <?php 2 class Cache 3 { 4 private static $_instance = null; 5 6 protected $_options = array(); 7 8 protected function __construct() 9 { 10 } 11 12 /** 13 * 得到本类实例 14 * array( 15 * 'cache_dir' => '', 16 * 'file_name_prefix' => '', 17 * )