public function testPerformance()
 {
     /**
      * 构造缓存配置
      */
     $ccb = new LtCacheConfigBuilder();
     // $ccb->addSingleHost(array("adapter" => "apc"));
     // $ccb->addSingleHost(array("adapter" => "eAccelerator"));
     // $ccb->addSingleHost(array("adapter" => "file"));
     // $ccb->addSingleHost(array("adapter" => "memcache", "host" => "localhost", "port" => 11211));
     // $ccb->addSingleHost(array("adapter" => "memcached", "host" => "localhost", "port" => 11211));
     $ccb->addSingleHost(array("adapter" => "file"));
     // $ccb->addSingleHost(array("adapter" => "Xcache", "key_prefix" => "test_xcache_"));
     /**
      * 实例化组件入口类
      */
     $cache = new LtCache();
     $cache->configHandle->addConfig(array("cache.servers" => $ccb->getServers()));
     $cache->init();
     // 初始化完毕,测试其效果
     $ch = $cache->getTDG('test-performance');
     $this->assertTrue($ch->add("test_key", "test_value"));
     $this->assertEquals("test_value", $ch->get("test_key"));
     $this->assertTrue($ch->update("test_key", "new_value"));
     $this->assertEquals("new_value", $ch->get("test_key"));
     $this->assertTrue($ch->del("test_key"));
     $this->assertFalse($ch->get("test_key"));
     /**
      * 运行500次,要求在1秒内运行完
      */
     $base_memory_usage = memory_get_usage();
     $times = 500;
     $startTime = microtime(true);
     // ----------------------------测试读取
     $ch->add("test_key", "test_value");
     for ($i = 0; $i < $times; $i++) {
         $ch->get("test_key");
     }
     $ch->update("test_key", "new_value");
     $ch->del("test_key");
     // ----------------------------测试完成
     $endTime = microtime(true);
     $totalTime = round($endTime - $startTime, 6);
     $averageTime = round($totalTime / $times, 6);
     $memory_usage = memory_get_usage() - $base_memory_usage;
     $averageMemory = formatSize($memory_usage / $times);
     $memory_usage = formatSize($memory_usage);
     if (LOTUS_UNITTEST_DEBUG) {
         echo "\n--------------LtCache     get          -----------------\n";
         echo "times      \t{$times}\n";
         echo "totalTime   \t{$totalTime}s\taverageTime   \t{$averageTime}s\n";
         echo "memoryUsage \t{$memory_usage}\taverageMemory \t{$averageMemory}";
         echo "\n---------------------------------------------------------\n";
     }
     $this->assertTrue(1 > $totalTime);
 }
 /**
  * 使用尚未支持的adapter
  * 
  * @expectedException PHPUnit_Framework_Error
  */
 public function testInvalidAdapter()
 {
     /**
      * 构造缓存配置
      */
     $ccb = new LtCacheConfigBuilder();
     $ccb->addSingleHost(array("adapter" => "not_exists"));
     /**
      * 实例化组件入口类
      */
     $cache = new LtCache();
     $cache->configHandle->addConfig(array("cache.servers" => $ccb->getServers()));
     $cache->init();
     $ch = $cache->getTDG('test');
     $ch->add("test_key", "test_value");
 }
示例#3
0
<?php

$ccb = new LtCacheConfigBuilder();
$ccb->addSingleHost(array("adapter" => "phps", "host" => "/tmp/LanMV/Cache-phps/"));
$config["cache.servers"] = $ccb->getServers();
 /**
  * 测试分布式缓存的配置方法
  * 适用场景: 
  * 一个类似淘宝、ebay的电子商务网站
  */
 public function testConfigBuilderDistCache()
 {
     $ccb = new LtCacheConfigBuilder();
     /**
      * 系统数据缓存
      * 特点:数据条数少且稳定,每条数据量小,变化频率低,访问频率高,适合用APC
      * prod_cat表示发布商品时选择的系统商品类目 
      * geo_code表示收货地址中用到的行政区划,省市区三级
      * 他们都使用本地共享内存,用不同的tablename,防止key冲突
      * 使用的时候就像这样:
      * $cache = new LtCache;
      * $cache->group = "local_memory";
      * $prodCatCache = $cache->getTDG("prod_cat");
      * $geoCodeCache = $cache->getTDG("geo_code");
      */
     $ccb->addHost("local_memory", "node_0", "master", array("adapter" => "apc"));
     /**
      * 用户 名片数据和商品统计数据缓存 
      * 特点:数据条数极多,每条数据量小,变化频率高,访问频率很高,适合用memcached 
      * user_card表示用户 名片数据,存储用户 的昵称、信用点数,最后活动时间;prod_stat表示商品统计数据,存储商品的点击数,收藏数,最后编辑时间 
      * 如果使用同一个memcache服务器(主机地址和端口都相同 ),用不同的tablename,防止key冲突
      * 使用的时候就像这样:
      * $cache = new LtCache;
      * $cache->group = "memcache";
      * $prodStatCache = $cache->getTDG("prod_stat");
      * $userCardCache = $cache->getTDG("user_card");
      */
     $ccb->addHost("memcache", "node_0", "master", array("adapter" => "memcached", "host" => "10.0.0.1", "port" => 11211));
     $ccb->addHost("memcache", "node_1", "master", array("adapter" => "memcached", "host" => "10.0.0.2", "port" => 11211));
     /**
      * 商品数据和订单数据缓存 
      * 特点:数据条数极多,每条数据量大,占用空间大,变化频率低,适合用文件缓存 
      * prod_info表示商品数据,存储商品标题、描述等 信息 
      * trade_info表示订单数据,存储订单详情,及该订单涉及的商品的快照、交易双方的信用等级
      * 如果在同 一个目录下,需要用不同的tablename,防止key冲突
      * 使用的时候就像这样:
      * $cache = new LtCache;
      * $cache->group = "local_file";
      * $prodStatCache = $cache->getTDG("prod_detail");
      * $userCardCache = $cache->getTDG("trade_detail");
      */
     $ccb->addHost("local_file", "node_0", "master", array("adapter" => "file"));
     $this->assertEquals(array("local_memory" => array("node_0" => array("master" => array(array("adapter" => "apc")))), "memcache" => array("node_0" => array("master" => array(array("adapter" => "memcached", "host" => "10.0.0.1", "port" => 11211))), "node_1" => array("master" => array(array("adapter" => "memcached", "host" => "10.0.0.2", "port" => 11211)))), "local_file" => array("node_0" => array("master" => array(array("adapter" => "file"))))), $ccb->getServers());
     //end $this->assertEquals
 }
示例#5
0
<?php

$ccb = new LtCacheConfigBuilder();
$ccb->addSingleHost(array("adapter" => "phps", "host" => "/tmp/Lotus/unittest/cache/phps"));
$config["cache.servers"] = $ccb->getServers();