2021-01-15redis 连接池和分布式锁

 连接池

类文件

<?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 );
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值