Files
Pichome/core/class/table/table_cache.php
2024-02-06 00:03:33 +08:00

96 lines
2.8 KiB
PHP

<?php
/*
* @copyright QiaoQiaoShiDai Internet Technology(Shanghai)Co.,Ltd
* @license https://www.oaooa.com/licenses/
*
* @link https://www.oaooa.com
* @author zyx(zyx@oaooa.com)
*/
if (!defined('IN_OAOOA')) {
exit('Access Denied');
}
class table_cache extends dzz_table
{
public function __construct()
{
$this->_table = 'cache';
$this->_pk = 'cachekey';
parent::__construct();
}
public function insert_cachedata_by_cachename($setarr, $expiretime = 600,$recordtime = 0)
{
$cachename = $setarr['cachekey'];
if (memory('check')) {
unset($setarr['cachekey']);
memory('set', $cachename, $setarr, $expiretime);
if($recordtime) memory('set', $cachename.'_time', TIMESATMP, $expiretime);
} else {
if (DB::result_first("select count(*) from %t where cachekey = %s", array('cache', $cachename))) {
unset($setarr['cachekey']);
parent::update($cachename, $setarr);
} else {
parent::insert($setarr);
}
}
return true;
}
public function fetch_cachedata_by_cachename($cachename, $expiretime = 600)
{
if (memory('check')) {
$data = ($data = memory('get', $cachename)) === false ? array() : (unserialize($data['cachevalue']) ? unserialize($data['cachevalue']):$data['cachevalue']);
} else {
$cachedata = parent::fetch($cachename);
if ($cachedata && ($cachedata['dateline'] + $expiretime) > TIMESTAMP) {
$data = unserialize($cachedata['cachevalue']) ? unserialize($cachedata['cachevalue']):$cachedata['cachevalue'];
} else {
$data = array();
}
}
//如果缓存无效则删除当前缓存
if(!$data) $this->delete_cachedata_by_cachename($cachename);
return $data;
}
public function delete_cachedata_by_cachename($cachename)
{
if (memory('check')) {
memory('rm',$cachename);
} else {
parent::delete($cachename);
}
return true;
}
public function get_cachetime_by_cachename($cachename){
$dateline = false;
if (memory('check')) {
$dateline = ($dateline = memory('get', $cachename.'_time')) === false ? array() : $dateline;
} else {
$cachedata = parent::fetch($cachename);
$dateline = $cachedata['dateline'];
}
return $dateline;
}
public function clear_allcache(){
if (memory('check')){
C::memory()->clear();
}else{
DB::delete($this->_table,' 1 ');
}
return true;
}
}