104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | Author: CRMEB Team <admin@crmeb.com>
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace app\services\other;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\dao\other\CacheDao;
							 | 
						|||
| 
								 | 
							
								use app\services\BaseServices;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * 数据库表缓存
							 | 
						|||
| 
								 | 
							
								 * Class CacheServices
							 | 
						|||
| 
								 | 
							
								 * @package app\services\other
							 | 
						|||
| 
								 | 
							
								 * @method delectDeOverdueDbCache() 删除过期缓存
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								class CacheServices extends BaseServices
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function __construct(CacheDao $dao)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->dao = $dao;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 获取数据缓存
							 | 
						|||
| 
								 | 
							
								     * @param string $key
							 | 
						|||
| 
								 | 
							
								     * @param $default 默认值不存在则写入
							 | 
						|||
| 
								 | 
							
								     * @param int $expire
							 | 
						|||
| 
								 | 
							
								     * @return mixed|null
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function getDbCache(string $key, $default, int $expire = 0)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->delectDeOverdueDbCache();
							 | 
						|||
| 
								 | 
							
								        $result = $this->dao->value(['key' => $key], 'result');
							 | 
						|||
| 
								 | 
							
								        if ($result) {
							 | 
						|||
| 
								 | 
							
								            return json_decode($result, true);
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            if ($default instanceof \Closure) {
							 | 
						|||
| 
								 | 
							
								                // 获取缓存数据
							 | 
						|||
| 
								 | 
							
								                $value = $default();
							 | 
						|||
| 
								 | 
							
								                if ($value) {
							 | 
						|||
| 
								 | 
							
								                    $this->setDbCache($key, $value, $expire);
							 | 
						|||
| 
								 | 
							
								                    return $value;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                $this->setDbCache($key, $default, $expire);
							 | 
						|||
| 
								 | 
							
								                return $default;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return null;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 设置数据缓存存在则更新,没有则写入
							 | 
						|||
| 
								 | 
							
								     * @param string $key
							 | 
						|||
| 
								 | 
							
								     * @param string | array $result
							 | 
						|||
| 
								 | 
							
								     * @param int $expire
							 | 
						|||
| 
								 | 
							
								     * @return void
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function setDbCache(string $key, $result, $expire = 0)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->delectDeOverdueDbCache();
							 | 
						|||
| 
								 | 
							
								        $addTime = $expire ? time() + $expire : 0;
							 | 
						|||
| 
								 | 
							
								        if ($this->dao->count(['key' => $key])) {
							 | 
						|||
| 
								 | 
							
								            return $this->dao->update($key, [
							 | 
						|||
| 
								 | 
							
								                'result' => json_encode($result),
							 | 
						|||
| 
								 | 
							
								                'expire_time' => $addTime,
							 | 
						|||
| 
								 | 
							
								                'add_time' => time()
							 | 
						|||
| 
								 | 
							
								            ], 'key');
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            return $this->dao->save([
							 | 
						|||
| 
								 | 
							
								                'key' => $key,
							 | 
						|||
| 
								 | 
							
								                'result' => json_encode($result),
							 | 
						|||
| 
								 | 
							
								                'expire_time' => $addTime,
							 | 
						|||
| 
								 | 
							
								                'add_time' => time()
							 | 
						|||
| 
								 | 
							
								            ]);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 删除某个缓存
							 | 
						|||
| 
								 | 
							
								     * @param string $key
							 | 
						|||
| 
								 | 
							
								     * @return false|mixed
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function delectDbCache(string $key = '')
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if ($key)
							 | 
						|||
| 
								 | 
							
								            return $this->dao->delete($key, 'key');
							 | 
						|||
| 
								 | 
							
								        else
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |