自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

汤神俱乐部

在大同的时间里 创造一点大不同。

  • 博客(146)
  • 收藏
  • 关注

原创 Jmeter - webSocket 压力测试笔记

概述编程的内核是数学,而测试的本质是计算,专业名词叫容量预估,而测试的大体就是用程序模拟程序,检测程序的正确性,有两个点需要注意,QPS最佳值和系统接收最大值,根据测试数据的反馈,针对测试的现象和反映进行优化。Server : i5 8GSwoole : 4.4.23php : 7.2.10Jmeter 的基础使用step.01 Thread Group 线程组设置jmeter自带的thread group非常简单。 一个thread 代表一个vuser,那么我们如果需要多少用户并发,设

2021-03-02 11:57:34 98 2

原创 Git 常用命令和简单原理剖析

Git 常用命令和简单原理剖析Git 是一套内容寻址 (content-addressable) 文件系统,是一个简单的键值对数据库(key-value data store),我们用一个文件来保存 SHA-1 值,并给文件起一个简单的名字,然后用这个名字指针来替代原始的 SHA-1 值,对比快照,生成新版本的SHA-1数值。执行git log -n 2,commit后面的字符串就是用来保存的SHA-1值。commit 615d8987c4d375348f2ccaeb482fd622b9c99bd1

2021-01-27 14:22:04 26

原创 EasySwoole消息推送9 - 部署压测

概述在所有的开发准备就绪的时候,开始准备和上线有关的事情:测试和服务部署,测试要注意代码的逻辑严谨、代码运行的正确,服务稳定,所有的一切都需要用数据做指标,所有的计算机编程归根结底都是数学。0.系统初始化0.1 Mysql 数据表初始化需要如果在自定义进程或者自定义命令中需要使用到连接池,否则会报错:Fatal error: Uncaught Swoole\Error: API must be called in the coroutine//创建一个协程调度器$scheduler = ne

2021-01-16 12:48:06 50

原创 EasySwoole消息推送8 - 开发完结

概述上周结束了年报项目,一切又是新的开始,准备迎接新一场的暴风雨,然后享受暴风雨后的平静的幸福,好吧,就让我们回顾一下之前项目和项目的问题。存在的问题:如果服务器发生故障,Uid-Fd的对应关系得存在?消息体在推送之前要加以验证,如果存在未读消息,不要复推新的消息?当数量多的时候,存数据的时候采用什么策略分表?部署的时候,怎么支持Ws和Wss?链接(正常/错误)断开的回收?新的思考:1.系统初始化2.需要把消息分成三类:登陆、广播、UID取模3.优雅编程4.部署/启动/热启动

2021-01-07 14:40:23 92

原创 Mysql - 百万级数据查询优化笔记 (PHP Script) ③

Mysql - 百万级数据查询优化笔记 (PHP Script) ③说明:上篇介绍Mysql脚本优化的博客竟然突破了1w点击量,这周又加班熬夜渡过了一段不为人知的黑暗,成长都是苦涩的,愿我能行。1.PHP脚本配置1.1 memory_limit设置脚本内存看一下 PHP官网对memory_limit的解释:This sets the maximum amount of memory in bytes that a script isallowed to allocate. This helps

2020-12-25 20:59:38 51

原创 Mysql - 百万级数据查询优化笔记 (PHP Script) ②

Mysql - 百万级数据查询优化笔记 (PHP Script) ②说明:要处理的是在一个脚本中统计的年度账单,和上一篇的处理思路完全不同,先把全量取出,再按字典形式拼接,10w条数据只需要668s!数据:测试服:17w 正式服:280w1.全量查询,减少链接断开次数,使用PHP处理,性能更高一次性取出1000条数据,放在循环处理快,还是一次处理100,用数组处理更快?提前取出好数据,以字典的形式在数组使用中进行拼接,脚本中的使用应该尽量避免连接和断开的消耗,性能提高的非常明显,17w

