Exemple #1
0
 /**
  * Internal method to remove multiple items.
  *
  * @param  array $normalizedKeys
  * @return array Array of not removed keys
  * @throws Exception\ExceptionInterface
  */
 protected function internalRemoveItems(array &$normalizedKeys)
 {
     // support for removing multiple items at once has been added in ext/memcached-2.0.0
     if (static::$extMemcachedMajorVersion < 2) {
         return parent::internalRemoveItems($normalizedKeys);
     }
     $rsCodes = $this->memcached->deleteMulti($normalizedKeys);
     $missingKeys = array();
     foreach ($rsCodes as $key => $rsCode) {
         if ($rsCode !== true && $rsCode != MemcachedResource::RES_SUCCESS) {
             if ($rsCode != MemcachedResource::RES_NOTFOUND) {
                 throw $this->getExceptionByResultCode($rsCode);
             }
             $missingKeys[] = $key;
         }
     }
     return $missingKeys;
 }
 /**
  * Internal method to remove multiple items.
  *
  * @param  array $normalizedKeys
  * @return array Array of not removed keys
  * @throws Exception\ExceptionInterface
  */
 protected function internalRemoveItems(array &$normalizedKeys)
 {
     $memc = $this->getMemcachedResource();
     // support for removing multiple items at once has been added in ext/memcached-2.0.0
     // and HHVM doesn't support this feature yet
     if (!method_exists($memc, 'deleteMulti')) {
         return parent::internalRemoveItems($normalizedKeys);
     }
     foreach ($normalizedKeys as &$normalizedKey) {
         $normalizedKey = $this->namespacePrefix . $normalizedKey;
     }
     $missingKeys = [];
     foreach ($memc->deleteMulti($normalizedKeys) as $normalizedKey => $rsCode) {
         if ($rsCode !== true && $rsCode != MemcachedResource::RES_SUCCESS) {
             if ($rsCode != MemcachedResource::RES_NOTFOUND) {
                 throw $this->getExceptionByResultCode($rsCode);
             }
             $missingKeys[] = $normalizedKey;
         }
     }
     // remove namespace prefix
     if ($missingKeys && $this->namespacePrefix !== '') {
         $nsPrefixLength = strlen($this->namespacePrefix);
         foreach ($missingKeys as &$missingKey) {
             $missingKey = substr($missingKey, $nsPrefixLength);
         }
     }
     return $missingKeys;
 }
Exemple #3
0
 /**
  * Internal method to remove multiple items.
  *
  * @param  array $normalizedKeys
  * @return array Array of not removed keys
  * @throws Exception\ExceptionInterface
  */
 protected function internalRemoveItems(array &$normalizedKeys)
 {
     // support for removing multiple items at once has been added in ext/memcached-2.0.0
     if (static::$extMemcachedMajorVersion < 2) {
         return parent::internalRemoveItems($normalizedKeys);
     }
     $memc = $this->getMemcachedResource();
     foreach ($normalizedKeys as &$normalizedKey) {
         $normalizedKey = $this->namespacePrefix . $normalizedKey;
     }
     $rsCodes = $memc->deleteMulti($normalizedKeys);
     $missingKeys = array();
     foreach ($rsCodes as $key => $rsCode) {
         if ($rsCode !== true && $rsCode != MemcachedResource::RES_SUCCESS) {
             if ($rsCode != MemcachedResource::RES_NOTFOUND) {
                 throw $this->getExceptionByResultCode($rsCode);
             }
             $missingKeys[] = $key;
         }
     }
     // remove namespace prefix
     if ($missingKeys && $this->namespacePrefix !== '') {
         $nsPrefixLength = strlen($this->namespacePrefix);
         foreach ($missingKeys as &$missingKey) {
             $missingKey = substr($missingKey, $nsPrefixLength);
         }
     }
     return $missingKeys;
 }
Exemple #4
0
 /**
  * Internal method to remove multiple items.
  *
  * Options:
  *  - namespace <string>
  *    - The namespace to use
  *  - ignore_missing_items <boolean>
  *    - Throw exception on missing item
  *
  * @param  array $keys
  * @param  array $options
  * @return boolean
  * @throws Exception\ExceptionInterface
  */
 protected function internalRemoveItems(array &$normalizedKeys, array &$normalizedOptions)
 {
     // support for removing multiple items at once has been added in ext/memcached-2.0.0
     if (static::$extMemcachedMajorVersion < 2) {
         return parent::internalRemoveItems($normalizedKeys, $normalizedOptions);
     }
     $this->memcached->setOption(MemcachedResource::OPT_PREFIX_KEY, $normalizedOptions['namespace']);
     $rsCodes = $this->memcached->deleteMulti($normalizedKeys);
     $missingKeys = null;
     foreach ($rsCodes as $key => $rsCode) {
         if ($rsCode !== true && $rsCode != 0) {
             if ($rsCode != MemcachedResource::RES_NOTFOUND) {
                 throw $this->getExceptionByResultCode($rsCode);
             }
             $missingKeys[] = $key;
         }
     }
     if ($missingKeys && !$normalizedOptions['ignore_missing_items']) {
         throw new Exception\ItemNotFoundException("Keys '" . implode("','", $missingKeys) . "' not found within namespace '{$normalizedOptions['namespace']}'");
     }
     return true;
 }