连接池
类文件
<?php
namespace app\api\controller;
use app\common\controller\Api;
use think\Db;
use think\Config;
class RedisPool
{
private static $connections = array(); //定义一个对象池
private static $servers = array(); //定义redis配置文件
public static function addServer($conf) //定义添加redis配置方法
{
foreach ($conf as $alias => $data){
self::$servers[$alias]=$data;
}
}
public static function getRedis($alias,$select = 0)//两个参数要连接的服务器KEY,要选择的库
{
if(!array_key_exists($alias,self::$connections)){ //判断连接池中是否存在
$redis = new \Redis();
$redis->connect(self::$servers[$alias][0],self::$servers[$alias][1]);
self::$connections[$alias]=$redis;
if(isset(self::$servers[$alias][2]) && self::$servers[$alias][2]!=""){
self::$connections[$alias]->auth(self::$servers[$alias][2]);
}
}
self::$connections[$alias]->select($select);
return self::$connections[$alias];
}
}
公共链接函数
public function connect_to_redis(){
//使用redis连接池
$conf = array(
'RA' => array( '127.0.0.1' ,6379) //定义Redis配置
);
RedisPool::addServer($conf); //添加Redis配置
$redis = RedisPool::getRedis('RA',0); //连接RA,使用默认0库
return $redis;
}
调用
public function t1() {
$redis = $this->connect_to_redis();
$redis->set('key',1);
echo "<pre>";var_dump( $redis->get( 'key' ) );
}
分布式锁
加锁
/**
* @return boolean
*/
function check_multi($key = '', $value = "check", $ttl = 3) {
/**
* // 使用
$key = $goods_sn . "-" . "confirm_order" . "-" . $this->id ;
$check_info = check_multi( $key );
if( !$check_info ){
$this->error( "服务器繁忙,请稍候再试" );
}
*/
$config = [
"host" => "127.0.0.1",
"port" => 6379,
];
$redis = new redis();
$redis->connect($config['host'], $config['port']);
$get_k = $redis->get($key);
if ($get_k) {
return false;
}
$set_k = $redis->set($key, $value, array('nx', 'ex' => $ttl));
return $set_k;
}
删锁
/**
* 删除分布式锁
*/
function del_redis_distributed_lock( $key ){
$config = [
"host" => "127.0.0.1",
"port" => 6379,
];
$redis = new redis();
$redis->connect($config['host'], $config['port']);
$redis->del( $key );
}