2020-12-17 11:13:48 13936 14

原创 Mysql - 百万级数据查询优化笔记(PHP Script)

需求:什么时候注册账号,第一个评论、第一个长评、第一个打赏、第一个订阅、第一个书单、给哪篇文打赏最多、给哪篇文评论最多、你看过那个作者的文时长最长、做过多少个书单,分享可以获得海星奖励开发过程分为两部分处理: 时间轴:第一次做某个动作(注册账号/评论/长评/打赏/订阅/书单) 统计点:文章(打赏最多/评论最多/作者的文时长最长/收藏书单)需要注意的是,时间轴的都是已第一个时间为准,统计点类的只统计发生在2020年之内的数据,做这个的前提是假设一个时间点,比如2020-12-23 00:0

2020-12-09 15:52:44 139

原创 EasySwoole 搭建消息推送服务07 - Crontab/TaskManager

完成了基本功能开发以后,一个更加急迫需要解决的问题摆在面前:消息的推送、存储和准确性、失败重跑,En。DB 使用异步处理性能会变得更快list -> Mysql 用来检测DB处理失败的情况,已达到最终一致性对于消息推送失败的场景下,定时检测,重新推送1.DB异步,异步处理是一个提高性能常用的方式和方法。namespace App\WebSocketController\V1;use EasySwoole\EasySwoole\Task\TaskManager;use App\Mod

2020-12-02 10:59:10 892 1

原创 easyswoole 搭建消息推送服务06 - done

历时15个工作日,使用websocket从零开发消息推送实战,欢迎大家交流学习

2020-11-20 17:50:15 217 1

原创 easyswoole 搭建消息推送服务05 - websocket应用

上一个Demo里,在启动时注册了支持websocket的组件、解析器,在到映射到的路由,实现了简单的通信,在开发中也是现学现卖,摸着石头过河,难度也是不小的,机会和挑战总是成对出现的,所以要加油加油再加油,边学习边总结,才能有更大的进步。用以下几个主要功能点:1 = HEART // 心跳2 = LOGIN // 登录3 = LOGOUT // 退出登录4 = COMMENT // 评论5 = PULL // 拉取6 = NOT

2020-11-13 17:38:24 163 1

原创 easyswoole 搭建消息队列服务04 - websocket原理剖析与实践

easyswoole 搭建消息队列服务04 - websocket原理剖析与实践PHP的扩展和依赖说swoole之前,先说说鸟哥扩展的yaf,yaf是一个用C语言写的PHP标准扩展,它之所以可以直接超高的并发是因为在启动前提前编译,常驻内存,节省内存开销,已获得高性能的特点。而swoole之所以更进一步的做到高性能,是因为它是一种特别的PHP扩展,根本的不用在于接管了php-fpm管理php运行的新模式,用自己的底层去管理php的进程,并且支持了TCP、UDP、WebSocket等网络服务,给PHP的

2020-11-05 11:30:35 860 6

原创 easyswoole 搭建消息队列服务03 - 基础插件配置

easyswoole 搭建消息队列服务03 - 基础插件配置在搞定环境以后,开始了编写代码的过程,我使用的环境是 easyswoole 3.x,官方大佬给我的聊天室Demo,这就开始了架构编写之旅,兵马未动粮草先行,编码为写,架构先行,下图是我设计的架构草图,仅供参考:遇到的第一个问题是端与端的加密问题,让我想到了一个叫Jwt的插件,解决Api、端的交互(Pc/Android/Ios),是一种非常好的加密方式,它使用也非常简单。传统的做法是将已经认证过的用户信息存储在服务器上,比如Session。用户

2020-10-30 15:07:09 429 4

原创 easyswoole 搭建消息队列服务02 - Nginx反向代理

