自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

原创 常用md语法

md常用语法

2022-09-30 19:30:44 1149 1

原创 brew安装、卸载、常用命令

brew官网#官网安装脚本/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"#国内安装脚本(自动选在软件源)/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"#国内卸载脚本/bin/zsh -c "$(curl -fsSL htt

2021-09-22 00:04:12 2459

原创 mysql参数优化

InnoDB内存优化InnoDB用一块内存区做IO缓存池,该缓存池不仅用来缓存InnoDB的索引快,而且也用来缓存InnoDB的数据块。innodb_buffer_pool_size该变量决定了InnoDB存储引擎表数据和索引数据的最大缓存区大小。在保证操作系统及其他程序有足够的内存可用的情况下,innodb_buffer_pool_size的值越大,缓存命中率越高,访问InnoDB表需要的磁盘I/O就越少,性能就越高。innodb_buffer_pool_size=512MI.

2021-05-20 11:14:52 146

原创 开发准备

1,代码管理 docker gitlab2,需求bug管理 docker zentao(禅道)3,api文档管理 docker yapi

2021-05-13 18:20:09 109

原创 MySQL主从复制原理

为什么要主从复制1,在业务复杂的系统中,有这么一个场景,有一句SQL需要锁表,导致暂时不能使用读的fy一个场景,有一句SQL需要锁表(排它锁),导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运行。2,做数据的热备,主机当即后能够及时替换主库,保证业务员的可用性。3,架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做对库的存储,降低磁盘I/O访问的评率,提高单个机器的I/O

2021-04-30 01:45:39 168 1

原创 PHP-FPM知识点

listen.backlog = 65535 #未accept处理的socket队列大小,-1 on FreeBSD and OpenBSD,其他平台默认65535,高并发时重要,合理设置会及时处理排队的请求;太大会积压太多,处理完后nginx在前面都等超时断开这个和fpm的socket连接了,就杯具了。不要用-1,建议1024以上,最好是2的幂值。#一个池共用一个backlog队列,所有的池进程都去这个队列里accept连接。#最大数量受限于系统配置 cat /proc/sys/net/cor.

2021-04-29 11:40:12 186

原创 php-fpm进程数配置

php-fpm.conf进程数配置优化pm:pm表示使用哪种方式,有两个值可以选择,static(静态)或dynamic(动态)pm为static时以下参数生效pm.max_children:表示开启php-fpm进程数量pm为dynamic时以下参数生效pm.start_servers:动态方式下的其实php-fpm进程数量pm.min_spare_servers:动态方式下的最小php-fpm进程数量pm.max_spare_servers:动态方式下的最大php-fpm进程

2021-04-29 11:14:38 564

原创 阶梯计费

// 构建规则,这里可以使用两个数组 key为价格 值为区间$rules = [ 330=>[0,100], 300=>[100,300], 280=>[300,500], 220=>[500,1024], 150=>[1024,3*1024], 36=>[100*1024, PHP_INT_MAX],]; function calc($used, $rules){ $sum = 0; .

2021-04-29 00:27:44 408

原创 两个数组求交集

//求两个数组的交集$a1 = [1,22,33];$a2 = [22,33,78];//有序数组双指针法,这个需要将数组先转成有序数组function doubleKeyIntersect($arr1,$arr2){ sort($arr1); sort($arr2); //计算两个数组的长度 $len1 = count($arr1); $len2 = count($arr2); //初始指针 $k1 = 0; $k2 = 0;.

2021-04-29 00:10:30 106

原创 nginx负载均衡

nginx的upstream目前支持5种方式的分配1,轮询(默认)每个请求按时间顺序分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2,weight制定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况3,ip_hash每个请求按访问ip的hash结果分配,这样每个ip固定访问一个后端服务器,可以解决session的问题4,fair(第三方)按后端服务器响应时间来分配请求,响应时间短的优先分配5,url_hash(第三方)ngin.

2021-04-25 17:56:15 59

原创 PHP的底层执行原理和周期

