自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

壹小俊

面试造火箭,工作拧螺丝

原创 Nginx和PHP的配置

采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言需要动点脑筋...

2020-03-31 11:04:31 98 0

原创 Redis异步消息队列与延时队列

异步消息队列 说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。 Redis通过list数据结构来实现消息队列.主要使用到如下命令:...

2020-03-31 10:33:01 118 0

原创 redis集群部署-PHPer提升必备

1.节点规划: 2种方式:1主+多从,多对主从,第二种分担主节点、容易扩容缩减。 容器名称 容器IP地址 映射端口号 服务运行模式 Redis-master1 172.1.50.11 63...

2020-03-31 10:20:08 56 0

原创 哈希算法及其应用场景

哈希算法简单理解就是实现哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。 我们日常开发中最常见的哈希算法应用就是通过 md5 函数对数据进行加密了,md5 就是一个哈希函数,结合 md5 我们可以归纳出哈希算法的一般特性: 从哈...

2020-03-31 09:58:55 42 0

原创 php实现单点登录实例

这是一个简单版的php单点登录概述,如果需要实现复杂的需自己,编写复杂的ticket加解密算法。 先看张图。 sso系统,http://sso.yxh.com <?php echo "sso站点"; setcookie("si...

2020-03-31 09:57:17 41 0

原创 php实现数据结构的单向链表

啥是单向链表 链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成。 单向链表(也叫单链表)是链表中最简单的一种形式,每个节点只包含一个元素和一个指针。 它有一个表头,并且除了最后一个节点外,所有节点都有其后继节点。...

2020-03-31 09:47:53 44 0

原创 laravel中如何利用反射实现依赖注入

依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->bar = new Bar(); } } ...

2020-03-31 09:44:40 47 0

原创 PHP7语言执行原理

常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言。 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编译成目标文件。一般称完成编译工作的工具为编译器。 而解释型语言,在程序运行时才被“翻译”为机器语言。但是执行一次“翻译”...

2020-03-31 09:37:27 56 0

原创 PHP高并发商城秒杀

1.什么是秒杀   秒杀活动是一些购物平台推出的集中人气的活动,一般商品数量很少,价格很便宜,限定开始购买的时间,会在以秒为单位的时间内被购买一空。比如原价千元甚至万元的商品以一元的价格出售,但数量只有一件,在某天的某个时间开始出售,这就造成很多人去抢这一件商品。 2.秒杀会带来的问题 (1...

2020-03-31 09:26:37 64 0

原创 PHP的垃圾回收机制

1. PHP可以自动进行内存管理,清除不需要的对象,主要使用了引用计数 2. 在zval结构体中定义了ref_count和is_ref , ref_count是引用计数 ,标识此zval被多少个变量引用 , 为0时会被销毁 is_ref标识是否使用的 &取地址符强制引用 3. 为了解决...

2020-03-31 09:19:15 59 0

原创 php的socket编程概述

php的socket编程算是进阶必备知识,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了 关于socket编程所涉及到的网络协议,什么TCP啊,UDP啊,什么socket三次握手等等,这些网络协议网上有很详细的解释,这里不讲,只截个socket...

2020-03-30 10:39:26 59 0

原创 PHP操作多进程

在以往的开发项目中,要操作进程就会使用PHP自带的pcntl拓展。但是pcntl存在着许多的不足: pcntl没有提供进程间通信的功能 pcntl不支持重定向标准输入和输出 pcntl只提供了fork这样原始的接口,容易使用错误 这边我们使用swoole进程管理模块,用来替代PHP的pcnt...

2020-03-30 10:33:34 70 0

原创 PHP队列的实现详细操作步骤

队列是一种特殊的线性表,它只允许在表的前端,可以称之为front,进行删除操作;而在表的后端,可以称之为rear进行插入操作。 队列和堆栈一样,是一种操作受限制的线性表,和堆栈不同之处在于: 队列是遵循“先进先出”原则,而堆栈遵循的是“先进后出”原则。 队列进行插入操作的端称为队尾,进行删除...

2020-03-30 10:24:36 74 0

原创 Mysql分布式事务及优缺点详解

在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上),但是一个业务场景可能会同时处理两个表的操作。在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可能存在部分节点提交失败的情况,即事务的ACID特性需要在各个不同的数据库实例...

