我曾经重写了部分 CI 缓存机制。也许这对你有任何帮助。它是一个“缓存”一切功能。我把它写成对系统文件的覆盖。
其中有一个使用示例。应该很简单。使用此代码,您可以缓存任何函数结果,甚至在会话/请求之间共享。
http://codeigniter.com/forums/viewthread/221313/
或者这个:
https://github.com/EllisLab/CodeIgniter/issues/1646
如果您不需要这个新功能,您可以使用它作为如何使用标准 CI 缓存机制的示例。
像这样:
class your_class extends CI_Model
{
// ------------------------------------------------------------------------
function __construct( )
{
$cache_adapter = 'apc';
$this->load->driver( 'cache', array( 'adapter' => $cache_adapter, 'backup' => 'dummy' ) );
$this->cache->{$cache_adapter}->is_supported( );
}
// ------------------------------------------------------------------------
public function your_function( $arg )
{
$result = $this->cache->get( __CLASS__ . __METHOD__ . serialize( $arg ) );
if ( empty( $result ) )
{
$result = ... /* your calculation here */
$this->cache->save( __CLASS__ . __METHOD__ . serialize( $arg ) );
}
return $result;
}
}
我用于缓存的键是所谓的重整函数名。如果您的函数的结果完全取决于它的参数(应该如此),您可以按原样使用它。对于密钥的紧凑性,您可以对其进行哈希处理。像这样:
public function your_function( $arg )
{
$result = $this->cache->get( md5( __CLASS__ . __METHOD__ . serialize( $arg ) ) );
if ( empty( $result ) )
{
$result = ... /* your calculation here */
$this->cache->save( md5( __CLASS__ . __METHOD__ . serialize( $arg ) ) );
}
return $result;
}