Laravel使用Swoole Table功能

下面的代码直接是一个类,控制器直接引用使用。使用前请确认你已经安装swoole服务和redis服务。我的laravel版本是5.5,swoole版本是最新的。我的生产项目中主要只使用了find方法,其他几个方法仅供参考,使用请谨慎~


/**
 * Created by PhpStorm.
 * User: Aicken.peng
 * Date: 2019/9/11
 * Time: 9:48
 */

namespace Lib;

use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use SwooleTW\Http\Table\Facades\SwooleTable;

class SwooleTables
{
    public static $id = 0;

    public static function __callStatic($method, $parameters)
    {
        $redis = new Redis();

        try{
            $result = $redis::{$method}(...$parameters);
        }catch (\Exception $exception){
            return [];
        }
        return $result;
    }

    /**
     * 查找swoole表单行数据
     * 表名 @param $tableName
     * 主键key @param $key
     * 字段名 @param $field
     * 有效时间(秒) @param $valid
     * redis方法 @param $redisMethod
     * 需要redis处理的参数 @param $parameters
     * @return mixed
     */
    public static function find($tableName, $key, $valid = 0, $redisMethod = null, $parameters = [])
    {
        // 判断是否找到数据
        if ($swooleData = self::swooleGet($tableName, $key)) {
            // 判断数据是否处于有效期
            if (Arr::get($swooleData, 'invalidTime') > time()) {
                return unserialize(Arr::get($swooleData, 'content'));
            }
        }

        // 是否需要调用回调函数
        if (empty($redisMethod) or empty($parameters))
            return false;

        // 读取redis数据&写入到swoole表
        $result = call_user_func_array([__CLASS__, $redisMethod], $parameters);
        self::swooleSet($tableName,$key, [['content' => serialize($result), 'invalidTime' => time() + $valid]]);
        return $result;
    }

    // 读取或设置 swoole table数据
    public static function callBackFind($tableName, $key, $valid = 0, $function = null, $params = [])
    {
        // 判断是否找到数据
        if ($swooleData = self::swooleGet($tableName, $key)) {
            // 判断数据是否处于有效期
            if (Arr::get($swooleData, 'invalidTime') > time()) {
                return unserialize(Arr::get($swooleData, 'content'));
            }
        }

        $temp = [];
        if(!empty($function)){
            $temp = self::callFunction($function, $params);
        }

        self::swooleSet($tableName, $key, [['content' => serialize($temp), 'invalidTime' => time() + $valid]]);
        return $temp;
    }


    private static function callFunction($function, $params)
    {
        $result = $function($params);
        return $result;
    }

    /**
     * 添加数据到swoole表
     * @param $tableName 表名
     * @param $key 键名
     * @param array or string $data
     */
    public static function swooleSet($tableName, $key, $data)
    {
        $table = SwooleTable::get($tableName);

        // 循环插入内存表
        foreach ($data as $item) {
            if($key){
                $table->set($key, $item);
            }
        }

        return true;
    }

    /**
     * 获取指定swoole
     * @param $tableName swoole表名
     * @param $key 键名
     * @param null $field 单行 字段名
     * @return array 指定行数据
     */
    public static function swooleGet($tableName, $key, $field = null)
    {
        $table = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        // 取出指定行的指定字段
        if ($field) {
            $data = $table->get($key, $field);
            return $data;
        }

        $data = $table->get($key);
        return $data;
    }

    /**
     * 获取指定swoole表中的所有数据
     * @param $tableName swoole表名
     * @return array 结果集
     */
    public static function swooleGetAll($tableName)
    {
        $temp = [];
        $data = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        foreach ($data as $item) {
            $temp[] = $item;
        }

        return $temp;
    }

    /**
     * 指定字段值自增值
     * @param $tableName swoole表名
     * @param $key 键名
     * @param $field 单行 字段名
     * @param int $incrby 自增值
     * @return mixed
     */
    public static function swooleIncrement($tableName, $key, $field, $incrby = 1)
    {
        $table = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        $result = $table->incr($table, $key, $field, $incrby);
        return $result;
    }

    /**
     * 指定字段值自减值
     * @param $tableName swoole表名
     * @param $key 键名
     * @param $field 单行 字段名
     * @param int $incrby 自增值
     * @return mixed
     */
    public static function swooleDecrement($tableName, $key, $field, $incrby = 1)
    {
        $table = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        $result = $table->incr($table, $key, $field, $incrby);
        return $result;
    }

    /**
     * 获取数据表条目数
     * @param $tableName
     * @return int 数据表条目数
     */
    public static function swooleCount($tableName)
    {
        $table = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        return $table->count();
    }

    /**
     * 判断表中的指定key是否存在
     * @param $tableName 表名
     * @param $key 键名
     * @return bool
     */
    public static function swooleExist($tableName, $key)
    {
        $table = SwooleTable::get($tableName);

        if (empty($table))
            return false;

        return $table->exist($key);
    }

    /**
     * 根据key删除swoole表数据
     * @param $tableName 表名
     * @param $key key
     * @return bool
     */
    public static function swooleDelete($tableName, $key)
    {
        $table = SwooleTable::get($tableName);

        if (empty($tableName))
            return false;

        return $table->del($key);
    }

}

你可能感兴趣的:(php,laravel,redis)