2020-03-30 10:21:39 234 0

原创 Mysql主从复制、mysql-proxy读写分离

准备两台mysql服务器,master(192.168.43.64)、slave(192.168.84.129) master配置: log-bin=mysql-bin binlog_format=mixed server_id=1 binlog_checksum=none slave配置:...

2020-03-30 10:19:30 38 0

原创 Redis 之服务器集群配置

常见的集群架构如图: redis操作过程中数据同步的函数调用关系: 集群搭建:   1.修改3个redis.config 文件的:   2.启动2个redis服务器 当杀掉redis主进程Master时,由于Slave(6380)只读,则无...

2020-03-30 10:17:13 29 0

原创 使用PHP实现的服务端socket

实现 相关函数: socket_create、socket_set_block、socket_bind、socket_listen、socket_accept、socket_read、socket_write,这些函数具体参数说明在PHP文档上写很详细,这里就不再赘述,这里只是介绍服务端如何处理...

2020-03-30 10:12:06 47 0

原创 PHP-FPM详解

作用 PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。 PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。 (1). 为什么会出...

2020-03-30 09:59:43 75 0

原创 Redis构建分布式锁

1、前言   为什么要构建锁呢?因为构建合适的锁可以在高并发下能够保持数据的一致性,即客户端在执行连贯的命令时上锁的数据不会被别的客户端的更改而发生错误。同时还能够保证命令执行的成功率。   看到这里你不禁要问redis中不是有事务操作么?事务操作不能够实现上面的功能么?   的确,redi...

2020-03-30 09:55:23 25 0

原创 使用PHP来简单的创建一个RPC服务

RPC全称为Remote Procedure Call,翻译过来为"远程过程调用"。主要应用于不同的系统之间的远程通信和相互调用。 比如有两个系统,一个是PHP写的,一个是JAVA写的,而PHP想要调用JAVA中的某个类的某个方法,这时候就需要用到RPC了。 怎么调?直接调...

2020-03-30 09:06:32 46 0

原创 redis防止抢购商品超卖

前言: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用。 本篇文用来测试下使用redis来防止抢购商品超卖问题。 内容: 使用redis的list进行测试     思路是设置一个redis列表List,假设有十个商品,每次请求先判断List的长度,小于十就能抢到商...

2020-03-26 14:41:55 241 0

原创 PHP引用(&)使用详解

php的引用(就是在变量或者函数、对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容。 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址。 1.变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 <?p...

2020-03-26 14:41:24 73 0

原创 PHP Socket 编程进阶指南

socket函数只是PHP扩展的一部分,编译PHP时必须在配置中添加--enable-sockets配置项来启用。 如果自带的PHP没有编译scokets扩展,可以下载相同版本的源码,进入ext/sockets使用phpize编译安装。 socket系列函数 socket服务端/客户端流程:...

2020-03-26 14:40:15 60 0

原创 深入学习Redis持久化

一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999% 等等)。但是在Redis语境中,高可用的含义似...

2020-03-26 14:39:29 28 0

原创 Linux共享内存的管理

