Beispiel #1
0
 /**
  * 批量设置键值(当键名不存在时)
  * 只有当键值全部设置成功时,才返回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;
 }