/** * 批量设置键值(当键名不存在时) * 只有当键值全部设置成功时,才返回true,否则返回false并尝试回滚 * @param array $sets 键值数组 * @return boolean 是否成功 */ public function mSetNX($sets) { if ($this->driver->checkDriver()) { if (method_exists($this->driver, 'mSetNX')) { return $this->driver->mSetNX($sets); } else { $keys = []; $status = true; foreach ($sets as $key => $value) { $status = $this->driver->setnx($key, $value); if ($status) { $keys[] = $key; } else { break; } } //如果失败,尝试回滚,但不保证成功 if (!$status) { foreach ($keys as $key) { $this->driver->del($key); } } return $status; } } if ($this->driver->isFallback() && $this->type !== self::$config['fallback']) { return $this->driver->backup()->mSetNX($sets); } return false; }