功能介绍

缓存功能,目前支持以下几种缓存方式。

  • File 将数据缓存到/ecmsapi/_cache目录中
  • Yac 需要服务器安装Yac组件

如何使用缓存功能

// 创建一个获取缓存对象
$cache = $api->load('cache'); // 第二个参数不传,默认使用File方式
$cache = $api->load('cache' , 'yac'); // 第二个参数传入 yac 表示使用 yac 方式缓存

get

功能:获取缓存,不存在缓存返回NULL

参数:

  • $name 缓存名称

示例:

// 获取一个缓存名为 newslist 的缓存
$newslist = $api->load('cache')->get('newslist');

set

功能:设置缓存

参数:

  • $name 缓存名称
  • $value 需要缓存的内容
  • $time 缓存的有效时间 0 表示永久缓存

示例:

// 假设我们新闻表的数量十分大,搜索时特别费时间。那么我们可以这样操作
$cache = $api->load('cache'); // 获取缓存类对象
$wd = '李小龙'; // 用户搜索的关键词
$cacheName = 'search_wd_'.md5($wd); //定义一个独一无二的缓存变量名称
$searchlist = $cache->get($cacheName); // 获取缓存
if(null === $searchlist){
    // 若缓存不存在,或缓存过期。重新获取数据
    $searchlist = $api->load('db')->select('[!db.pre!]ecms_news' , '*' , 'title like "%'.$wd.'%"' , '10,1' , 'id desc');
    $cache->set($cacheName , $searchlist , 3600); // 设置缓存,时间为3600秒
}
// 打印出数据
var_dump($searchlist);

delete

功能:删除缓存

参数:
$name 缓存名称

示例:

// 删除名为newslist的缓存。
$api->load('cache')->delete('newslist');

// 比我们我的网站配置信息存放在数据库中,我们通过缓存功能永久缓存起来。
// 当我们更新了配置后,应当删除缓存保存用户能获取到最新的配置。

cache

功能:获取不同缓存库的对象。

参数:
$name 缓存类名称
$conf 缓存类的配置 比如:redis缓存需要配置帐号与密码
$cache 是否将实例化的对象缓存起来 默认为true

示例:

$a = $api->load('cache')->cache('file')->get('settings'); // 通过file缓存获取settings
$b = $api->load('cache')->cache('yac')->get('settings'); // 通过yac缓存获取settings
// 上面的 $a 和 $b 是分别从两个不同的缓存中获取的,他们的值可能会不一样。

// 再看下面的操作
$a = $api->load('cache' , 'file')->get('settings');
$b = $api->load('cache' , 'yac')->get('settings');
// 上面的操作 $a 和 $b 的值是完全一样的。
// 因为第二个操作虽然设置缓存方式为 yac 但因为load方法的缓存机制。
// 第二次调用load('cache')时,会直接从缓存中获取对象。所以第二个参数yac失效。

// 此时我们需要如此操作,第三个参数设置为false 表示不通过缓存获取对象。
$a = $api->load('cache' , 'file' , false)->get('settings');
$b = $api->load('cache' , 'yac' , false)->get('settings');

// 如果有同时采用多种缓存方式的话,建议用第一种操作方法。
// 针对无编程基础的朋友,简单的解释一个load的缓存机制(单例模式)

// 打个比方:你现在电脑里有一个文件a.txt里面记录了很多数据。
// 单例模式:你每次找内容,我们都直接去a.txt中找。
// 非单例模式:你每次找内容,我们都是先复制一个a.txt,然后再从复制的a.txt中找。这样我们就有可能会复制多个a.txt浪费服务器资源。