自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gaobinzhan

一个Phper的成长之路

原创 sl-im 是基于 Swoft 微服务协程框架和 Layim 网页聊天系统 所开发出来的聊天室

简介sl-im 是基于 Swoft 微服务协程框架和 Layim 网页聊天系统 所开发出来的聊天室。体验地址sl-im https://im.gaobinzhan.com演示图功能登录注册(Http)单点登录(Websocket)私聊(Websocket)群聊(Websocket)在线人数(Websocket)获取未读消息(Websocket)好友在线状态(Websoc...

2020-04-13 20:22:59 103

原创 如何搭建redis-cluster
原力计划

背景​ 假设在一台主从机器上配置了20G内存,但是业务需求是需要50G内存的时候,主从结构+哨兵可以实现高可用故障切换+冗余备份,但是不能解决数据容量的问题,用哨兵,每个redis实例存储的数据也都是完整的数据,浪费内存且有木桶效应。​ 为了最大化利用内存,可以采用cluster,就是分布式存储。即每台redis存储不同的内容。Redis分布式方案一般有两种:客户端分区方案:优点是分区逻辑可控,缺点是需要自己处理数据路由,实现高可用、故障转移等问题。比如在redis2.8之前通常的做法是获取某

2020-06-30 22:34:23 61

原创 redis哨兵故障转移及实现
原力计划

文章目录Sentinel命令Sentinel故障转移Sentinel实现原理三个定时任务主观下线和客观下线领导者选举方式如何选择“合适”的Slave节点Sentinel常见问题在上篇文章中docker-compose搭建redis-sentinel成功的搭建了1主2从3哨兵。Sentinel命令sentinel是一个特殊的redis节点,它有自己专属的api:sentinel masters 显示被监控的所有master以及它们的状态。sentinel master <master n

2020-06-22 14:09:55 163

原创 docker-compose搭建redis-sentinel
原力计划

文章目录主从复制的问题哨兵机制的原理docker-compose 实现 redis-sentinel主从复制的问题​ 对于上篇文章redis持久化rdb及aof中,redis服务器重启时的数据恢复,在新版本中是不符合我画的那个流程图的。​ redis启动的时候会去判断是否开启aof,如果开启了,不存在aof文件的话,会去判断是否存在rdb,但在新的版本中,如果开启aof,不存在aof文件的时候,redis会主动创建aof文件并且加载aof,这就会导致数据丢失。解决方案如下:关闭aof启动redi

2020-06-20 01:10:48 59

原创 php反射实现Ioc/Di及注解
原力计划