php的执行周期,从最初湖编写的PHP脚本---->到最后脚本被执行---->得到执行结果。可以分为如下几个阶段。首先,Zend Engine(ZE),调用词法分析器(Lex生成的,源文件在zend/zend_language_sanner.l),将我们要执行的PHP源文件,去掉空格,注释,分割成一个token。然后,ZE将得到的token退给语法分析器(yaccs生成,源文件在Zend/zend_language_parse.y),生成一个个的opcode,opcode一般会以op a

2021-04-25 17:47:10 72

原创 PHP-FPM

PHP-FPM(PHP FastCGI Process Manager)PHP FastCGI进程管理器,用于管理PHP进程池的软件,用于接收web服务器的请求PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程,可以平滑重载PHP配置1,什么是是php-fpmfpm的出现完全是因为php-fastcgi的出现,为了更好的管理php-fastcgi而实现的一个程序2,什么是php-fastcgiphp-fastcgi只是一个cgi程序,只会解析php请求,并返回结果,不会

2021-04-25 17:35:53 86

原创 MySQL锁及事务

Mysql锁表级锁:对整张表加锁。开销小,加锁快;不会出现思索;锁定粒度大,发生锁重复的概率最大,并发度最低。行级锁:对某行记录加锁。开销大,加锁慢;会出现死锁;锁定粒度小,发生锁重复的概率最低,并发度也最高。页面锁:开销和加锁时间介于标锁和行锁之间;会出现死锁;锁定粒度介于标锁和行锁之间,并发度一般。MyISAM:不支持事务,支持全文索引,不支持行锁。InnoDB:支持事务,支持行锁MyISA支持表级锁,并且支持两种锁模式对MyISAM表的读操作(共享锁),不会阻塞其他进程对同

2021-04-21 04:18:38 172

原创 TCP三次握手和四次挥手

TCP三次握手和四次挥手三次握手序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序列号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号便是报文段携带数据的第一个字节的编号;而确认号指的是期望接受到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。确认ACK

2021-04-15 04:04:59 114

原创 Redis缓存击穿 缓存雪崩 缓存穿透

缓存击穿高并发下,redis的一个热点key刚好过期,导致大量请求没有命中缓存,从而导致大量数据库查询,导致数据库压力增大解决方案:热点key永不过期。缓存雪崩大量key的过期时间相同,当同时过期时,短期内数据库会有大量请求,从而导致数据库压力增大解决方案:分散过期时间。缓存穿透用户请求一个不存在的数据,导致每次都不能命中缓存,每次都查询数据库,从而导致数据库压力增大解决方案:即使数据库中不存在,也生成一个过期时间较短的缓存数据,避免都此请求都查询数据库...

2021-03-15 17:25:49 84

原创 shell脚本通过scan批量删除redis

sh scantodel.sh *pattern* 127.0.0.1 6379 0 5000 1scantodel.sh文件如下参数1是需要删除key的匹配字符串参数2是redis的host参数3是redis的端口参数4是redis的db参数4是每次删除的个数参数6是每次批量删除的间隔秒数,支持小数脚本执行的linux必须安装有redis客户端#!/bin/bashif [ "$#" -lt 3 ]then echo "Scan keys in Re..

2020-11-04 23:52:58 1554

原创 vi用法

vi用法

2020-08-27 19:28:41 146

原创 安装Homebrew

1、官网安装Homebrew但由于国内网络的原因,官网提供的方法基本安装不了。2、sh脚本安装,原理是将官网安装的sh文件下载下来到本地执行(此方法安装很慢)。将下方的代码复制,在本地用homebrew.sh保存用sh homebrew.sh执行安装#!/bin/bashset -u# First check if the OS is Linux.if [[ "$(uname)" = "Linux" ]]; then HOMEBREW_ON_LINUX=1fi# On

2020-08-27 15:38:08 260

原创 安装ohmyzsh

