public function Decrement($Key, $Amount = 1, $Options = array()) { $FinalOptions = array_merge($this->StoreDefaults, $Options); $Initial = GetValue(Gdn_Cache::FEATURE_INITIAL, $FinalOptions, NULL); $Expiry = GetValue(Gdn_Cache::FEATURE_EXPIRY, $FinalOptions, NULL); $RequireBinary = $Initial || $Expiry; $Initial = !is_null($Initial) ? $Initial : 0; $Expiry = !is_null($Expiry) ? $Expiry : 0; $TryBinary = $this->Option(Memcached::OPT_BINARY_PROTOCOL, FALSE) & $RequireBinary; $RealKey = $this->MakeKey($Key, $FinalOptions); switch ($TryBinary) { case FALSE: $Decremented = $this->Memcache->decrement($RealKey, $Amount); break; case TRUE: $Decremented = $this->Memcache->decrement($RealKey, $Amount, $Initial, $Expiry); break; } if ($Decremented !== FALSE) { Gdn_Cache::LocalSet($RealKey, $Decremented); return $Decremented; } return Gdn_Cache::CACHEOP_FAILURE; }
public function Decrement($key, $amount = 1, $options = array()) { if (!$this->Online()) { return Gdn_Cache::CACHEOP_FAILURE; } $finalOptions = array_merge($this->StoreDefaults, $options); $initial = val(Gdn_Cache::FEATURE_INITIAL, $finalOptions, NULL); $expiry = val(Gdn_Cache::FEATURE_EXPIRY, $finalOptions, NULL); $requireBinary = $initial || $expiry; $initial = !is_null($initial) ? $initial : 0; $expiry = !is_null($expiry) ? $expiry : 0; $tryBinary = $this->Option(Memcached::OPT_BINARY_PROTOCOL, FALSE) & $requireBinary; $realKey = $this->MakeKey($key, $finalOptions); switch ($tryBinary) { case FALSE: $decremented = $this->Memcache->decrement($realKey, $amount); if (is_null($decremented) && $initial) { $decremented = $this->Memcache->set($realKey, $initial); if ($decremented) { $decremented = $initial; } } break; case TRUE: $decremented = $this->Memcache->decrement($realKey, $amount, $initial, $expiry); break; } // Check if things went ok $ok = $this->lastAction($realKey); if (!$ok) { return Gdn_Cache::CACHEOP_FAILURE; } if ($decremented !== FALSE) { Gdn_Cache::LocalSet($realKey, $decremented); return $decremented; } return Gdn_Cache::CACHEOP_FAILURE; }