上一篇我们搭建好了基础环境,开始准备进行代码实施方案,大体方针分三步走,安排如下:easyswoole + redis + websocket 大体技术方案,是因为websocket本身就是全双工通信,不用反复连接使用,redis主要实现生产者-消费者,easyswoole的优点是 常驻内存又协程处理数据,技能提供sockert,又支持http服务,完美,摸着石头过河。1.先启动之前的easyswoole2.配置 Nginx 反向代理监听9501端口server { client_max_bod

2020-10-23 15:33:35 111

原创 easyswoole 搭建消息队列服务01 - 搭建环境

安装 composerphp -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"php composer-setup.php移动 composer.phar,这样 composer 就可以进行全局调用:mv composer.phar /usr/local/bin/composer切换为国内镜像:composer config -g repo.packagist composer http

2020-10-22 16:21:05 126

原创 玩转docker 自定义Dev环境

docker其实比之前想象的要简单,下载你想要的服务镜像,用 docker run 生成一个容器,当你基础环境都ok的时候,docker commit 命令保存你新的自定义镜像,我需要的是centos中集成的lnmp,要求php >= 7.2,并开启以下扩展。extension = yaf.soextension = swoole.soextension = mongodb.soextension = redis.soextension = trie_filter.soextension

2020-10-14 11:12:23 117

原创 PHP面试-基础知识考察点复习

引用变量考点Demo1$a = range(0,10);$b = $a;//此时$a和$b同指向一个内存空间,内存大小不会发生作用$a = range(0,10);//$a的值虽然没有变化,但进行了写操作,触发PHP的写时复制Copy On Write)工作原理Demo2 引用&$a = range(0,10);$b = &$a;$a = range(0,10);PHP在对变量进行&引用时不会再开辟内存空间,两个变量永远指向一个空间,不会

2020-09-15 16:31:39 115

原创 PHP面试-魔术方法面试笔记

面向对象php的类权限控制修饰符public     类的内部外部和子类都能适用protected    类的内部和子类使用private    只能在类的内部使用,不能被继承魔术方法构造函数和析构函数__construct 构造函数 : 类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。__destruct 析构函数: 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。class MyDestructableClass {

2020-07-11 16:41:26 331

原创 深入浅出Mysql - 优化篇(锁)

深入浅出Mysql - 优化篇(锁)锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。Mysql锁概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MylSAM和MEMOR

2020-06-30 18:59:54 707

原创 深入浅出Mysql - 优化篇(Sql语句)

定期优化表如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表(含有VARCHAR、BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE命令来进行表优化。?这个命令可以将表中的空间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费,但OPTIMIZE TABLE命令只对MylSAM、BDB和InnoDB表起作用。mysql> analyze table fa_order;+------------------------+---------+-------

2020-06-29 15:00:49 500

原创 深入浅出Mysql - 优化篇(索引)

SQL优化通过show status了解各种sql执行的频率mysql> show status like 'Innodb_rows_%';+----------------------+--------------+| Variable_name | Value |+----------------------+--------------+| Innodb_rows_deleted | 163063 || Innodb_rows_insert

2020-06-28 19:26:16 516 4

原创 百度云SDK BUG - __HALT_COMPILER(); must be declared in a phar

try { //使用PHP SDK,并且使用自定义配置文件 include 'BaiduBce.phar'; // require 'YourConf.php'; use BaiduBce\BceClientConfigOptions; use BaiduBce\Util\Time; use BaiduBce\Util\MimeTypes; ...

2020-04-20 14:20:00 255 3

原创 深入浅出Mysql - 基础篇(列类型/运算符/函数)

深入浅出Mysql - 基础篇(列类型/运算符/函数)每一个常量、变量和参数都有数据类型,它用来指定一定的存储格式、约束和有效范围。MySQL提供了多种数据类型,主要包括数值型、字符串类型、日期和时间类型。不同的MySQL版本支持的数据类型可能会稍有不同,用户可以通过査询相应版本的帮助文件来获得具体信息。数值类型MySQL支持所有标准SQL中的数值类型,其中包括严格数值类型(INTEGER、...

2020-04-11 16:03:10 383 7

原创 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

缓存穿透、缓存击穿、缓存雪崩区别和解决方案有很多解决高并发的应用场景中都会使用memcache\redis缓存来解决响应慢的问题,但是缓存也不是万能的,在使用方面有很多的考虑的问题,把缓存比喻成防弹衣,但是如果你没有穿好这件防弹衣会适得其反,下面我根据自己的理解就展开来谈谈。在高并发场景下有一个常常被忽略的一个地方,读多还是写多,读多写少用缓存,写多读少用队列。为什么要用缓存?为了系统的高性...

2020-03-24 15:09:44 3724 5

原创 常用php操作redis命令整理

常用php操作redis命令整理Redis连接在使用Redis的开始的时候,在phpinfo()中查看redis的类库是否已经加载,()确保加载后使用。[root@iZ2ze3941xpzjp7tqodvj7Z ~]# redis-cli 127.0.0.1:6379> auth test123OK127.0.0.1:6379> $redis = new Redis()...

2020-03-19 17:58:30 670

原创 lnmp环境下php安装redis扩展

1.然后打开github,搜索phpredis。点击搜索结果的第一个:phpredis/phpredis(https://github.com/phpredis/phpredis)点击页面中的releases(https://github.com/phpredis/phpredis/releases)2.下载:wget https://github.com/phpredis/phpredi...

2020-03-19 17:57:12 622

原创 Redis核心原理与应用实践

Redis核心原理与应用实践在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。安装yum install redis #yum安装b...

2020-03-17 15:57:02 2628

转载 ## Laravel框架:原理机制篇

Laravel框架:原理机制篇在去年的项目里开始使用Laravel框架和Vue的组合,进行前后端分离,本框架有什么具体的优点,进行具体分析。请求周期Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。1.注册类文件自动加载器:Laravel通过composer进行依赖管理,并在bootstrap/autoload.php中注册了Compose...

2020-02-29 18:32:22 904

原创 面试笔记 - 进程/线程/协程

面试笔记 - 进程/线程/协程一个好的后端程序员,要清楚的知道进程、线程和协程的关系,这也是面试中普遍遇到的知识点,知识这东西最怕的就是似懂非懂,又会又不会,真的懂得这个知识点的人虽然不能那么顺利的回答出来,但在大脑里一定有痕迹,所以练好基本功,这是向上进步的基石。面试问题:你怎么理解 进程/线程/协程 ?进程程序和进程计算机刚被发明的时候,只能跑单一的程序,后来冯·诺依曼,提出了存储程...

2020-02-28 12:38:31 1057

原创 Docker 环境下部署高可用集群实践

Docker 基本用法1.安装 dockeryum -y updateyum install -y docker2.启动 / 关闭 / 重启 dockerservice docker start / systemctl start dockerservice docker stop / systemctl stop dockerservice docker restart / sy...

2020-02-13 12:24:42 2175

原创 计算与数据结构篇 - 哈希算法 (Hash)

计算与数据结构篇 - 哈希算法 (Hash)哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。构成哈希算法的条件:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大...

2020-01-21 14:02:00 12461

原创 计算与数据结构篇 - 散列表(Hash)

抛出问题:Word 的这个单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢?在初学PHP的时候,第一次听说 Hash Table 一个特别模糊的概念,今天我们就来详细的说说它的结构。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。Array( [name] => ...

2020-01-16 14:21:34 3450

原创 计算与数据结构篇 - 排序(桶排序)

排序是一个特别常见的问题,也是算法与数据结构中绕不开的话题,有次去小米,面试官问我这样一个场景,每周四10点是小米开放日,在一段时间内,会涌进2kw的数据流,怎么排序,当时会有订单状态?桶排序、计数排序、基数排序以上这三种排序算法是适用于某个特别的场景。桶排序(Bucket sort)核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据...

2020-01-02 14:57:47 1215

原创 计算与数据结构篇 - 排序(归并/快排)

在处理高并发有一个理论就是分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题。说排序之前先讲讲什么是递归方法。这对后面的理解有很大的帮助。递归归并排序和快速排序,都借用了递归算法,分治是一种解决问题的处理思想,递归是一种编程技巧。是一个非常标准的递归求解问题的分解过程,去的过程叫“递”,回来的过程叫“归”。递归需要满足的三个条件:一个问题的解可以分解为几个子问题的解这个问题与...

2019-12-31 11:10:53 800

原创 计算与数据结构篇 - 排序(冒泡/插入/选择)

计算与数据结构篇 - 排序(冒泡/插入/选择)排序是一个特别常见的问题,也是算法与数据结构中绕不开的话题,有次去小米,面试官问我这样一个场景,每周四10点是小米开放日,在一段时间内,会涌进2kw的数据流,怎么排序,当时会有订单状态?当时我第一反应是冒泡、快排和二分,但好像都不能解决这个问题,结尾我会做出解答。判断排序算法的执行效率因素排序算法的执行效率最好情况、最坏情况、平均情况时...

2019-12-26 19:58:06 2219 6

原创 计算与数据结构篇 - 栈/队列

栈这种抽象的数据结构后进者先出,先进者后出,这就是典型的栈的结构。在生活中刷碗的时候,一摞摞盘子,小时候的玩具枪都有点类似栈这个结构。从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。有时也有所困惑,数组和链表的结构已经非常方便快捷了,为什么还需要栈这个结构呢?栈是为当某个数据集合只涉及在一端插入和删除数据,而抽象存在的。栈既可以用数组来实现,也可以用链表来实现...

2019-12-25 15:51:32 1137 2

原创 计算与数据结构篇 - 链表

计算与数据结构篇 - 链表链表的结构链表,通过指针将一组零散的内存块串联起来使用。链表结构五花八门,今天我重点给你介绍三种最常见的链表结构,它们分别是:单链表、双向链表和循环链表。单链表链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。如图所示,我们把这个记录下个结点地址...

2019-12-24 16:58:28 1396 4

原创 算法与数据结构篇 - 数组

计算与数据结构篇 - 数组数据结构中,从结构上来说,分为线性表和非线性结构。线性表,线性表就是数据排成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。非线性表,是因为,在非线性表中,数据之间并不是简单的前后关系。数组 - 为什么数组要从0的下标开始?数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。连续的内存空间和相同类型的...

2019-12-24 11:49:51 1155

原创 Failed to AUTH connection redis验证错误

redis 没有密码报错 Fatal error: Uncaught exception ‘RedisException’ with message 'Failed to AUTH connection添加一句 $this->redis->auth(‘xxxxxx’); //这里是redis密码

2019-12-19 10:27:36 966

原创 七年程序老鸟理解的互联网3.0时代

不知不觉,入互联网这个行业已经十年了,时间真快,回想09年入校恍如昨日,从毕业之初受尽坎坷,经历了很多苦,吃过苦的人特别懂得感恩和分享,我便是如此这般,聪明的人可能会跑的很快,但智慧的人会跑的更远。互联网1.0 && 启蒙时代 (2009-2014)上学时候,我们还在使用Dreamwearver这种现在看似古老的神器,现在流行的市场上已经失传了的编辑器,当时的代码开发没有统一的...

2019-12-03 19:44:11 2031 13

原创 Nginx 软件层面加强Nginx性能优化的面试问答和解决方案

Nginx 软件层面加强Nginx性能优化的面试问答和解决方案去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的学习,终于能解答Nginx高性能优化的问题了,10月24号为了获得程序员勋章,发布了半个优化笔记,浏览到了1000+,受到这个鼓舞,我抽时间在仔细整理下关于Nginx性能优化的问题,我们从软件说起。...

2019-11-16 17:14:16 11285 3

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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