记一次 PolarDb 8核,RDS 4 L2核性能测试

作者: 分类: php 时间: 2022-08-10 评论: 暂无评论

ploardb 8c: 每秒平均插入记录数

每次执行10条 循环10000次
10w 220s 454 r/s
10w 194s 500 r/s

每次执行20条 循环5000次
10w 104s 961r/s

RDS 4C L2级磁盘 2000/月

每次执行10条 循环10000次

10w 206s 500 r/s

10w 243s 411 r/s

每次执行20条 循环5000次
10w 115 s 869r/s

mysql 快速导出数据

作者: 分类: php 时间: 2022-07-18 评论: 暂无评论
mysqldump -h ip -P port -u usr -p Password --default-character-set=utf8mb4 --net_buffer_length=10240 --no-tablespaces --no-create-db --no-create-info --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset --hex-blob db_name [table_name] > /home/dump_1000w.sql 

http常见状态码

作者: 分类: php 时间: 2022-07-04 评论: 暂无评论

一、1开头的状态码(信息类)
100,接受的请求正在处理,信息类状态码

二、2开头的状态码(成功类)
2xx(成功)表示成功处理了请求的状态码
200(成功)服务器已成功处理了请求。

三、3开头的状态码(重定向)
3xx(重定向)表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。
301,永久性重定向,表示资源已被分配了新的 URL
302,临时性重定向,表示资源临时被分配了新的 URL
303,表示资源存在另一个URL,用GET方法获取资源
304,(未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容

四、4开头的状态码(客户端错误)
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理
400(错误请求)服务器不理解请求的语法
401表示发送的请求需要有通过HTTP认证的认证信息
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求网页

五、5开头的状态码(服务器错误)
5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误
500,(服务器内部错误)服务器遇到错误,无法完成请求
503,表示服务器处于停机维护或超负载,无法处理请求

如何避免超发问题

作者: 分类: php 时间: 2022-07-03 评论: 暂无评论

1.事务锁,select * from shop for update

2.队列 把请求推进队列,异步处理

php 连接rabbitmq

作者: 分类: php 时间: 2022-06-27 评论: 暂无评论

composer require php-amqplib/php-amqplib 3.1.2

<?php


namespace app\ospay\model;

use app\common\library\helper;
use PhpAmqpLib\Channel\AMQPChannel;
use PhpAmqpLib\Connection\AMQPSocketConnection;
use PhpAmqpLib\Message\AMQPMessage;
use PhpAmqpLib\Wire\AMQPAbstractCollection;
use PhpAmqpLib\Wire\AMQPTable;
use think\facade\Db;
use think\Model;
use app\ospay\serve\LvServe;

/**
 * 支付系统
 * Class OsPay
 * @package app\ospay\model
 */
class OsQueen extends Model
{
    public static $QUEEN_KEY = 'OS_PAY_NOTIFY_LIST';

    public static $CON;


    public static function getQueenCon()
    {
        // 创建链接
        $connection = new AMQPSocketConnection(
            config('rabbitmq.host'), config('rabbitmq.port'),
            config('rabbitmq.login'), config('rabbitmq.password'),
            config('rabbitmq.vhost'), false,
            'AMQPLAIN', null, 'en_US',
            3, false, 3, 60
        );
        return $connection;
    }
    public static function getChan(AMQPSocketConnection $connection)
    {
        $arg = new AMQPTable();
        $arg->set('x-max-length', 100*10000); //缓冲队列 最长100万
        $arg->set('x-max-length-bytes', 512 * 1000 * 1000);  //单位字节(byte) 512M
        $channel = $connection->channel();
        $channel->queue_declare(OsQueen::$QUEEN_KEY, false, true, false, false, false, $arg);
        return $channel;
    }

    /**
     * 添加到队列
     *
     */
    public static function sendQueen(AMQPChannel $channel,$data)
    {
        $msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);
        $channel->basic_publish($msg, '', self::$QUEEN_KEY);

    }


    /**
     * 消费者
     * @throws \ErrorException
     */
    public static function consume(string $tag)
    {
        echo $tag;
        // 创建链接
        $con=OsQueen::getQueenCon();
        $chan=OsQueen::getChan($con);
        $func = function (AMQPMessage $msg) {
            OsQueen::notifyOrder($msg->getBody());
            $msg->ack();
        };
        $chan->basic_qos(null, 1, null);
        $chan->basic_consume(self::$QUEEN_KEY, $tag, false, false, false, false, $func);
        while($chan->is_open()) {
            $chan->wait();
        }
    }

    public static function notifyOrder($queen_id)
    {
        $order = OsQueen::find($queen_id);
        $config=OsShopAttach::where('shop_id',$order['shop_id'])->cache(600)->find();
        if(!empty($order)&&$order['notify_status']==0){
            $data = [
                'code' => $order['code'],
                'shop_id' => $order['shop_id'],
                'out_trade_no' => $order['out_trade_no'],
                'order_no' => $order['order_no'],
                'total_fee' => $order['total_fee'],
            ];

            $data['sign'] = LvServe::sign($data,$config['md5_key']);
            $data['attach'] = $order['attach'];
            $data['msg'] = $order['msg'];

            $w[] = [
                'id', '=', $order['id']
            ];
            try {
                $resp = LvServe::curl($order['notify_url'], $data, 6);
                $up = [];
                $up['notify_status'] = strtoupper($resp) == 'SUCCESS' ? 1 : 0;
                $up['update_at'] = time();
                $up['notify_num']=Db::raw('notify_num+1');
                OsQueen::where($w)->update($up);
            } catch (\Exception $e) {
                log_write(helper::jsonEncode($e->getMessage()), 'error');
                $up['notify_status'] =  0;
                $up['update_at'] = time();
                OsQueen::where($w)->update($up);
                return;
            }
        }
    }

}
Top ↑