后端
文章平均质量分 92
Gavin_new
一个在技术领域逐渐成长的孩子....
展开
-
redis源码阅读之数据结构(浅易说明)
好一段时间只在有道笔记上上写笔记而写博客了,最近忽然发现,只写笔记的话容易造成信息丢失,所以想把笔记的内容整理成博客留存下来。 redis是一个内存型nosql数据库,之前阅读其源码,就感觉到作者的牛逼之处,源码中的数据结构透露出对内存的极高的利用率(ps:我看的是redis 5.05版本的源码)。 从redis给出的用法知道,redis顶级的对象是db,然后下面存储了string、hash、list、set、sortset、stream(少有人用)这几种数据;...原创 2020-08-30 23:07:10 · 443 阅读 · 1 评论 -
发布一个轻量级的PHP实现的WEBSOKCET引擎-EZ_WS
利用零散的时间,用php这门语言写了个轻量级的WebSocket引擎-EZ_WS,期间也在这世界上最好的语言上踩过几个坑,不过坑踩过了,东西也出来了,现分享给大家;GitHub网址:https://github.com/GavinLiu168/ez_ws以下是说明文档EZ_WS是easy-websocket的意思,旨在提供一个websocket的php版本引擎,让php开发人员更加快速的使用webs原创 2017-05-11 11:55:54 · 2244 阅读 · 1 评论 -
五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应转载 2017-06-05 15:34:22 · 700 阅读 · 0 评论 -
PHP session回收机制【转】
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改) 的值,来决定是否启动一个GC(Garbage Collector)。默认情况下,session.gc_proba转载 2017-06-01 20:10:56 · 669 阅读 · 0 评论 -
XSS攻击以及PHP预防
XSS又称CSS,全称Cross SiteScript(跨站脚本攻击), XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie信息、破坏页面结构、重定向到其它网站等。原创 2017-06-01 20:25:40 · 642 阅读 · 0 评论 -
PHP中的后期静态绑定(Late Static Bindings )
今天看laravel框架源码时,发现一个”static::”这样的语法,非常好奇(本人没经过系统培训,勿喷基础知识不行),于是就上php.net查了一下,原来设施一个php5.3版本新增的静态绑定的语法, 好了,不废话,开始做笔记。class A{ public static function func1(){ echo __CLASS__.PHP_EOL; }原创 2016-10-17 20:44:21 · 1044 阅读 · 0 评论 -
父进程退出后如何通知子进程退出
Linux 中创建子进程是相当方便的,通过fork调用即可。当子进程退出时,要给父进程发送SIG_CHLD信号,是为了父进程回收子进程的资源,方便管理的目的。 但是当父进程退出后,一般是不会通知子进程的,父进程会将自己的所有子进程过继给init进程。但是,在实际的项目中,我们有这样的需求: 如果父进程退出后,希望能通知子进程退出。我们知道,可以利用进程间通信机制,在父进程退出前主动发送信号或pipe转载 2017-06-18 15:26:11 · 7472 阅读 · 0 评论 -
数据分片以及全局id的生成
一. 数据分片在分布式存储系统中,数据需要分散存储在多台设备上,数据分片(Sharding)就是用来确定数据在多台存储设备上分布的技术。数据分片要达到三个目的:分布均匀,即每台设备上的数据量要尽可能相近;负载均衡,即每台设备上的请求量要尽可能相近;扩缩容时产生的数据迁移尽可能少。但是数据分片后,各个数据库如何维护记录的唯一性id呢?二. 全局唯一性id的生成1.mogodb的唯一性id生成算原创 2017-06-20 14:09:41 · 931 阅读 · 0 评论 -
CSRF跨站请求伪造
前面说到XSS跨站脚本攻击,现在来个复杂度更高一点的CSRF跨站请求伪造;首先说一下RSRF的几个要点: 1. RSRF是通过各种方法(站内发布链接,qq邮箱发布链接等),让登录用户触发请求,在用户不觉察的过程中对用户数据进行篡改,进而实现攻击; 2. 通过XSS可以获取到用户的session_id,进而欺诈服务器,因此xss只是rsrf的实现途径之一;防止方法: 1. 对于某些敏感的请求,禁原创 2017-06-20 14:27:27 · 627 阅读 · 0 评论 -
memcache数据的同步读写
作为缓存服务,memcache提供了curd的基本查询,但基于业务需要,memcache需要进行数据同步的造作,实现方法如下:悲观锁:使用add方法加锁以达到数据原子性操作;乐观锁:使用gets命令获取键值对同时获取一个唯一标识,再通过cas命令更新数据,若失败表示数据已被修改;原创 2017-06-20 16:41:29 · 1793 阅读 · 0 评论 -
PHP防SQL注入记录
mysql注入历来是php的一个问题,目前主要有以下几种方案: (1)addslashes函数 (2)mysql_escape_string 和mysql_real_escape_string 函数(将被废弃或已被废弃) (3)magic_quotes_gpc自动过滤输入(由于效率问题,5.4以后已被强制关闭,无法开启) (4)使用pdo/mysql驱动查询,消除注入看了网上的几篇博文,大致原创 2017-06-05 12:18:59 · 611 阅读 · 0 评论 -
curl_exec和wget执行太慢,IPv6惹的祸
这几天在容器中运行curl时,发现了都要5秒的延时,抓包显示,域名解析服务器访问和目标服务器连接都很正常,但是curl在发起域名解析后,硬是等待5秒后才执行服务请求。找了下资料,发现如果系统开启了ipv6支持,则curl优先进行ipv6的域名解析,失败后才进行ipv4的解析。而解析失败重试时间被限制在5秒,于是就出现了这个延时。解决方法:curl -4 baidu.com #强制要求使用ipv4地原创 2017-10-28 15:00:53 · 2166 阅读 · 0 评论 -
探讨Docker容器中修改系统变量的方法[转]
转自http://tonybai.com/2014/10/14/discussion-on-the-approach-to-modify-system-variables-in-docker/探讨完Docker对共享内存状态持久化的支持状况后,我将遗留产品build到一个pre-production image中,测试启动是否OK。很显然,我过于乐观了,Docker之路并不平坦。我收到了shmget转载 2017-10-28 15:09:30 · 8949 阅读 · 1 评论 -
mysql在多进程下出现断开连接(MySQL server has gone away错误)笔记
今天进行文件迁移,主进程负责查数据库,并创建多个子任务,而子任务以进程的方式异步执行,如图所示: 但是,随后发现程序开始后不就,主进程在查询数据库时,报MySQL server has gone away 错误;查了下资料,发现在创建子进程时,父子进程共享同一个socket资源,虽然进程表中有两份socket描述符,但实际上在内核里映射的是同一个socket资源链接,如图:再看下上图中的程序,当任...原创 2018-03-09 16:14:47 · 2305 阅读 · 0 评论 -
php-fpm生产环境下的调试strace
以前,在对php进行性能问题分析时,主要是依赖xhprof对php性能瓶颈进行分析,而这需要侵入代码。今天遇到了需要在生产环境下找出fpm问题的需求,这种情况下,在网上查找了下方案,发现了strace工具。strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。指令用法:strace...原创 2018-04-14 16:41:17 · 2242 阅读 · 0 评论 -
Golang协程机制以及异常处理
golang之所有好用,是因为其将以前编程中常用的而且晦涩难用的异步任务以及信号机制,以傻瓜式的语法给封装了一层。接触了golang已经有一段时间了,现在回头再看一下golang的协程机制,顺便做个总结。一. 协程机制详情可查看这篇论文《Golang协程调度器详解》系统内核可以理解成一个经验丰富的管家,能把以前无系统下的各种任务(包括各种异步任务同步任务)给处理的很得当。其基本思想就是建造了进程对...原创 2018-04-02 14:19:07 · 6905 阅读 · 0 评论 -
【转】redis内存模型
文章写得很好,由于原文不能复制,故只能截图做笔记。原文地址:https://news.html5.qq.com/share/5641006391504052768?url=http%3A%2F%2Fkuaibao.qq.com%2Fs%2F20180409B1X8WY00&ch=060000&qbredirect=&share=true&sc_id=rT101bC...转载 2018-04-10 21:59:45 · 363 阅读 · 0 评论 -
加权轮训算法--最大公约数法
在做灰度的时候,需要用到加权轮训算法,于是选择了最简单的最大公约数法,在这里做下记录(下面内容为摘抄原文,并修正部分文字)大体方法:这种算法的原理是:在服务器数组S中,首先计算所有服务器权重的最大值max(S),以及所有服务器权重的最大公约数gcd(S)。 index表示本次请求到来时,选择的服务器的索引,初始值为-1;current_weight表示当前调度的权值,初始值为max...原创 2018-04-11 14:59:03 · 1489 阅读 · 0 评论 -
TCP总结笔记
TCP作为面向连接的协议在实际应用中占据很重要的地位,其是可靠传输协议,保证了数据流的稳定传输。现在对TCP做一个简单的笔记;一.TCP在通讯中的概览 如上图所示,TCP是传输层协议,其底层是通过IP层来进行数据收发的;下面是IP协议的结构: 下面是TCP数据在IP报文中的位置: 下面是TCP协议的结构: 下面是TCP数据传输过程: 二.TCP通讯的握手和释放首先,TCP在传输数据前,需要原创 2017-05-02 10:18:14 · 566 阅读 · 0 评论 -
PHP进程之信号捕捉中的declare(ticks=1)
在使用PHP的PCNTL拓展时,发现在信号捕捉的例程中出现了declare(ticks=1)这条php语句,于是对其进行研究。一. 语句在php中的意义php中,declare(ticks=n)和register_tick_function(‘handel_function’)一般是配合使用的,其作用是在zend解释器每执行 N 条可计时的低级语句就会发生的事件,该事件发生后就可以处理已经注册的函数原创 2017-03-24 12:01:34 · 2866 阅读 · 0 评论 -
PHP之pthread拓展使用以及坑
PHP是为WEB开发而生,但是以前PHP是没有线程的说法,直到pthread的出现。 资料来源:http://php.net/manual/zh/book.pthreads.php一. 线程的创建和使用1. Thread类基本的创建和使用:<?php//通过继承Thread类来实现自己的线程类MyThreadclass MyThread extends Thread{ //重写构造函数原创 2017-03-23 15:24:59 · 12615 阅读 · 0 评论 -
PHP-编译运行过程以及opcode缓存的笔记
作为动态语言,PHP是在运行时编译执行的,其依赖的是zend引擎(就是一个虚拟机)。而php编译执行的过程如下: (不在详细讲了,不懂的去补一下编译原理或者直接百度详细教程) 一. Scanning(Lexing) 从名字上就大概理解过程了,就是扫描php文本,将文本中的文本块,转换为程序可以识别的数据块,如“空格,变量...”,总之就是zend枚举的数据类型了,专业词语,就是讲php文本转原创 2016-07-27 18:21:28 · 2049 阅读 · 0 评论 -
PHP-函数回调的四种形式(笔记)
今天看了下swoole,其中提到了回调函数的四种形式,因为平时只用到一两种,为了备忘,就在这里记录下四种实现方式:一.匿名函数$server->on('Request', function ($req, $resp) { echo "hello world";});二.类静态函数class A{ static function test($req, $resp) {原创 2016-08-08 22:27:35 · 1349 阅读 · 0 评论 -
Redis3.0中redis.config的一些笔记
接触redis有好一段时间了,今天打开redis.config这个配置文件打算全部都看一遍,同时也在这里做一下笔记。一. Include部分 该部分主要用于包含redis的其它配置文件,用法如下:include /path/to/other.conf二. 常用部分 1. 设置redis为守护进程:daemonize no 这里的“no”改为“yes”; 2. PID文件路径配置:原创 2016-10-13 10:37:47 · 1671 阅读 · 0 评论 -
Nginx反向代理的应用例子及简单的笔记
最近手上有两台服务器,都是cenos7系统,不同的是,一个是LAMP环境,一个是LNMP环境。对于Nginx,之前了解的时候,就知道nginx在反向代理和负载均衡方面的能力比较强,于是今天就拿nginx服务器来尝试了一下配置反向代理,结果发现流程相当的简单,下面就是今天的笔记。项目目的:对指向nginx服务器域名做两个反向代理,域名的一级目录(http://域名)指向本机,域名的二级目录(http:原创 2016-09-28 21:06:19 · 4175 阅读 · 0 评论 -
Web架构设计概览学习--笔记
在Web架构设计中一般涉及以下几个问题: (1)大访问量; (2)大存储量; (3)访问速度; (4)服务器的监控;对于前三个问题,就需要用到“负载均衡”和“冗余”两种技术来组合解决; (1)负载均衡,就是通过“调度服务器”以轮询的形式将访问平均分配到其下面的各个服务器中,以达到平均负载的工嗯呢该,而一般使用的工具是“Linux环境下的LVS技术”(纯软件技术),以及F5等负载均衡器(硬原创 2016-10-26 22:13:02 · 461 阅读 · 0 评论 -
PSR规范学习笔记
PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版;如下是PSR五个标准的英文网页: http://www.php-fig.org/psr/psr-0/ http://www.php-fig.org/psr/psr-1/ http://www.php-fig.org/psr/psr-2/ http://www.p原创 2016-11-15 17:48:03 · 5464 阅读 · 0 评论 -
【转】Laravel 5.1 LTS 速查表
在laravel-china网站上看说明文档的时候,发现了一个好东西,再次分享一下: https://cs.laravel-china.org/转载 2016-12-06 17:28:26 · 1037 阅读 · 0 评论 -
PHP的EXCEPTION,ERROR和THROWABLE
●PHP中将代码自身异常(一般是环境或者语法非法所致)称作错误Error,将运行中出现的逻辑错误称为异常Exception。 ●错误是没法通过代码处理的,而异常则可以通过try..catch来处理; ●PHP7中出现了Throwable接口,该接口由Error和Exception实现,用户不能直接实现Throwable接口,而只能通过继承Exception来实现接口;**题外话: 在larav原创 2016-11-15 19:54:29 · 5323 阅读 · 0 评论 -
php协程(Coroutine)学习笔记
PHP5.5中加入了一个新特性—迭代生成器和协程。一. 什么是协程(Coroutine)?在协程出现之前,要实现多任务并发,在无OS(操作系统)时代,可以使用状态机的思想对多任务进行拆解,在单进程环境中运行多任务,但是这种模式下需要开发者对每个任务有清晰的了解,也要开发者自行开发与任务相关功能(如任务间的通讯)。后来出现了OS(操作系统),咱们就开始使用OS提供的进程和线程功能来轻易实现多任务了。在原创 2017-01-18 18:11:24 · 6942 阅读 · 0 评论 -
PHP---socket应用学习
在看了一下php版的socket-api后,发现php和c语言果然是亲源关系,其socket函数名都有很多相似之处,好了,开始学习。创建socket资源/** * Socket协议:domain => AF_INET(ipv4) AF_INET6(ipv6) AF_UNIX(本地进程间通讯)* Socket类型:type => SOCK_STREAM(顺序全双工字节流,TCP) SOCK_D原创 2016-12-20 19:24:27 · 1015 阅读 · 0 评论 -
PHP---引用使用foreach(xxx as &$x)时候的坑。
注意如下一段代码:$data1 = ["1","2","3"];$data2 = ["4","5","6"];$all = 0;foreach($data1 as &$x){ $all += $x}#注意这里$x是$data1最后一个元素的引用$all2 = 0;foreach($data2 as $x=>$y){ $all2 += ($y+$data1[$x]); //原创 2016-12-15 11:21:59 · 5103 阅读 · 0 评论 -
PHP中的__autoload()和spl_autoload_register()笔记
在看框架源码时,发现了__autoload和apl_autoload_register这两个函数,于是对其进行了一番学习。php的__autoload函数是一个魔术函数,在这个函数出现之前,如果一个php文件里引用了100个对象,那么这个文件就需要使用include或require引进100个类文件,这将导致该php文件无比庞大。于是就有了这个 __autoload函数。__autoload函数在什原创 2016-10-13 12:12:51 · 6867 阅读 · 5 评论 -
PHP自增(++)中的一些奇葩问题研究记录
PHP自增(++)中的一些奇葩问题研究记录最近,从一篇博文中看到php中一个比较奇葩的问题,于是就在自己的博客中做一下记录,原文的网址如下:[PHP一个诡异的加法算法的研究](http://www.phpchina.com/portal.php?mod=view&aid=40040)首先呢,我们先来看一个简单的PHP问题:<?php $a = 1; echo (++$a)+(+原创 2016-06-30 18:48:15 · 741 阅读 · 0 评论 -
MySQL--数据备份还原以及主从复制
作为数据库,为了数据安全,mysql当然提供了数据备份和数据还原的功能,而且还提供了主从复制的功能,也就是说能搭建数据库集群,以下记录下常用的操作步骤流程;一. MYSQL的备份备份相当简单,使用mysqldump工具就可以实现://将指定的数据库备份mysqldump -uroot -h host -p123456 库名 > test.sql //将指定的数据表备份mysqldump -u原创 2017-02-20 18:10:25 · 1095 阅读 · 0 评论 -
PHP7新特性 简要笔记
PHP7除了在解析方面做了深度优化之外,还在语法用法上有了新功能新特性,参考PHP手册,做了简要笔记;1.指定标量类型(指定函数参数类型)<?php// Coercive modefunction sumOfInts(int ...$ints) //省略号代表传入多个参数并存储在ints容器中{ return array_sum($ints);}var_dump(sumOfInts(原创 2017-03-03 17:24:22 · 466 阅读 · 0 评论 -
Redis 数据备份还原与主从复制
Redis作为一个内存数据库,在数据安全以及集群部署方面都提供了一系列工具可供使用。一. Redis数据库数据备份Redis是内存型数据库,但是为了数据安全,就需要有“数据持久化“(就是将数据存储在磁盘上)的机制,在备份方面提供了两种工具,分别为RDB和AOF。1.RDB备份与恢复RDB是利用快照来实现数据持久化的,当符合特定条件时,redis将会自动的将内存中的数据保存在硬盘上,当redis启动时原创 2017-02-23 18:28:12 · 3351 阅读 · 0 评论 -
【转】Laravel 深入理解路由和URL生成(使用action方法生成奇葩url的原因)
转自“Laravel 深入理解路由和URL生成- 技安后院”转载 2016-12-07 21:40:27 · 7024 阅读 · 1 评论 -
php中post的一些知识【转】
【转自phpchina开发社区】 你所不知道的 POST http://www.phpchina.com/portal.php?mod=view&aid=40121转载 2016-07-27 11:33:38 · 570 阅读 · 0 评论