zoopcommerce/juggernaut

一个PHP缓存模块,包括文件系统、APC和Memcached的适配器。它还包括一些数据库缓存和完整页面缓存的辅助类

1.2.0 2014-04-26 02:29 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:24:42 UTC


README

#Juggernaut

简介

Juggernaut是一个超级快速的PHP缓存。它拥有多个存储适配器和一些简单的辅助工具,帮助您快速开启缓存。

此模块最优秀的特性之一是提供洪水保护,不仅在初始缓存创建时(通过排队后续请求)有效,而且在重新缓存时(通过在新的缓存重新创建之前为后续请求提供旧的缓存)也有效。

这两个特性使得Juggernaut在正常使用中至少比Zend Framework 2缓存适配器100%,在高并发应用中可快至270%

安装

使用Composer将模块安装到您应用程序的vendor目录。将以下行添加到您的composer.json文件中。

{
    "require": {
        "zoopcommerce/juggernaut": "dev-master"
    }
}

用法

您可以通过直接实例化一个存储适配器并调用set/get来使用Juggernaut。

使用存储适配器进行键值对缓存

文件系统

// you should always store the cache below the web root for security!!
$cacheDirectory = __DIR__ . '../cache';

$cache = new Zoop\Juggernaut\Adapter\FileSystem($cacheDirectory);

$key = 'yourUniqueKey';

$data = $cache->getItem($key, $success);

// check if cache hit/miss
if ($success === false) {
  // cache missed so now we have to execute
	// some query that takes a long time
	for($i=0;$i<1000000;$i++) {
    	$data = rand(0, 10000);
    }

	//save it to cache
    $cache->setItem($key, $data);
    echo $data;
} else {
	// cache hit!
    echo $data;
}

MongoDB

$mongo = new MongoClient('mongodb://username:password@localhost:27017');
$collection = $mongo->selectCollection('Cache');

$cache = new Zoop\Juggernaut\Adapter\MongoDB($collection);

$key = 'yourUniqueKey';

$data = $cache->getItem($key, $success);

// check if cache hit/miss
if ($success === false) {
	// cache missed so now we have to execute
	// some query that takes a long time
	for($i=0;$i<1000000;$i++) {
    	$data = rand(0, 10000);
    }

	//save it to cache
    $cache->setItem($key, $data);
    echo $data;
} else {
	// cache hit!
    echo $data;
}

Memcached

//coming soon

MySQL

//coming soon

辅助工具

有一些辅助工具可以加速Juggernaut的使用。

完整页面

正如其名所示,"完整页面"辅助工具将直接将渲染的页面存储到缓存中。这会导致页面加载速度非常快。

要使用此脚本,只需将其放置在页面顶部。

$pageTtl = 600; //10 mins
$cacheDirectory = __DIR__ . '../cache';

$adapter = new Zoop\Juggernaut\Adapter\FileSystem($cacheDirectory);

$pageCache = new Zoop\Juggernaut\Helper\FullPage($adapter, $pageTtl);
$pageCache->start();

您可以使用提供的任何适配器来存储完整页面缓存。例如。

$pageTtl = 600; //10 mins
$database='MyMongoDb';
$username='mymongouser';
$password='mymongopass';

$adapter = new Zoop\Juggernaut\Adapter\MongoDB($database, $username, $password);

$pageCache = new Zoop\Juggernaut\Helper\FullPage($adapter, $pageTtl);
$pageCache->start();

由于脚本会在脚本退出后将页面输出自动刷新到缓存适配器,因此不需要手动将渲染的页面保存到缓存中。

数据库

MySQLi

您可以使用mysqli辅助工具自动缓存您的SQL查询。

$cacheDirectory = __DIR__ . '../cache';
$adapter = new Zoop\Juggernaut\Adapter\FileSystem($cacheDirectory);

$db = new Zoop\Juggernaut\Helper\Database\Mysqli($cache);
$db->connect($host, $username, $passwd, $database);

$q="SELECT COUNT(`pageviews`) as 'pageviews' FROM `analytics` GROUP BY `date`";
$r = $db->query($q, 600); //second arg is ttl
if($r!==false) {
	$pageviews = $db->fetchRow($q)['pageviews'];
}

如您所见,您无需担心缓存是否存在,因为辅助工具会做所有繁重的工作。

即将推出

  • 单元测试
  • 工作示例
  • MySQL适配器
  • Memcached适配器
  • MongoDB辅助工具