在进程通信应用中会用到共享内存,这就涉及到了IPC,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)。IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道,系统进行进程间通信(IPC)的时候,可用的方式包括信号量、共享内存、消息队列、管道、信号(signal)、套接字等形式[...

2020-03-26 14:38:32 33 0

原创 php使用shmop函数创建共享内存减少负载

PHP做内存共享有两套接口。一个是shm,它实际上是变量共享,会把对象变量序列化后再储存。使用起来倒是挺方便,但是序列化存储对于效率优先的内存访问操作而言就没啥意义了。另外一个是shmop,它是Linux和Windows通用的,不过功能上比shm弱了一些,在 Linux 上,这些函数直接是通过调用...

2020-03-26 14:34:40 38 0

原创 使用php生成数字、字母组合验证码

项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略。实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在服务器端随机生成验证码,将其存储在$_SESSION中。 b>然后将验证码写在图片上...

2020-03-26 14:33:28 49 0

原创 PHP(Mysql/Redis)消息队列的介绍及应用场景案例

在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢? 这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压。消息队列就是一个...

2020-03-26 14:32:26 97 0

原创 MySQL多表查询优化

一、多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根据查询的情况,想好使用哪种连接方式效率更高。 二、MySQL的JOIN实现原理 在MySQL 中,只有...

2020-03-26 14:31:29 97 0

原创 什么情况下使用 RPC ?

什么是 RPC ? RPC 是一种框架或者说一种架构,主要目标就是让远程服务调用更简单、透明,调用远程就像调用本地一样。 什么情况下使用 RPC ? 如果我们开发简单的应用,业务流程简单、流量不大,根本用不着 RPC。 当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不...

2020-03-26 14:30:46 114 0

原创 php高并发之opcache详解

客户的一台服务器,业务逻辑比较简单 。估算pv在120w左右吧,用的是阿里云2c4g的服务器。一大早就开始卡顿了,登陆服务器后查看负载到了八九十。 之后就想办法调整一下吧。突然想起某位前辈说过的:开启opcache吧,真的会变快的。 于是我马上就开始整,过程很简单 1.进入php,ini 搜...

2020-03-25 15:08:37 43 0

原创 Nginx优化详解

一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。 2. worker_cpu_affinity 00000001 00000010 ...

2020-03-25 15:05:35 28 0

原创 shell查询MySQL并将结果写入文件中

背景 说下需求,搭建一个接口开放平台,包含API文档和功能测试,部分内网地址需要修改hosts文件 准备 新建表 然后查看服务器中hosts文件 命令:cat /etc/hosts 我们要做的就是把这张表和这个文件结合起来,通过web页面进行增删改查管理 我在我自己的apidoc项目...

2020-03-25 15:00:55 376 0

原创 Lua 嵌入 Redis 解决库存秒杀--接口限流

<?php /** * Created by PhpStorm. * redis 销量超卖秒杀解决方案 * redis 文档:http://doc.redisfans.com/ * ab -n 10000 -c 3000 http://localhost/demo.php 模拟...

2020-03-25 14:55:22 236 0

原创 swoole的process模块创建和使用子进程

swoole中为我们提供了一个进程管理模块 Process,替换PHP的 pcntl 扩展,方便我们创建进程,管理进程,和进程间的通信。 swoole提供了2种进程间的通信: 1、基于 unix socket 的管道 pipe。 2、基于 sysvmsg 的消息队列。 我们可以通过 new...

2020-03-25 14:50:57 90 0

原创 php操作redis数据库方法

一、安装php_redis扩展,用以操作redis 选择自已系统php版本对应的扩展,这一步自行解决 二、redis连接与验证 <?php //创建一个redis客户端 $redis = new Redis(); //连接redis服务,指定主机,端口,和超时时间 $redi...

2020-03-25 14:27:30 55 0

原创 php使用redis的有序集合zset实现延迟队列

延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息。 延迟队列的应用场景: 1、新用户注册,10分钟后发送邮件或站内信。 2、用户下单后,30分钟未支付,订单自动作废。 我们通过redis的有序集合zset来实现简单的延迟队列,将消息数据序列化,作为zset的v...

2020-03-25 14:20:15 93 0

原创 SWOOLE进阶-00环境安装

前言 这里环境安装选择宝塔安装。那么为什么要选择宝塔安装?是因为宝塔安装方便、快捷。我们只关注swoole的学习,不关心环境的安装,关注点不同。 版本 宝塔最新版本,7.0免费版,linux版。 安装环境 Centos安装脚本:yum install -y wget &&...

2020-03-25 14:16:50 70 0

原创 SWOOLE进阶-01快速入门

上一篇文章,说到了环境安装,安装了swoole。那么,我们可以通过命令php -m | grep swoole来查看安装的swoole扩展是否成功;通过命令php --ri swoole来查看swoole扩展的具体信息。对于一些安装swoole扩展之后,查看不到swoole时,主要是php-fpm...

2020-03-25 14:15:49 67 0

原创 SWOOLE进阶-02 SWOOLE结构与运行模式

前言 文章开始之前,我们有几个知识点疑问?什么是同步和异步? 什么是阻塞和非阻塞?什么是同步阻塞?什么是同步非阻塞?什么是异步阻塞和异步非阻塞? swoole的异步模块和异步客户端;网络通信协议是什么?什么是长连接?为什么需要长连接?swoole怎么做实现长连接? 课程内容 同步与异步 ...

2020-03-25 14:13:49 56 0

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