runff 1.0 commit
This commit is contained in:
119
lib/SimpleSAML/Store/Redis.php
Executable file
119
lib/SimpleSAML/Store/Redis.php
Executable file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace SimpleSAML\Store;
|
||||
|
||||
use \SimpleSAML_Configuration as Configuration;
|
||||
use \SimpleSAML\Store;
|
||||
|
||||
/**
|
||||
* A data store using Redis to keep the data.
|
||||
*
|
||||
* @package SimpleSAMLphp
|
||||
*/
|
||||
class Redis extends Store
|
||||
{
|
||||
public $redis;
|
||||
|
||||
/**
|
||||
* Initialize the Redis data store.
|
||||
*/
|
||||
public function __construct($redis = null)
|
||||
{
|
||||
assert($redis === null || is_subclass_of($redis, 'Predis\\Client'));
|
||||
|
||||
if (!class_exists('\Predis\Client')) {
|
||||
throw new \SimpleSAML\Error\CriticalConfigurationError('predis/predis is not available.');
|
||||
}
|
||||
|
||||
if ($redis === null) {
|
||||
$config = Configuration::getInstance();
|
||||
|
||||
$host = $config->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}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user