diff --git a/library/think/Cache.php b/library/think/Cache.php index 21ef59e8..ebdd2d4d 100644 --- a/library/think/Cache.php +++ b/library/think/Cache.php @@ -168,14 +168,15 @@ class Cache /** * 缓存标签 * @access public - * @param string $name 标签名 - * @param string|array $keys 缓存标识 + * @param string $name 标签名 + * @param string|array $keys 缓存标识 + * @param bool $overlay 是否覆盖 * @return \think\cache\Driver */ - public static function tag($name, $keys = null) + public static function tag($name, $keys = null, $overlay = false) { self::init(); - return self::$handler->tag($name, $keys); + return self::$handler->tag($name, $keys, $overlay); } } diff --git a/library/think/cache/Driver.php b/library/think/cache/Driver.php index b975ba0d..021ae727 100644 --- a/library/think/cache/Driver.php +++ b/library/think/cache/Driver.php @@ -94,11 +94,12 @@ abstract class Driver /** * 缓存标签 * @access public - * @param string $name 标签名 - * @param string|array $keys 缓存标识 + * @param string $name 标签名 + * @param string|array $keys 缓存标识 + * @param bool $overlay 是否覆盖 * @return $this */ - public function tag($name, $keys = null) + public function tag($name, $keys = null, $overlay = false) { if (is_null($keys)) { $this->tag = $name; @@ -107,8 +108,12 @@ abstract class Driver if (is_string($keys)) { $keys = explode(',', $keys); } - $keys = array_map([$this, 'getCacheKey'], $keys); - $value = array_unique(array_merge($this->getTagItem($name), $keys)); + $keys = array_map([$this, 'getCacheKey'], $keys); + if ($overlay) { + $value = $keys; + } else { + $value = array_unique(array_merge($this->getTagItem($name), $keys)); + } $this->set($key, implode(',', $value)); } return $this;