这篇文章主要介绍了关于tp5缓存驱动predis php没有redis驱动模块的时候使用predis连接使用redis ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
没有redis驱动模块的时候使用predis连接使用redis
安装
composer require predis/predis
tp5 缓存驱动增加predis.php
<?phpnamespace think\cache\driver;use think\cache\driver;/**
* predis缓存驱动,就是php没有redis扩展的时候使用,适合单机部署、有前端代理实现高可用的场景,性能最好
* 有需要在业务层实现读写分离、或者使用rediscluster的需求,请使用redisd驱动
*
* 要求安装predis扩展:https://github.com/nrk/predis
*
*/class predis extends driver{
protected $options = [ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', 'database' => 15,
];
/**
* 构造函数
* @param array $options 缓存参数
* @access public
*/
public function __construct($options = [])
{
if (!empty($options)) {
$this->options = array_merge($this->options, $options);
} $func = $this->options['persistent'] ? 'pconnect' : 'connect';
$this->handler = new \predis\client;
$this->handler->$func($this->options['host'], $this->options['port'], $this->options['timeout']);
if ('' != $this->options['password']) {
$this->handler->auth($this->options['password']);
}
if (0 != $this->options['select']) {
$this->handler->select($this->options['select']);
}
} /**
* 判断缓存
* @access public
* @param string $name 缓存变量名
* @return bool
*/
public function has($name)
{
return $this->handler->get($this->getcachekey($name)) ? true : false;
} /**
* 读取缓存
* @access public
* @param string $name 缓存变量名
* @param mixed $default 默认值
* @return mixed
*/
public function get($name, $default = false)
{
$value = $this->handler->get($this->getcachekey($name));
if (is_null($value)) {
return $default;
}
$jsondata = json_decode($value, true); // 检测是否为json数据 true 返回json解析数组, false返回源数据 byron sampson<xiaobo.sun@qq.com>
return (null === $jsondata) ? $value : $jsondata;
} /**
* 写入缓存
* @access public
* @param string $name 缓存变量名
* @param mixed $value 存储数据
* @param integer $expire 有效时间(秒)
* @return boolean
*/
public function set($name, $value, $expire = null)
{
if (is_null($expire)) {
$expire = $this->options['expire'];
}
if ($this->tag && !$this->has($name)) {
$first = true;
}
$key = $this->getcachekey($name); //对数组/对象数据进行缓存处理,保证数据完整性 byron sampson<xiaobo.sun@qq.com>
$value = (is_object($value) || is_array($value)) ? json_encode($value) : $value;
if (is_int($expire) && $expire) {
$result = $this->handler->setex($key, $expire, $value);
} else {
$result = $this->handler->set($key, $value);
}
isset($first) && $this->settagitem($key);
return $result;
} /**
* 自增缓存(针对数值缓存)
* @access public
* @param string $name 缓存变量名
* @param int $step 步长
* @return false|int
*/
public function inc($name, $step = 1)
{
$key = $this->getcachekey($name);
return $this->handler->incrby($key, $step);
} /**
* 自减缓存(针对数值缓存)
* @access public
* @param string $name 缓存变量名
* @param int $step 步长
* @return false|int
*/
public function dec($name, $step = 1)
{
$key = $this->getcachekey($name);
return $this->handler->decrby($key, $step);
} /**
* 删除缓存
* @access public
* @param string $name 缓存变量名
* @return boolean
*/
public function rm($name)
{
return $this->handler->delete($this->getcachekey($name));
} /**
* 清除缓存
* @access public
* @param string $tag 标签名
* @return boolean
*/
public function clear($tag = null)
{
if ($tag) { // 指定标签清除
$keys = $this->gettagitem($tag);
foreach ($keys as $key) {
$this->handler->delete($key);
}
$this->rm('tag_' . md5($tag));
return true;
}
return $this->handler->flushdb();
}
}
相关推荐:
php
中tp5 request 请求对象的方法
以上就是tp5缓存驱动predis php没有redis驱动模块的时候使用predis连接使用redis 的详细内容。