getString('store.redis.host', 'localhost'); $port = $config->getInteger('store.redis.port', 6379); $prefix = $config->getString('store.redis.prefix', 'SimpleSAMLphp'); $redis = new \Predis\Client( array( 'scheme' => 'tcp', 'host' => $host, 'port' => $port, ), array( 'prefix' => $prefix, ) ); } $this->redis = $redis; } /** * Deconstruct the Redis data store. */ public function __destruct() { if (method_exists($this->redis, 'disconnect')) { $this->redis->disconnect(); } } /** * Retrieve a value from the data store. * * @param string $type The type of the data. * @param string $key The key to retrieve. * * @return mixed|null The value associated with that key, or null if there's no such key. */ public function get($type, $key) { assert(is_string($type)); assert(is_string($key)); $result = $this->redis->get("{$type}.{$key}"); if ($result === false || $result === null) { return null; } return unserialize($result); } /** * Save a value in the data store. * * @param string $type The type of the data. * @param string $key The key to insert. * @param mixed $value The value itself. * @param int|null $expire The expiration time (unix timestamp), or null if it never expires. */ public function set($type, $key, $value, $expire = null) { assert(is_string($type)); assert(is_string($key)); assert($expire === null || (is_int($expire) && $expire > 2592000)); $serialized = serialize($value); if ($expire === null) { $this->redis->set("{$type}.{$key}", $serialized); } else { // setex expire time is in seconds (not unix timestamp) $this->redis->setex("{$type}.{$key}", $expire - time(), $serialized); } } /** * Delete an entry from the data store. * * @param string $type The type of the data * @param string $key The key to delete. */ public function delete($type, $key) { assert(is_string($type)); assert(is_string($key)); $this->redis->del("{$type}.{$key}"); } }