Merge pull request #46395 from nextcloud/apcu-default-ttl

fix: set default TTL for APCu cache as per docs
This commit is contained in:
Robin Appelman 2024-08-07 20:16:02 +02:00 committed by GitHub
commit 495f454b6f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 26 additions and 29 deletions

View file

@ -25,6 +25,9 @@ class APCu extends Cache implements IMemcache {
}
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 @@ class APCu extends Cache implements IMemcache {
* @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 @@ class APCu extends Cache implements IMemcache {
* @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 @@ class APCu extends Cache implements IMemcache {
* @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;

View file

@ -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
/**

View file

@ -15,6 +15,11 @@ namespace OCP;
* @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

View file

@ -30,6 +30,9 @@ interface IMemcache extends ICache {
/**
* 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 @@ interface IMemcache extends ICache {
/**
* 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

View file

@ -151,5 +151,12 @@
<referencedClass name="OCA\GlobalSiteSelector\Service\SlaveService"/>
</errorLevel>
</UndefinedDocblockClass>
<AmbiguousConstantInheritance>
<errorLevel type="suppress">
<!-- false positive: https://github.com/vimeo/psalm/issues/7818 -->
<referencedConstant name="OC\Memcache\Redis::DEFAULT_TTL" />
<referencedConstant name="OC\Memcache\LoggerWrapperCache::DEFAULT_TTL" />
</errorLevel>
</AmbiguousConstantInheritance>
</issueHandlers>
</psalm>