You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
think-library/src/cache/Mysql.php

168 lines
4.4 KiB

2 years ago
<?php
// +----------------------------------------------------------------------
// | ThinkLibrary 6.0 for ThinkPhP 6.0
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
// +----------------------------------------------------------------------
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 仓库地址 https://gitee.com/liguangchun/ThinkLibrary
// | github 仓库地址 https://github.com/GC0202/ThinkLibrary
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
namespace DtApp\ThinkLibrary\cache;
use DtApp\ThinkLibrary\exception\DtaException;
use DtApp\ThinkLibrary\facade\Times;
use think\facade\Db;
/**
* 缓存数据库驱动
* Class Mysql
* @package DtApp\ThinkLibrary\cache
*/
class Mysql
{
private $table = "think_cache";
private $cache_name, $cache_expire = 0;
/**
* 名称
* @param string $cache_name
* @return $this
*/
public function name(string $cache_name): self
{
$this->cache_name = $cache_name;
return $this;
}
/**
* 过期时间
* @param int $cache_expire
* @return $this
*/
public function expire(int $cache_expire): self
{
$this->cache_expire = $cache_expire;
return $this;
}
/**
* 设置
* @param $cache_value
* @return bool
* @throws DtaException
*/
public function set($cache_value): bool
{
$this->judge();
$result = Db::table($this->table)
->insert([
'cache_name' => $this->cache_name,
'cache_value' => $cache_value,
'cache_expire' => Times::dateRear("Y-m-d H:i:s", $this->cache_expire)
]);
return $result ? true : false;
}
/**
* 获取
* @return mixed
* @throws DtaException
*/
public function get()
{
$this->judge();
return Db::table($this->table)
->where('cache_name', $this->cache_name)
->whereTime('cache_expire', '>=', time())
->order('cache_expire desc')
->value('cache_value', '');
}
/**
* 删除
* @return bool
* @throws DtaException
* @throws \think\db\exception\DbException
*/
public function delete(): bool
{
$this->judge();
$result = Db::table($this->table)
->where('cache_name', $this->cache_name)
->delete();
return $result ? true : false;
}
/**
* 更新
* @param $cache_value
* @return bool
* @throws DtaException
* @throws \think\db\exception\DbException
*/
public function update($cache_value): bool
{
$this->judge();
$result = Db::table($this->table)
->where('cache_name', $this->cache_name)
->update([
'cache_value' => $cache_value,
'cache_expire' => Times::dateRear("Y-m-d H:i:s", $this->cache_expire)
]);
return $result ? true : false;
}
/**
* 自增
* @param int $int
* @return bool
* @throws DtaException
* @throws \think\db\exception\DbException
*/
public function inc(int $int = 1): bool
{
$cache_value = (int)$this->get();
$result = Db::table($this->table)
->where('cache_name', $this->cache_name)
->update([
'cache_value' => $cache_value + $int
]);
return $result ? true : false;
}
/**
* 自减
* @param int $int
* @return bool
* @throws DtaException
* @throws \think\db\exception\DbException
*/
public function dec(int $int = 1): bool
{
$cache_value = (int)$this->get();
$result = Db::table($this->table)
->where('cache_name', $this->cache_name)
->update([
'cache_value' => $cache_value - $int
]);
return $result ? true : false;
}
/**
* @throws DtaException
*/
private function judge(): void
{
if (empty($this->cache_name)) {
throw new DtaException("名称未配置");
}
}
}