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;
}
The
setmethod signature on RedisMock seems to be wrong and store ttl in second.However
setshould support milliseconds for ttl definition.Proposal
As it will be impacted, We should update RedisSessionHandler, and check that ttl resolution is compatible with symfony session resolution