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"); }
<?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 }
<?php $ccb = new LtCacheConfigBuilder(); $ccb->addSingleHost(array("adapter" => "phps", "host" => "/tmp/Lotus/unittest/cache/phps")); $config["cache.servers"] = $ccb->getServers();