123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: liu21st <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- namespace think;
- use think\cache\Driver;
- class Cache
- {
- /**
- * @var array 缓存的实例
- */
- public static $instance = [];
- /**
- * @var int 缓存读取次数
- */
- public static $readTimes = 0;
- /**
- * @var int 缓存写入次数
- */
- public static $writeTimes = 0;
- /**
- * @var object 操作句柄
- */
- public static $handler;
- /**
- * 连接缓存驱动
- * @access public
- * @param array $options 配置数组
- * @param bool|string $name 缓存连接标识 true 强制重新连接
- * @return Driver
- */
- public static function connect(array $options = [], $name = false)
- {
- $type = !empty($options['type']) ? $options['type'] : 'File';
- if (false === $name) {
- $name = md5(serialize($options));
- }
- if (true === $name || !isset(self::$instance[$name])) {
- $class = false === strpos($type, '\\') ?
- '\\think\\cache\\driver\\' . ucwords($type) :
- $type;
- // 记录初始化信息
- App::$debug && Log::record('[ CACHE ] INIT ' . $type, 'info');
- if (true === $name) {
- return new $class($options);
- }
- self::$instance[$name] = new $class($options);
- }
- return self::$instance[$name];
- }
- /**
- * 自动初始化缓存
- * @access public
- * @param array $options 配置数组
- * @return Driver
- */
- public static function init(array $options = [])
- {
- if (is_null(self::$handler)) {
- if (empty($options) && 'complex' == Config::get('cache.type')) {
- $default = Config::get('cache.default');
- // 获取默认缓存配置,并连接
- $options = Config::get('cache.' . $default['type']) ?: $default;
- } elseif (empty($options)) {
- $options = Config::get('cache');
- }
- self::$handler = self::connect($options);
- }
- return self::$handler;
- }
- /**
- * 切换缓存类型 需要配置 cache.type 为 complex
- * @access public
- * @param string $name 缓存标识
- * @return Driver
- */
- public static function store($name = '')
- {
- if ('' !== $name && 'complex' == Config::get('cache.type')) {
- return self::connect(Config::get('cache.' . $name), strtolower($name));
- }
- return self::init();
- }
- /**
- * 判断缓存是否存在
- * @access public
- * @param string $name 缓存变量名
- * @return bool
- */
- public static function has($name)
- {
- self::$readTimes++;
- return self::init()->has($name);
- }
- /**
- * 读取缓存
- * @access public
- * @param string $name 缓存标识
- * @param mixed $default 默认值
- * @return mixed
- */
- public static function get($name, $default = false)
- {
- self::$readTimes++;
- return self::init()->get($name, $default);
- }
- /**
- * 写入缓存
- * @access public
- * @param string $name 缓存标识
- * @param mixed $value 存储数据
- * @param int|null $expire 有效时间 0为永久
- * @return boolean
- */
- public static function set($name, $value, $expire = null)
- {
- self::$writeTimes++;
- return self::init()->set($name, $value, $expire);
- }
- /**
- * 自增缓存(针对数值缓存)
- * @access public
- * @param string $name 缓存变量名
- * @param int $step 步长
- * @return false|int
- */
- public static function inc($name, $step = 1)
- {
- self::$writeTimes++;
- return self::init()->inc($name, $step);
- }
- /**
- * 自减缓存(针对数值缓存)
- * @access public
- * @param string $name 缓存变量名
- * @param int $step 步长
- * @return false|int
- */
- public static function dec($name, $step = 1)
- {
- self::$writeTimes++;
- return self::init()->dec($name, $step);
- }
- /**
- * 删除缓存
- * @access public
- * @param string $name 缓存标识
- * @return boolean
- */
- public static function rm($name)
- {
- self::$writeTimes++;
- return self::init()->rm($name);
- }
- /**
- * 清除缓存
- * @access public
- * @param string $tag 标签名
- * @return boolean
- */
- public static function clear($tag = null)
- {
- self::$writeTimes++;
- return self::init()->clear($tag);
- }
- /**
- * 读取缓存并删除
- * @access public
- * @param string $name 缓存变量名
- * @return mixed
- */
- public static function pull($name)
- {
- self::$readTimes++;
- self::$writeTimes++;
- return self::init()->pull($name);
- }
- /**
- * 如果不存在则写入缓存
- * @access public
- * @param string $name 缓存变量名
- * @param mixed $value 存储数据
- * @param int $expire 有效时间 0为永久
- * @return mixed
- */
- public static function remember($name, $value, $expire = null)
- {
- self::$readTimes++;
- return self::init()->remember($name, $value, $expire);
- }
- /**
- * 缓存标签
- * @access public
- * @param string $name 标签名
- * @param string|array $keys 缓存标识
- * @param bool $overlay 是否覆盖
- * @return Driver
- */
- public static function tag($name, $keys = null, $overlay = false)
- {
- return self::init()->tag($name, $keys, $overlay);
- }
- }
|