​ PHP5之后提供了完整的反射API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。此外,反射API提供了方法来取出函数、类和方法的文档注释。Ioc/Di大家应该都不陌生,但是对小白来说呢听起来就挺高大上的,下面就用代码来实现:<?php/** * @author gaobinzhan <gaobinzhan@gmail.com> */class Foo{ public function getClassName() { ret

2020-06-08 23:47:49 156 3

原创 redis持久化rdb及aof
原力计划

为什么要开启redis持久化及如何去做redis备份

2020-06-07 19:27:12 53

原创 redis之主从问题处理
原力计划

redis如何规避复制风暴问题

2020-06-05 15:05:29 120

原创 redis主从之全量复制及增量复制
原力计划

文章目录主从注意事项拓扑图一主一从一主多从树状主从原理数据同步主从注意事项在之前我写了一篇docker实现redis主从复制的文章,点击进入对于主从复制的好处,在上篇文章我也写了,下面说一下注意事项。注意事项:安全对于数据比较重要的节点,主节点会通过设置requirepass参数进行密码验证,这时候所有的客户端访问必须使用auth命令进行验证。从节点与主节点的复制链接是通过一个特殊标识的客户端来完成。因此需要配置从节点的masterauth参数与主节点密码保持一致,这样从节点才可以正确地

2020-06-04 00:15:22 592

原创 Go常见架构模式的实现

Go常见的架构模式,实现pipe-filter framework 和 micro-kernel framework

2020-05-31 16:55:36 179

原创 Go反射编程

reflect.TypeOf vs. reflect.ValueOf:reflflect.TypeOf 返回类型 (reflflect.Type)reflflect.ValueOf 返回值 (reflflect.Value)可以从 reflflect.Value 获得类型通过 kind 的来判断类型func CheckType(v interface{}) { t := reflect.TypeOf(v) switch t.Kind() { case reflect.Float32, r

2020-05-31 00:37:19 61

原创 Go单元测试及Benchmark

单元测试之前在刚开始写了如何编写测试程序。内置单元测试框架:Fail, Error: 该测试失败,该测试继续,其他测试继续执⾏FailNow, Fatal: 该测试失败,该测试中⽌,其他测试继续执⾏代码覆盖率go test -v -cover断言https://github.com/stretchr/testifyfunc TestErrorInCode(t *testing.T) { fmt.Println("Start") t.Error("Error") f

2020-05-24 20:47:37 160

原创 Go典型并发任务
原力计划

Go典型并发任务及对象池

2020-05-23 19:44:28 116

原创 Go并发编程
原力计划

Go并发编程,协程机制,CSP并发,多路选择和超时控制,channel的关闭和广播,Context与任务取消

2020-05-21 23:58:30 84

原创 Go包和依赖管理

Go实现可复用的包及依赖管理

2020-05-20 10:24:48 75

原创 Go编写好的错误处理
原力计划

Go编写好的错误处理 panic及recover

2020-05-18 23:21:19 188

原创 Go面向对象编程
原力计划

Go行为定义、扩展及复用、多态

2020-05-17 18:36:20 150

原创 Go的函数及可变参数和defer

Go的函数及可变参数和defer

2020-05-16 15:48:07 35

原创 Go字符串

Go字符串及常用函数

2020-05-14 23:22:58 89

原创 Go常用集合
原力计划

Go数组、切片、Map集合

2020-05-13 23:08:51 56

原创 Go基本程序结构
原力计划

Go变量常量、数据类型、运算符、条件和循环

2020-05-11 23:28:12 36

原创 Hello,Go

文章目录简简单单了解Go编写第一个go程序简简单单了解GoGo的特点只有25个关键字强类型语言垃圾回收指针直接访问内存开发环境构建1.8之前必须设置1.8之后没用设置,将使用默认值扩展名必须为go编写第一个go程序hello.gopackage main // 包,表明代码所在的模块import ( "fmt") // 引入代码依赖// 功能实现func main() { fmt.Println("Hello, World!")}两种运行方式:go

2020-05-10 20:59:28 43

原创 Swoole—csp编程模型
原力计划

Swoole — 协程(Coroutine)+通道(Channel)

2020-04-28 10:21:00 264

原创 php yield关键字及协程实现
原力计划

文章目录迭代器生成器颠覆常识的yieldyield实现协程多任务协作及调度器实现调度器通信系统调用获取任务新增任务杀死任务swoole实现协程迭代器迭代是指反复执行一个过程,每执行一次叫做迭代一次php提供了统一的迭代器接口,之前文章我已经写过了。???? 传送门通过实现Iterator接口,可以自行决定如何遍历。生成器相比迭代器,生成器提供了更容易的方法来简单实现对象的迭代,性能开销...

2020-04-27 11:35:17 89

转载 微服务架构常见的分布式事务解决方案

文章目录场景问题BASE理论CAP定理解决方案可靠消息最终一致性(异步确保型)实现消息约束成本优点、适用范围方案特点柔性事务解决方案 TCC(两阶段型、补偿型)实现成本适用范围用到的服务模式方案特点最大努力通知型实现约束成本使用范围方案特点应用案例场景问题多个服务,位于不同主机,不同的网络当中,没有办法用本地事务保证要么一起成功,要么一起失败。BASE理论BA: Basic Availab...

2020-03-25 12:23:15 68

原创 Swoole协程模式实现Mysql连接池

文章目录连接池定义为什么需要连接池?使用channel实现连接池连接池定义永不断开,要求我们的这个程序是一个常驻内存的程序。数据库连接池(Connection pooling)是程序启 动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。为什么需要连接池?当并发量很低的时候,连接可以临时建立,但当服务吞吐达到几百、几千的时候,频繁 建立连接 ...

2020-03-24 03:41:32 195

原创 php用select实现I/O复用

前言在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,其实I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪...

2019-12-24 16:20:18 94

转载 Linux五大网络IO模型图解

文章目录阻塞io(同步io)非阻塞io(同步io)io复用(同步io)信号驱动io(同步io)异步io总结对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。阻塞io(同步io)发起请求就一直等待,直到数据返回。好比你...

2019-12-20 17:41:47 46

原创 docker实现redis主从复制

文章目录主从复制说明面临问题什么是主从复制主从复制的作用主从复制启用主从复制原理构建dockerfile构建redis镜像docker创建自定义网络及redis主从集群规划docker启动容器测试主从复制主从复制说明面临问题在实际的场景当中单一节点的redis容易面临风险。比如:机器故障。我们部署到一台 Redis 服务器,当发生机器故障时,需要迁移到另外一台服务器并且要保证数据是同步...

2019-12-19 17:01:46 80

原创 Swoole处理Tcp粘包问题(面向过程)

文章目录TCP通信特点TCP粘包介绍原因swoole处理粘包重现TCP粘包问题固定包头+包体协议TCP通信特点TCP 是流式协议没有消息边界,客户端向服务器端发送一次数据,可能会被服务器端分成多次收到。客户端向服务器端发送多条数据。服务器端可能一次全部收到。保证传输的可靠性,顺序。TCP拥有拥塞控制,所以数据包可能会延后发送。TCP粘包介绍TCP 粘包是指发送方发送的若干包数据 ...

2019-12-15 16:20:41 46

原创 Swoole TCP和UDP(同步和异步)

Tcp: 舔狗行为 可靠 先连接然后发消息等待回复Udp: 渣男行为 不可靠 不需要建立连接 通信不需要一直保持tcp服务端<?php//创建Server对象,监听 127.0.0.1:9501端口$serv = new Swoole\Server("127.0.0.1", 9501);//监听连接进入事件$serv->on('Connect', func...

2019-12-14 12:23:11 52

原创 消息中间件Kafka - PHP操作使用Kafka

文章目录PHP使用Kafka安装libkafka安装rdkafkaphp操作kafkaPHP使用Kafka我们需要安装libkafka和rdkafka安装libkafka下载去GitHub上克隆下来git clone https://github.com/edenhill/librdkafka.git安装cd librdkafka/./configure &&...

2019-08-27 17:40:57 98

原创 消息中间件Kafka - 介绍及安装

文章目录Kafka介绍优势关键概念安装Kafka介绍优势高吞吐量:非常普通的硬件Kafka也可以支持每秒数百万的消息支持通过Kafka服务器和消费机集群来区分消息支持Hadoop并行数据加载关键概念Broker:Kafka集群中的一台或多台服务器统称为broker。Topic:Kafka处理的消息源(feeds of messages)的不同分类。Partition:Top...

2019-08-27 17:36:36 42

原创 消息队列 - 应用场景

文章目录消息队列相关概念异步处理应用解耦流量削锋日志处理消息通讯主要产品消息队列相关概念消息队列中间件时分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。异步处理场景说明:用户注册成功后,发送注册邮件,再发送注册短信。串行方式:将注册信息写入数据库成功后,向用户发送邮件,再发送注册短信...

2019-08-27 17:35:51 20

原创 ElasticSearch全文检索引擎-使用

文章目录ElasticSearch使用手册官网索引elasticsearch-jdbcElasticSearch使用手册官网es-docses-php-docs索引创建索引vim createindex.json { "settings": { "refresh_interval": "5s", "number_of_shards"...

2019-08-27 17:35:08 26

原创 ElasticSearch全文检索引擎-安装

文章目录ElasticSearch安装安装JDK安装ElasticSearch安装ik中文分词ElasticSearch和ik分词安装成功ElasticSearch安装安装JDK下载rpm包wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; ...

2019-08-27 17:34:43 31

原创 ElasticSearch全文检索引擎-介绍

文章目录全文检索数据分类:两种方法全文检索过程全文检索引擎相关产品ElasticSearch为什么要选择ElasticSearch全文检索一种将文件种或者数据库中所有文本与检索项匹配的文字资料检索方法。对全文数据的检索数据分类:结构化数据 行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据 能够用数据或统一的结构加以表示 数字、符号去表示非结构化数...

2019-08-27 17:34:04 53

原创 Laravel使用Repository模式

文章目录Laravel使用Repository模式Laravel如何部署安装laravel部署命令自定义使用方法Laravel使用Repository模式什么是Repository模式?Repository 模式是架构模式,在设计架构时,才有参考价值;Repository 模式主要是封装数据查询和存储逻辑;Repository 模式实际用途:更换、升级 ORM 引擎,不影响业务逻辑;...

2019-08-27 17:33:27 148

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