12.4 快捷缓存
匿名 · 更新于 2013/12/26
为了进一步简化缓存存取操作,ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用不同的缓存方式的时候并不需要关注具体的缓存细节(S快捷方法为官方推荐方法,3.1.2版本后因cache方法并入原S方法,所以cache方法不再建议使用)。
S方法使用示例:
当然,我们还可以在S方法里面显式的指定缓存方式,例如
S方法使用示例:
// 使用data标识缓存$Data数据S('data',$Data);// 缓存$Data数据3600秒S('data',$Data,3600);// 获取缓存数据$Data = S('data');// 删除缓存数据S('data',NULL);
'DATA_CACHE_TYPE'=>'Xcache'
当然,我们还可以在S方法里面显式的指定缓存方式,例如
S('data',$Data,3600,'File');
S('data',$Data,3600,array('type'=>'File','length'=>10,'temp'=>RUNTIME_PATH.'temp/'));
'DATA_CACHE_SUBDIR'=>true
'DATA_PATH_LEVEL'=>2
3
3.1版本以后增强了S函数的功能,并且用法有所调整,如下:
1 缓存初始化
如果没有设置type参数,则默认为文件缓存,S方法目前可以支持的缓存类型包括File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis、Xcache和WinCache。
缓存初始化操作后返回的是一个缓存实例化对象。
需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化。
初始化的返回值,可以直接操作缓存:
2 缓存设置
缓存初始化之后,就可以进行缓存操作了,
可以单独设置该缓存数据的有效期,例如:
为了保证缓存的安全,建议对返回值做出判断,如果缓存设置失败,则返回false,否则返回true。
3.1.2版本开始也可以直接在设置缓存的同时传入缓存设置参数,例如:
4 缓存删除
1 缓存初始化
S(array('type'=>'xcache','expire'=>60));
| 参数名 | 说明 |
|---|---|
| expire | 缓存有效期(时间为秒) |
| length | 缓存队列长度 |
| prefix | 缓存标识前缀 |
| type | 缓存类型 |
缓存初始化操作后返回的是一个缓存实例化对象。
需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化。
初始化的返回值,可以直接操作缓存:
$cache = S(array('type'=>'xcache','expire'=>60));$cache->set('name',$value);$cache->get('name');$cache->rm('name');
$cache = S(array('type'=>'xcache','expire'=>60));$cache->name = $value;echo $cache->name;unset($cache->name);
/* 数据缓存设置 */'DATA_CACHE_TIME' => 0, // 数据缓存有效期 0表示永久缓存'DATA_CACHE_COMPRESS' => false, // 数据缓存是否压缩缓存'DATA_CACHE_CHECK' => false, // 数据缓存是否校验缓存'DATA_CACHE_PREFIX' => '', // 缓存前缀'DATA_CACHE_TYPE' => 'File', // 数据缓存类型'DATA_CACHE_PATH' => TEMP_PATH,// 缓存路径设置 (仅对File方式有效)'DATA_CACHE_SUBDIR' => false, // 使用子目录缓存 (根据缓存标识的哈希创建子目录)'DATA_PATH_LEVEL' => 1, // 子目录缓存级别
2 缓存设置
缓存初始化之后,就可以进行缓存操作了,
S('name','value');
可以单独设置该缓存数据的有效期,例如:
S('name','value',3600);
为了保证缓存的安全,建议对返回值做出判断,如果缓存设置失败,则返回false,否则返回true。
3.1.2版本开始也可以直接在设置缓存的同时传入缓存设置参数,例如:
S('name','value',array('type'=>'xcache','prefix'=>'think','expire'=>600));
$value = S('name');
4 缓存删除
S('name',NULL);