1、ohmyzsh官网安装但由于国内网络的原因,官网提供的方法基本安装不了。2、sh脚本安装,原理是将官网安装的sh文件下载下来到本地执行将下方的代码复制,在本地用ohmyzsh.sh保存用sh ohmyzsh.sh执行安装#!/bin/sh## This script should be run via curl:# sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/to

2020-08-27 15:26:17 194

原创 vscode调试PHP(WEB+CLI调试)

docker搭建开发环境1,vscode安装PHP Debug扩展2,php容器安装xdebugpecl install xdebug && docker-php-ext-enable xdebug3,本机配置docker-php-ext-xdebug.ini#extension的路径根据上一步安装的xdebug提示填写zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xde

2020-08-04 17:51:51 479

原创 加快github访问速度

获取映射,修改host获取Github相关网站的ip访问https://www.ipaddress.com,拉下来,找到页面中下方的“IP Address Tools – Quick Links”分别输入github.global.ssl.fastly.net和github.com,查询ip地址下面是我的配置140.82.114.4 github.com199.232.5.194 ...

2020-05-08 11:08:31 275

转载 高并发下余额扣减

添加数据库行锁当请求A执行是 先加入锁阻塞 请求B直到 请求A完成之后 请求B才继续执行//开始事务begin;//消费金额$spend = 10;//查询用户余额$user = select id,fee from users where id = 12 for update;//计算金额$newFee = $user['fee'] - $spend;//...检查余...

2020-01-07 10:45:40 1811

原创 RabbitMQ基础概念及PHP-RabbitMQ的使用方法

RabbitMQ基础概念AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件。消息中间件主要用于组件之间的解耦和通讯。AMQP的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全。RabbitMQ是一个开源的AMQP实现,服务器端使用Erlang语言编写。用于在分布式系统中...

2019-11-21 19:47:18 228

原创 常驻命令队列mysql连接超时的处理办法

1,常驻命令队列长时间没访问再次有消息消费时,会报错PDO::prepare(): send of 131 bytes failed with errno=32 Broken pipe这是因为mysql服务端自动断开socket,mysql的socket timeout超过8小时(默认)会自动断开已建立的tcp连接但由于是常驻命令,程序认为connection连接还存在,进行mysql...

2019-09-21 16:44:50 1116

原创 php-rabbitmq结合rabbitmq_delayed_message_exchange实现延时队列

1#查看插件列表rabbitmq-plugins list#如果未安装,则下载wget https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip#解压unz...

2019-09-19 19:22:26 615

原创 phpstorm配置docker+Xdebug调试命令行(CLI)

命令行(CLI)调试1,配置CLI Interpreter,点击CLI Interpreter后面的...Server点击New,选择Docker for mac(本机是mac)Path mappings选择docker中代码的地址和本机代码的地址Image选择本机已经下载好的php的docker镜像点击ok点击红框标注的文件夹,配置容器的网络和文件夹...

2019-08-01 19:34:57 1961

原创 phpstorm配置docker+Xdebug调试接口

一、接口调试1,配置dicker里面的php.ini,有可能docker里的针对xdebug的单独ini,例如/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini#生产环境严禁使用xdebugxdebug.remote_enable=1#如果环境是mac+docker,那宿主机IP可以使用docker.for.mac.localhos...

2019-08-01 18:49:57 798

原创 docker容器创建后更新容器配置

docker容器创建后,配置container跟随docker自动重启docker container update --restart=always php72-fpm

2019-07-30 11:06:58 2858

原创 Redis的multi(事务)和pipeline(管道)

redis的multi函数有两种模式Redis::MULTI或Redis::PIPELINE,默认Redis::MULTIRedis::MULTI 将多个操作当做一个事务执行,多个命令依次发给服务端,用服务端缓冲,最后由EXEC执行。保证原子性,效率低Redis::PIPELINE 将多条命令一次性的发给服务端,多个命令写在客户端,客户端缓冲,一次性发给服务端,最后由EXEC执行。没有...

2019-07-29 16:56:14 1873

原创 circus和rabbitMq动态扩容减容

