- 博客(33)
- 收藏
- 关注
原创 PHP 抽奖概率计算(经典)
设置中奖的列表字段说明id 奖品编号prize 奖品名称v 中奖概率$prize_arr = array( array('id' => 1, 'prize' => '笔记本电脑', 'v' => 1), array('id' => 2, 'prize' => '华为手机', 'v' => 5), array('id' => 3, 'prize' => '蓝牙音箱', 'v' => 10), array('id' => 4,
2022-03-02 15:07:05 2730
原创 Laravel 如何使用数据库连接池提高性能
Swoole MySQL ProxySMProxy文档地址一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。原理将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。 使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数
2021-11-13 17:02:48 2638
原创 PHP+laravel 高并发下接口限流方案
一、什么是接口限流那么什么是限流呢?顾名思义,限流就是限制流量,包括并发的流量和一定时间内的总流量,就像你宽带包了1个G的流量,用完了就没了,所以控制你的使用频率和单次使用的总消耗。通过限流,我们可以很好地控制系统的qps,从而达到保护系统或者接口服务器稳定的目的。二、常用的接口限流算法1、计数器法2、漏桶算法3、令牌桶算法今天主要使用令牌桶算法进行接口限流(基于laravel框架)首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的(可用token数为0),token
2021-11-10 16:08:33 2732
原创 mysql8.0实现主从复制配置(详细)
今天说一下MySQL的主从复制如何做到!准备工作:1.两个虚拟机:我这里用的是CentOS7,IP地址分别是192.168.124.143 和192.168.124.144;143做主服务器,144做从服务器(都已经安装相同版本的Mysql)2.本机环境:Linux + nginx + PHP + MySQL好了,现在开始吧,来看看这听起来高大上的主从复制是怎么回事。原理:mysql要做到主从复制,其实依靠的是二进制日志即:假设主服务器叫A,从服务器叫B;主从复制就是B跟着A学,A做什么,B
2021-11-02 14:22:01 3030 5
原创 laravel jwt实现用户认证登录
一、什么是jwt,怎么运行的1、jwt == Json Web Tokens2、传统认证与jwt认证的区别与优势:传统的方式:主要是将认证后的用户信息储存在服务器上,比如Session。用户下次请求的时候带上Session Id,然后服务器以此查询用户是否认证过传统认证方式的问题:(1)、每次用户认证通过后,服务器需要创建一天记录保存用户信息,通常是在内存中,随着认证通过的用户越来越多,服务器在这里的开销就越来越大(2)、session是在内存中,容易带来一些扩展性的问题(3)、当我们想
2021-10-30 16:39:26 2561
原创 git 合并代码冲突解决命令
git冲突解决命令例如从branch分支合并到develop分支从远端拉去分支git fetch origin新建一个用于合并的分支git checkout -b 用于合并的分支名 远端分支例如:git checkout -b merge-branch origin/branch合并目标分支git merge 目标分支git merge develop4、解决代码冲突部分,然后提交commit5、切换到目标分支developgit checkout develop6、合并刚
2021-10-26 11:26:45 1650
原创 php + redis实现秒杀系统
秒杀下单和普通下单的主要区别:**普通下单:**查询库存,判断库存,如果有库存则创建订单,如果没有库存则提示库存不足**秒杀下单:**秒杀期间一般人数比较大,且访问集中,导致并发大,如果还按照普通下单逻辑,当库存很多的时候没有问题,但是当库存只剩下1个时,如果此时有10个人同时下单,则会出现查询库存时每个人都查询到库存还剩1个,则每个人都下单成功,而实际上就只有1个库存,导致超卖9个,所以秒杀商品时要解决的一个重要问题就是商品超卖的问题下面我将基于laravel的基础之上,通过redis乐观锁的和re
2021-10-16 15:48:24 3463 1
原创 Redis 缓存击穿、穿透、雪崩的原因以及解决方案
一、缓存穿透原因描述:指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果 key 不存在或者 key 已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。但是这种方法存在一个问题,比如我传一个用户 id 为 - 1,这个用户 id 在缓存里面是肯定不存在的,所以会去数据库里面查询,如果有搞事情的人,大批量请求并传用户 id 为 - 1,那就和没用 redis 一样,导致数据库压力过大而崩溃。解决方法:方法一:在接口层
2021-10-12 17:11:48 1103
原创 laravel 大文件分片上传
一、PHP实现大文件上传的办法1、因为默认会有上传大小限制,所有可以通过修改nginx和PHP的配置,来扩大限制,但是只能治标不治本,换一个环境还需要重新配置,而且很容易因为上传超时而中断2、通过将大文件进行分片,每一片都是一个小文件,每次上传一部分到服务器,通过多次上传来完成大文件的上传功能,不会出现超时中断的问题大文件分片上传解决的是大文件上传容易出现超时中断的问题,并不是解决上传速度的问题该篇文章是我在已有的可以正常运行的laravel项目中新增的几个文件来实现的,如果不想自己做也可以使用la
2021-09-17 15:13:36 2467 6
原创 Laravel + Swoole 打造IM简易聊天室
应用场景:实现简单的即时消息聊天室.(Linux + centos + php + nginx + mysql + redis)环境一、扩展安装pecl install swoole安装完成后可以通过以下命令检测Swoole是否安装成功php -m二、webSocket服务端代码我们需要通过Laravel Command来实现,因为Swoole只能运行在PHP CLI模式下1.生成Command类php artisan make:command SwooleServer2.编写webS
2021-09-13 16:18:57 1094
原创 centos7 编译安装lnmp环境(MySQL篇三)
centos7 编译安装lnmp环境(nginx篇一)点击查看https://blog.csdn.net/weixin_45310179/article/details/119561776?spm=1001.2014.3001.5501centos7 编译安装lnmp环境(PHP篇二)点击查看https://blog.csdn.net/weixin_45310179/article/details/119572299?spm=1001.2014.3001.5501一、MySQL安装配置1、下载my
2021-08-11 16:16:01 211
原创 centos7 编译安装lnmp环境(PHP篇二)
一、安装PHP1、先安装如下依赖包yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl cu
2021-08-11 10:01:45 344
原创 centos7 编译安装lnmp环境(nginx篇一)
一:Nginx 安装配置1、安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel2、首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz进入到下载目录(自己选择下载文件保存的目
2021-08-10 15:08:51 418 2
原创 使用laravel-swoole加速laravel框架(详细步骤)
步骤一:linux服务器安装PHP swoole扩展(swoole不能再Windows上运行))为什么要安装swoole扩展,因为laravel-swoole需要依赖这个扩展1、执行命令(安装)pecl install swoole2、修改 php.ini 配置文件,找到自己的php.ini文件在最后添加这句(我的php.ini路径 /etc/php.ini)extension=swoole.so3、重启PHP服务service php-fpm restart (使用其他命令也可以)4、查看
2020-11-27 10:43:58 8317 2
原创 使用阿里云的负载均衡服务器配置流程和配置数据库读写分离配置(全)
一、创建用于添加到负载均衡服务器中的ecs实例(假定已有一台运行中的服务器)1、选择用于添加到负载均衡中的ecs服务器,创建一个镜像2、创建ecs服务器(根据负载需要几台就创建几台),选择自定义镜像,选择刚刚创建的镜像3、如果是需要调用公众号的access_token接口的服务器,还需将该服务器的ip添加到公众号后台的ip白名单中4、假设已经有了一个负载均衡服务器(下面会有如何创建负载均衡服务器),则选择对应的负载均衡服务器,添加后台服务器,选择需要进行负载的服务器5、添加完毕,修改监听配置,进行
2020-10-30 15:58:01 981
原创 Laravel延时队列 CentOS7配置Supervisor守护进程
一、使用延时队列到指定时间进行指定操作1、创建任务类php artisan make:job GroupOrderFailJob生成的类将会实现 Illuminate\Contracts\Queue\ShouldQueue 接口,告诉 Laravel ,该任务应该推入队列以异步的方式运行。2、在任务类中handle()方法中进行具体的逻辑操作,如果想对任务失败时进行处理,还有一个failed方法来进行任务失败的清理工作3、任务分发4、运行队列处理器网站根目录运行下面的命令即可正常执行ph
2020-10-15 14:40:49 584
原创 mysql主从复制,主从数据一致性恢复
一、pt-table-sync工具恢复数据*恢复主从数据一致之前,要先检验主从数据是否一致主从数据的一致性校验请看https://blog.csdn.net/weixin_45310179/article/details/106212929我们可以通过使用另一个工具pt-table-sync进行数据的同步手册地址:https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html在主库中执行h:为从库的ip[root@l
2020-05-29 13:58:57 315
原创 mysql主从复制,对于一致性的校验和恢复
一:主从一致性问题校验在理想情况下,备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误,备库同样可能因为MySQL自身的特 性导致数据不一致,例如MySQL的Bug感、网络中断、服务器崩溃,非正常关闭或者其他一些错误。 按照我们的经验来看,主备一致应该是一种规范,而不是例外,也就是说,检查你的主备库一致性应该是一个日常工作,特别是当使用备库来做备份时尤为重 要,因为肯定不希望从一个已经损坏的备库里获得备份数据。 我们可以使用percona-toolkit工具
2020-05-29 13:22:56 435
原创 MySQL,使用SQL语句进行区间分组统计查询
区间分组统计查询需要使用到 elt,interval一、根据学生的分数段统计各个分数段的学生总数create table class (id int(11) not null auto_increment,score int(11) default 0,primary key(id))engine=innodb auto_increment=21 default charset=utf...
2019-09-07 18:04:48 10628 1
转载 mysql主从复制,导致主从数据不同步的原因和解决方法
一、主从不同步解决办法先上Master库:mysql>show processlist; 查看下进程是否Sleep太多。发现很正常。show master status; 也正常。mysql> show master status;±------------------±---------±-------------±-----------------------------...
2019-09-07 16:11:48 7184
原创 MySQL数据库主从复制实现步骤及可能出现问题解决
一:mysql主从复制的实现原理原理:MySQL要做到主从复制,其实依靠的是MySQL的二进制日志,即:假如主服务器是a,从服务器是b;主从复制就是:b跟着a学,a做什么,b就跟着做什么b怎么同步a的动作呢:a有一个日志功能,会把自己的增删改查的操作记录到这个日志中,b拿到这个日志,将日志里面的操作在自己身上做一遍就可以了,这样就实现的主从复制二、测试环境两台虚拟机lnmp:centos...
2019-09-07 15:08:49 859
原创 mysql索引的优缺点,创建索引的一些规则,以及在哪些情况下索引无法命中
一、认识索引索引优化,是mysql数据库优化的最常用的手段之一,索引为什么可以加快query的执行速度呢mysql中,主要有四种索引:B-tree索引,Hash索引,Fulltext索引和R-tree索引索引功能:1、保持数据完整性2、优化数据访问性能3、改进表的连接(join)操作4、对结构进行排序5、简化聚合数据操作innodb存储引擎中,存在两种不同形式的索引,一种是clu...
2019-09-06 11:03:20 516
原创 lnmp 环境下安装swoole步骤
一、我的基础环境PHP:7.2.19 mysql:5.7.26 nginx:1.16.1意见安装lnmp环境https://lnmp.org/install.html二:安装swoole1、首先去GitHub下载一份swoole的源码随意放置位置https://github.com/swoole/swoole-src/releases; 注意!!下载的版本是4.4.4.2、上传压缩包...
2019-09-03 16:32:21 1210
原创 PHP通过mktime()方法,获取今天、昨天、上周、本月的起始时间戳
mktime()方法使用说明mktime(hour,minute,second,month,day,year,is_dst)参数 描述hour 可选。规定小时。minute 可选。规定分钟。second 可选。规定秒。month 可选。规定用数字表示的月。day 可选。规定天。year ...
2019-08-29 15:27:32 893
原创 MySQL基本结构及解释
1、基本结构图mysql = 客户端 + 服务端客户端 = connection(语言连接器,如php-pdo , mysqli)服务端 = SQL层 + 存储引擎层SQL层 = 连接/线程处理 + 查询缓存 + 解析器 + 优化器存储引擎层 = InnoDB + MyISAM + …2、解释connection:这一块其实主要是其他语言的连接,并不属于MySQL本身;主要...
2019-08-23 17:51:44 273
原创 nginx upstream多台服务器进行负载均衡配置
一、为什么进行负载均衡,原理及配置(最后会有完整的配置文件)1、什么是负载均衡,通俗的讲就是客户端发送过来的请求,并不是直接请求目标服务器,而是有一个中转的代理服务器进行分发的。代理服务器会根据当前的服务器的使用情况和分发的规则,将请求转送到对应的负载均衡服务器上2、负载均衡的好处:2.1 将我们的项目部署到多台服务器上,如果其中某一台服务器宕机,并不会影响我们项目的正常运行,因为代理服务...
2019-08-20 14:49:35 2199 1
原创 使用FFmpeg将amr格式文件转换为MP3格式,结果为空的解决办法
问题:使用FFmpeg将下载的微信语音amr格式转换为MP3格式,生成了MP3文件,但是都是空的文件,是什么原因?命令行运行转换命令ffmpeg -y -i amr_path(此处是要转换的amr文件地址) mp3_path(此处为转换后mp3保存地址)例如:ffmpeg -y -i /weixin_amr.amr /weixin_mp3.mp3执行结果如下:图中的错误原因:是因...
2019-08-16 15:49:06 1682 2
转载 PHP 将amr音频文件转换为mp3格式
PHP 将amr音频文件转换为mp3格式说下整体思路1、服务器安装ffmpeg2、使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可)3、在网页端使用HTML5的audio标签来播放mp3文件下面是操作细节:一、服务器安装ffmpeg以cenos为例此处参考:http://my.oschina.NET/ethan09/blog/...
2019-08-16 15:27:17 2163
原创 PHP如何下载微信语音到服务器,并将amr格式转换为MP3格式,最后上传到阿里云oss文件中
第一步:下载微信语音到服务器中废话不多说,直接上代码1、总的流程方法(里面的方法在下面)2、下载微信语音的方法3、将微信语音的amr格式转换为MP3格式(需要使用FFmpeg,安装使用过程请看地址)4、将转换后的MP3格式语音上传到阿里云oss中...
2019-08-16 15:25:09 1685
原创 mysql中如何查看sql语句是否用到索引,以及分析一条SQL的性能瓶颈
mysql中如何查看sql语句是否用到索引1、操作步骤1.1 使用explain ,放在sql前面2、解释我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:type结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge &g...
2019-08-14 17:49:32 9633
原创 mysql数据库存储emoji表情失败,解决办法和原理解释
数据库存储emoji表情,应该用什么编码格式,为什么?1、解决方式:存储emoji表情mysql数据库需要使用utf8mb4格式,不能使用utf8格式2、解释:mysql默认编码utf8格式,只能存储3个字节的数据,而emoji表情是4个字节的数据,所以无法存储。utf8mb4是utf8的超集,一个字符最多可以有4个字节,所以使用utf8mb4可以存储...
2019-08-14 17:46:05 1201
转载 什么是sql注入,如何防止sql注入
什么是sql注入一:如何理解sql注入?sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法示例: 本地一段代码为get获取id值,输出实际执行sql以及查询id对应内容。当id值传为1时,执行结果如下: 这是正常请求情况,而当我们往id传的参数中注入sql代码时,便可以根据自己需求查询自己想要获取的内...
2019-08-14 17:26:50 495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人