Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 64 |
redis | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
182.00 | |
0.00% |
0 / 56 |
__construct | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 35 |
|||
unload | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 4 |
|||
purge | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 4 |
|||
_read | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
_write | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
_delete | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 7 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\cache\driver; | |
if (!defined('PHPBB_ACM_REDIS_PORT')) | |
{ | |
define('PHPBB_ACM_REDIS_PORT', 6379); | |
} | |
if (!defined('PHPBB_ACM_REDIS_HOST')) | |
{ | |
define('PHPBB_ACM_REDIS_HOST', 'localhost'); | |
} | |
/** | |
* ACM for Redis | |
* | |
* Compatible with the php extension phpredis available | |
* at https://github.com/nicolasff/phpredis | |
* | |
*/ | |
class redis extends \phpbb\cache\driver\memory | |
{ | |
var $extension = 'redis'; | |
var $redis; | |
/** | |
* Creates a redis cache driver. | |
* | |
* The following global constants affect operation: | |
* | |
* PHPBB_ACM_REDIS_HOST | |
* PHPBB_ACM_REDIS_PORT | |
* PHPBB_ACM_REDIS_PASSWORD | |
* PHPBB_ACM_REDIS_DB | |
* | |
* There are no publicly documented constructor parameters. | |
*/ | |
function __construct() | |
{ | |
// Call the parent constructor | |
parent::__construct(); | |
$this->redis = new \Redis(); | |
$args = func_get_args(); | |
if (!empty($args)) | |
{ | |
$ok = call_user_func_array(array($this->redis, 'connect'), $args); | |
} | |
else | |
{ | |
$ok = $this->redis->connect(PHPBB_ACM_REDIS_HOST, PHPBB_ACM_REDIS_PORT); | |
} | |
if (!$ok) | |
{ | |
trigger_error('Could not connect to redis server'); | |
} | |
if (defined('PHPBB_ACM_REDIS_PASSWORD')) | |
{ | |
if (!$this->redis->auth(PHPBB_ACM_REDIS_PASSWORD)) | |
{ | |
global $acm_type; | |
trigger_error("Incorrect password for the ACM module $acm_type.", E_USER_ERROR); | |
} | |
} | |
$this->redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); | |
$this->redis->setOption(\Redis::OPT_PREFIX, $this->key_prefix); | |
if (defined('PHPBB_ACM_REDIS_DB')) | |
{ | |
if (!$this->redis->select(PHPBB_ACM_REDIS_DB)) | |
{ | |
global $acm_type; | |
trigger_error("Incorrect database for the ACM module $acm_type.", E_USER_ERROR); | |
} | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
function unload() | |
{ | |
parent::unload(); | |
$this->redis->close(); | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
function purge() | |
{ | |
$this->redis->flushDB(); | |
parent::purge(); | |
} | |
/** | |
* Fetch an item from the cache | |
* | |
* @access protected | |
* @param string $var Cache key | |
* @return mixed Cached data | |
*/ | |
function _read($var) | |
{ | |
return $this->redis->get($var); | |
} | |
/** | |
* Store data in the cache | |
* | |
* For the info, see https://phpredis.github.io/phpredis/Redis.html#method_set, | |
* https://redis.io/docs/latest/commands/set/ | |
* and https://redis.io/docs/latest/commands/expire/#appendix-redis-expires | |
* | |
* @access protected | |
* @param string $var Cache key | |
* @param mixed $data Data to store | |
* @param int $ttl Time-to-live of cached data | |
* @return bool True if the operation succeeded | |
*/ | |
function _write($var, $data, $ttl = 2592000) | |
{ | |
return $this->redis->set($var, $data, ['EXAT' => time() + $ttl]); | |
} | |
/** | |
* Remove an item from the cache | |
* | |
* @access protected | |
* @param string $var Cache key | |
* @return bool True if the operation succeeded | |
*/ | |
function _delete($var) | |
{ | |
if ($this->redis->delete($var) > 0) | |
{ | |
return true; | |
} | |
return false; | |
} | |
} |