public function execute(InputInterface $input, OutputInterface $output) { //队列名称要和守护消费者的circus的watcher同名 $balancePoint = 200; $settings = new SettingService(); lis...

2019-07-26 20:03:53 1110

原创 批量更新和插入mysql数据库

项目需要通过脚本批量插入和更新数据传统的循环单条插入和更新非常影响性能,故需要批量插入(1条SQL批量插入)和批量更新(1条SQL批量更新) /** * 批量赋值 * @param array $data * @return bool */ public static function batchInsert(Array $data)...

2019-07-25 20:24:51 315

原创 mysql存储过程批量更新余额并记录日志

项目需要批量导入结算数据,更新余额并记录日志mysql存储过程不支持数组参数,故需要将相关参数转成逗号分隔字符串,通过循环并对每一个循环加上事务以保证数据更新的完整性。非动态表名DELIMITER //CREATE PROCEDURE `proc8`(IN orderIdsStr text,IN orderReturnsStr text,IN orderUidsStr text...

2019-07-25 19:38:01 973

原创 php-fpm加入mac启动项,plist文件

1,通过brew安装phpbrew install php2,修改php-fpm端口及允许php-fpm后台运行brew安装的php的php-fpm配置文件位于/usr/local/etc/php中由于mac自带的php是7.1的php-fpm占用了9000端口故修改为9003php-fpm允许后台执行修改daemonize = yes3,php-fpm加入mac启动...

2019-05-27 15:45:24 473

原创 给定一个正序的整形数组A和一个数X,判断数组A里面是否存在两个数,他们的和为X;

function judge($a,$x){ $ca = count($a); $xa = []; for($i = 0,$j = $ca -1;$i<$j;) { $s = $a[$i] + $a[$j]; if($s == $x) { $xa[] = [$a[$i],$a[$j]]; ...

2019-04-24 18:59:57 271

原创 LeetCode 接雨水PHP实现

给定一个数组a,数组的每个成员代表x轴上每个区域宽度为1的一个台阶高度,计算下雨时,这个台阶最多能够积多少(面积)雨水?public function water($heights){ $hc = count($heights); if( $hc<= 2) { return 0; } //获取最高点 $heightM...

2019-04-24 18:57:25 190

转载 Bloom Filter

Bloom-Filter(布隆过滤器)判断一个元素是否在一个集合中,我们平常的算法,肯定就是遍历比较了,这样对小数量数据还可以,但对海量数据肯定是不适用的,就算用二叉树骑士剑复杂度也是O(logn),Burton Bloom在1970年提出了Bloom Filter算法,骑士剑复杂度为O(1)但这个算法不能保证100%正确,所以不适合哪些‘零错误’的应用场合。Bloom-Filter的...

2019-04-04 16:20:11 140

转载 TCP的三次握手和四次挥手

TCP三次握手四次挥手序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是...

2019-04-03 18:41:45 97

原创 MySQL锁

mysql锁表级锁:开销小,加锁块;不会出现死锁,锁定颗粒度大、发生锁冲突的概率最高,并发度最低行级锁:开销大,加锁慢,会出现死锁,锁定颗粒度最小、发生锁冲突的概率最低,并发度最高页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁,锁定颗粒度介于表锁和行锁之间,并发度一般Mysql表级锁的锁模式(MYISAM)表共享锁和表独占写锁对myisam的读操作,不会阻塞其他...

2019-04-02 18:38:32 144

原创 MySQL横竖表转换

现有一张竖表table2要将上表转成如下横表table2此时要用到mysql的case whenselect username,sum(case course when '语文' then grade else 0) as chinese,sum(case course when '数学' then grade else 0) as math,sum(case cour...

2019-03-30 11:23:24 1014

原创 virtualbox中虚拟centos7

1,材料准备virtualbox5.2centos72,安装1、安装virtualbox,直接按照安装指引即可2、安装centos73,安装nginxcentos7没有默认没有配置nginx的源,需要自己配置在nginx官网可以找到如何配置yum安装nginxvi /etc/yum.repos.d/nginx.repo[ngin...

2019-03-29 13:25:05 108

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除