diff --git a/lib/private/Memcache/APCu.php b/lib/private/Memcache/APCu.php index 7f6a73354eed1..024462d227b9e 100644 --- a/lib/private/Memcache/APCu.php +++ b/lib/private/Memcache/APCu.php @@ -25,6 +25,9 @@ public function get($key) { } public function set($key, $value, $ttl = 0) { + if ($ttl === 0) { + $ttl = self::DEFAULT_TTL; + } return apcu_store($this->getPrefix() . $key, $value, $ttl); } @@ -56,6 +59,9 @@ public function clear($prefix = '') { * @return bool */ public function add($key, $value, $ttl = 0) { + if ($ttl === 0) { + $ttl = self::DEFAULT_TTL; + } return apcu_add($this->getPrefix() . $key, $value, $ttl); } @@ -67,22 +73,8 @@ public function add($key, $value, $ttl = 0) { * @return int | bool */ public function inc($key, $step = 1) { - $this->add($key, 0); - /** - * TODO - hack around a PHP 7 specific issue in APCu - * - * on PHP 7 the apcu_inc method on a non-existing object will increment - * "0" and result in "1" as value - therefore we check for existence - * first - * - * on PHP 5.6 this is not the case - * - * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221 - * for details - */ - return apcu_exists($this->getPrefix() . $key) - ? apcu_inc($this->getPrefix() . $key, $step) - : false; + $success = null; + return apcu_inc($this->getPrefix() . $key, $step, $success, self::DEFAULT_TTL); } /** @@ -93,18 +85,6 @@ public function inc($key, $step = 1) { * @return int | bool */ public function dec($key, $step = 1) { - /** - * TODO - hack around a PHP 7 specific issue in APCu - * - * on PHP 7 the apcu_dec method on a non-existing object will decrement - * "0" and result in "-1" as value - therefore we check for existence - * first - * - * on PHP 5.6 this is not the case - * - * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221 - * for details - */ return apcu_exists($this->getPrefix() . $key) ? apcu_dec($this->getPrefix() . $key, $step) : false; diff --git a/lib/private/Memcache/Redis.php b/lib/private/Memcache/Redis.php index cbafadc3b1b90..87dc86ab10d30 100644 --- a/lib/private/Memcache/Redis.php +++ b/lib/private/Memcache/Redis.php @@ -29,7 +29,6 @@ class Redis extends Cache implements IMemcacheTTL { ], ]; - private const DEFAULT_TTL = 24 * 60 * 60; // 1 day private const MAX_TTL = 30 * 24 * 60 * 60; // 1 month /** diff --git a/lib/public/ICache.php b/lib/public/ICache.php index ba6016c8d283b..5e755d81e1448 100644 --- a/lib/public/ICache.php +++ b/lib/public/ICache.php @@ -15,6 +15,11 @@ * @since 6.0.0 */ interface ICache { + /** + * @since 30.0.0 + */ + public const DEFAULT_TTL = 24 * 60 * 60; + /** * Get a value from the user cache * @param string $key diff --git a/lib/public/IMemcache.php b/lib/public/IMemcache.php index fbc2719c25de9..6e63884ff4513 100644 --- a/lib/public/IMemcache.php +++ b/lib/public/IMemcache.php @@ -30,6 +30,9 @@ public function add($key, $value, $ttl = 0); /** * Increase a stored number * + * If no value is stored with the key, it will behave as if a 0 was stored. + * If a non-numeric value is stored, the operation will fail and `false` is returned. + * * @param string $key * @param int $step * @return int | bool @@ -40,6 +43,9 @@ public function inc($key, $step = 1); /** * Decrease a stored number * + * If no value is stored with the key, the operation will fail and `false` is returned. + * If a non-numeric value is stored, the operation will fail and `false` is returned. + * * @param string $key * @param int $step * @return int | bool diff --git a/psalm.xml b/psalm.xml index 05ea0ef20bcb3..dece0c3eb8886 100644 --- a/psalm.xml +++ b/psalm.xml @@ -151,5 +151,12 @@ + + + + + + +