public function testGetTtlInSecondsException() { $now = Carbon::now(); $this->setExpectedException(Exception::class); TimeTools::getTtlInSeconds($now->subMinute(2)); $this->setExpectedException(Exception::class); }
public function serialize($prefix, array $data, $minutes, array $tags) { $seconds = TimeTools::getTtlInSeconds($minutes); $tags = $this->tagVersions->getActualVersionsFor($tags); $data = ArrayTools::addPrefixToArrayKeys($prefix, $data); $data = array_map(function ($value) use($seconds, $tags) { return (string) CacheItem::encode($this->isSimpleType($value) ? $value : $this->coderManager->encode($value), $seconds, $tags); }, $data); return $data; }
/** * @param array $values * @param int $minutes * @param bool $nxOnly Only set non-existent keys * * @throws \Predis\Response\ServerException * @throws \Predis\Transaction\AbortedMultiExecException */ public function mset(array $values, $minutes, $nxOnly = false) { $values = $this->serializer->serialize($this->prefix, $values, $minutes, $this->tags); // Executing MULTI only if we transfer more than one item $redis = count($values) > 1 ? $this->connection()->transaction() : $this->connection(); //Building MSET command with arguments we need $arguments = ['key' => '', 'value' => '']; if (0 !== $minutes) { $arguments['ex'] = 'EX'; // Arg #3 $arguments['seconds'] = TimeTools::getTtlInSeconds($minutes); // Arg #4 } if ($nxOnly) { $arguments['nx'] = 'NX'; // Arg #5 } foreach ($values as $key => $value) { $arguments['key'] = $key; $arguments['value'] = $value; call_user_func_array([$redis, 'set'], $arguments); } // Executing Redis EXEC if needed if (count($values) > 1) { $redis->execute(); } }