RedisMock set method expire time value is in seconds
kronostof opened this issue · comments
The set
method signature on RedisMock seems to be wrong and store ttl in second.
However set
should support milliseconds for ttl definition.
Proposal
public function set($key, $value, $options = null, $ttl = null)
{
/**
* Per https://redis.io/commands/set#options
* EX seconds -- Set the specified expire time, in seconds.
* PX milliseconds -- Set the specified expire time, in milliseconds.
* NX -- Only set the key if it does not already exist.
* XX -- Only set the key if it already exist.
*/
if (!is_null($options) && !in_array($options, ['ex', 'px', 'nx', 'xx'])) {
$this->returnPipedInfo('(error) ERR syntax error');
}
if ('nx'=== $options && $this->get($key)) {
return $this->returnPipedInfo(0);
}
if ('xx' === $options && !$this->get($key)) {
return $this->returnPipedInfo(0);
}
if ($options === 'ex') {
$ttl = $ttl;
} elseif ($options === 'px') {
$ttl = $ttl / 1000;
}
self::$dataValues[$this->storage][$key] = $value;
self::$dataTypes[$this->storage][$key] = 'string';
if (!is_null($ttl)) {
self::$dataTtl[$this->storage][$key] = microtime(true) + $ttl;
}
As it will be impacted, We should update RedisSessionHandler, and check that ttl resolution is compatible with symfony session resolution