- 博客(78)
- 资源 (12)
- 收藏
- 关注
原创 Redis多线程演进史
Redis作为一个基于内存的缓存系统,一直以高性能著称,因没有上下文切换以及无锁操作,即使在单线程处理情况下,读速度仍可达到11万次/s,写速度达到8.1万次/s。但是,单线程的设计也给Redis带来一些问题:只能使用CPU一个核; 如果删除的键过大(比如Set类型中有上百万个对象),会导致服务端阻塞好几秒; QPS难再提高。针对上面问题,Redis在4.0版本以及6.0版本分别引入了Lazy Free以及多线程IO,逐步向多线程过渡,下面将会做详细介绍。单线程原理都说Redis是单线程的
2021-05-07 13:30:27
180
原创 SIP会话流程
下面我们通过一个简单的场景例子来简单介绍一下 SIP 会话流程。Tom 和 Jerry 是非常好的伙伴,Tom 在他的 PC 上使用一个 SIP 的应用程序呼叫 Internet 上另一个 SIP 电话用户 Jerry。1. 注册过程 :SIP 注册过程是建立用户当前 IP 地址与用户URI之间的对应关系。首先,Tom 和 Jerry 的 SIP 应用程序或者硬件设备,需要在网络中注册。之后终端需要知道代理呼叫会话控制功能(P-CSCF)的地址。P-CSCF 是终端向网络中发送所有 SIP 消息
2021-04-26 17:50:12
1367
原创 SIP会话构成
SIP会话构成SIP 会话使用多达四个主要组件:SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于定义消息的内容和特点)的消息来完成 SIP 会话。下面概括性地介绍各个 SIP 组件及其在此过程中的作用。SIP 用户代理 SIP 用户代理(UA) 是终端用户设备,如用于创建和管理 SIP 会话的移动电话、多媒体手持设备、PC、PDA 等。用户代理客户机发出消息。用户代理服务器对消息进行响应。SIP 注册服务器 SIP
2021-04-25 16:27:43
400
原创 千万级用户的大型网站高并发架构设计
(1)单块架构(2)初步的高可用架构(3)千万级用户量的压力预估(4)服务器压力预估(5)业务垂直拆分(6)用分布式缓存抗下读请求(7)基于数据库主从架构做读写分离(8)总结本文将会从一个大型的网站发展历程出发,一步一步的探索这个网站的架构是如何从单体架构,演化到分布式架构,然后演化到高并发架构的。一、单块架构一般一个网站刚开始建立的时候,用户量是很少的,大概可能就几万或者几十万的用户量,每天活跃的用户可能就几百或者几千个。这个时候一般网站架构都是采用单体架构来设
2021-03-26 11:59:33
2455
1
原创 Binlog日志使用
binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了。下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理:一、binlog日志介绍1)什么是binlogbinlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。2)binlog作用因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合。3)和binlog有关
2021-03-16 18:12:46
254
原创 搭建Elasticsearch 高可用集群
以下我们将基于 elasticsearch-6.6.0 版本,在单机上部署 3 个节点组成的集群。3个节点都用作候选主节点,且同时作为数据节点。集群搭建 下载 elasticsearch-6.6.0 二进制包,解压,复制 3 份,分别命名为 es1, es2, es3。 分别修改 config/elasticsearch.yml 的配置, es1 如下:# 集群名称,相同集群的节点名称一致cluster.name: my-application# 节点名称node.nam
2021-03-16 17:51:23
473
原创 Laravel核心概念
Laravel核心概念Laravel 的核心概念包括:服务容器、服务提供者、门面(Facades)、契约(Contracts)。服务容器是 Laravel 的核心,是一个 IoC 容器,是管理类依赖和运行依赖注入的有力工具。服务提供者则提供服务并绑定服务至服务容器。是所有 Laravel 应用程序引导启动的中心所在。Facades 为应用程序的服务容器中可用的类提供了一个「静态」接口。它实际上是服务容器中那些底层类的「静态代理」。Laravel 的 契约(Contracts ...
2021-03-16 17:31:46
343
原创 Redis处理高并发
Redis的高并发和快速原因1.Redis是基于内存的,内存的读写速度非常快;2.Redis是单线程的,省去了很多上下文切换线程的时间;3.Redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。下面重点介绍单线程设计和IO多路复用核心设计快的原因为什么Redis是单线程的1.官方答案因为Redis是基于内存的操作,
2021-03-12 19:23:46
222
原创 吃透 MQ之核心基础篇
先找到每个技术栈最本质的东西,然后以此为出发点,逐渐延伸出其他核心知识。所以,整个系列侧重于思考力的训练,不仅仅是讲清楚 What,而是更关注 Why 和 How,以帮助大家构建出牢固的知识体系。回到正文,这是技术系列《吃透 MQ》的开篇。本文主要讲解 MQ 的通用知识,让大家先弄明白:如果让你来设计一个 MQ,该如何下手?需要考虑哪些问题?又有哪些技术挑战?有了这个基础后,我相信后面几篇文章再讲 Kafka 和 RocketMQ 这两种具体的消息中间件时,大家能很快地抓住主脉络,同时分辨出它们
2021-03-04 16:35:17
228
1
原创 并发模型
前言并发在现在已经是十分常见的问题了,由于人类信息量的增加,很多信息都需要并发处理,原有的串行处理已经很难满足现实的需求。今天我们来讲一讲5种常见的并发模型1、Future模型Future模型是将异步请求和代理模式结合的产物举例:假设我们是一个电商平台,用户在网站下单。用户操作的是客户端它会向Future服务端发送数据,服务端会从后台的数据接口获取完整的订单数据,并响应用户。我们模拟一下用户订单的行为:A、用户挑完商品开始下单,这时客户端向服务器端发送请求1。B、服务端根据客户端
2021-03-03 15:38:19
156
1
原创 CSP并发模型
go语言的并发机制以及它所使用的CSP并发模型CSP并发模型CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。Golang CSPGolang 就是借用CSP模型的一些概念为之实现并发进行理论支持,其实从实际上出发,go语言并没有,完全实现了CSP模型的所有理论,仅仅是借用了 process和channel这两个概念。p.
2021-03-03 14:30:47
1363
1
原创 FastCgi与PHP-fpm之间是个什么样的关系
这是我看到的比较好的回答,分享给大家!刚开始对这个问题我也挺纠结的,看了《HTTP权威指南》后,感觉清晰了不少。首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需
2021-02-24 13:59:28
154
原创 自定义注解之程序员装逼的利器
相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一
2020-11-16 10:22:21
146
原创 MySQL中,写SQL的好习惯
每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~1. 写完SQL先explain查看执行计划(SQL性能优化)日常开发写SQL的时候,尽量养成这个好习惯呀:写完SQL后,用explain分析一下,尤其注意走不走索引。explainselectuserid,name,agefromuserwhereuserid=10086orage=18;2、操作delete或者update语句,加...
2020-11-16 10:15:13
116
原创 PHP-验证码
一、简单介绍验证码1.验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户是计算机和人的公共全自动程序。2.验证码主要应用场景:登录、注册确定前,发布、回复信息前,疑似机器请求时,做人/机器校验。3.实现步骤:(1)生成底图; 依赖php图片处理库GD,http://php.net/manual/zh/book.image.php(2)生成验证内容; 产生随机数,使用php函数rand();(3)生成验证码图片;(4)校验验证内容...
2020-11-13 11:33:37
1724
原创 关于列表鼠标悬浮显示 tr title 属性换行
在换行的地方添加 或 实现换行<trtitle="指标名称:${target.intename} 指标说明:${target.remark} 指标名称:${target.intename}">
2020-09-26 13:57:14
477
原创 layer.open弹出层应用示例
1、定义一个静态页,里面存放需要的HTML,如FlightBookChildInsur.html在这个页面定义执行函数,用来返回数据;function callbackdata() { var passengerName = $("#passenger_Name2").val(); var passengerCertificate = $("#passenger_Certificate2").val(); var passengerCertificateNum = $("#pas...
2020-08-24 11:59:47
594
原创 在smarty中大括号跟js正则表达式冲突的时候
smarty的默认标记符是大括号:{},假如我们页面上有JS且定义了函数或者对象,或者有CSS定义了样式,就会出现大括号,smary引擎就会把这些大括号当作smarty语法来解释,很明显,这些CSS样式属性和JS里的语法,不是smarty的语法,smarty引擎就会报错。解决办法:1、修改smarty配置文件边界符;这样会影响之前的输出标签全部都需要做出替换,修改范围比较大,并且可读性比较差,而且在html使用效果不是很好$smarty = new Smarty();$smarty->
2020-08-22 17:54:36
209
原创 关于layer.open弹出框input文本框 innerHtml 或 innerText 赋值不生效
问题:在写一个js小效果时,要给input文本框赋值,但赋值后却不生效,input框里面不管怎么赋值都是空白的。num.innerText = "1 18 7 11 18 20 23";打开控制台看到input标签里面的值是以及变动了的解决方案:突然意识到input的赋值是不一样的,input赋值是用value赋值的,和其他标签赋值搞混了。所以只要将innerText 换成innerHtml 就行了num.value = "1 18 7 11 18 20 23";
2020-08-21 20:24:10
1261
1
原创 linux中的根文件系统(rootfs的原理和介绍)
linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很全面很到位的解释。于是,今天我们就来理一理这个话题。一、先交代一下文件系统在开始讨论根文件系统这个话题之前,我们必首先交代一下文件系统这个概念。毕竟,根文件系统只是文件系统中的一种比较特殊的形式而已。根据伟大的百度百科:文件...
2019-11-28 16:22:27
378
原创 Nginx 原理和架构
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/hustspy1990/article/details/102989305Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的...
2019-11-21 11:26:03
194
转载 Thinkphp 模型-连接数据库独立配置model数据库连接
连接数据库ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。目前的数据库包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括对PDO的支持。如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有...
2018-07-04 14:12:36
3977
转载 ThinkPHP 框架执行流程分析
总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode/common.phpReadHtmlBehavior.class.phpRoute.class.phpHook.class.phpContentReplaceBehavior.class.phpWr...
2018-06-29 15:17:46
1242
原创 PHP底层工作原理
PHP底层工作原理2011-09-13 17:19 by PHP淮北, 22634 阅读, 10 评论, 收藏, 编辑最近搭建服务器,突然感觉lamp之间到底是怎么工作的,或者是怎么联系起来?平时只是写程序,重来没有思考过他们之间的工作原理:PHP底层工作原理图1 php结构从图上可以看出,php从下到上是一个4层体系①Zend引擎Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词...
2018-06-08 14:30:51
223
转载 PHP分页+Elasticsearch查询
PHP分页+Elasticsearch查询分页,本质上就是根据给定的页码和偏移量从服务器端请求数据。原理很easy,实践起来却有诸多问题,这里总结一下目前使用的分页demo,通过es请求数据,前端自己构建页码。html的页码显示,有4个参数,$page-具体页码,$pagenum-页数总数,$s-起始页,$e-结束页,点击页码通过触发pageChange()函数进行分页 跳转至指定页码的功能,通过...
2018-04-23 00:52:48
1935
原创 linux lamp 验证码出不来
解决办法:1、没有安装gd库,所以需要安装一下它:yum -y install gd2、PHP程序不能调用gd库,所以需要安装一下php-gd扩展:yum -y install php-gd3、重启一下apache服务,再刷新一下,搞定了;后来发现 php-xml 也没安装,顺便再也安装了一下强大的扩展 php-xml 。...
2018-04-17 14:39:30
449
转载 linux下LNMP环境搭建
LNMP是linux、nginx、mysql、php的简写;LNMP与LAMP环境一样也是用来做web网站后台的,nginx是轻量级的,进程间的通讯使用php-fpm独立使用;apache则是比较臃肿的,调用php的模块来完成的,需要加载很多模块,运行起来相对较慢。一、安装MySQL我们平时安装MySQL都是源码包安装的,但是由于它的编译需要很长的时间,我们这里选择安装二进制免编译包。你可以到My...
2018-04-13 12:01:19
6038
原创 CentOS 7 下安装 Nginx
安装所需环境Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。 一. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++二. PCRE pcre-devel 安装PCRE(Perl Compatib...
2018-04-13 09:50:11
173
原创 linux常用命令和关闭防火墙
1. linux常用命令Mkdir 创建Rm -rf 删除Chmod -R 777 权限Mysql -uroot -rquit退出 find / -name svn 查找位置 2. 关闭防火墙和selinuxRedhat使用了SELinux来增强安全,关闭的办法为:1. 永久有效修改 /etc/selinux/config 文件中的 SELINUX="" 为 disab...
2018-04-12 15:04:50
734
转载 搭建LNMP环境
需求:在Centos7.3下搭建LNMP环境1. 关闭防火墙和selinux打开文件selinuxvim /etc/sysconfig/selinux将文件中SELINUX=enforcing改为disabled,然后执行”setenforce 0″不用重启地关闭selinux。SELINUX=disabled关闭放火墙systemctl stop firewalld.service2.安装软件...
2018-04-12 14:49:27
160
原创 Thinkphp+Nginx(PHPstudy)切换nginx报404错误
最近一个TP5的项目说放到Nginx下测试看看,下载个 PHPstudy,放到WWW下,配置好域名,直接给个报个404;解决方法:1.先在phpstudy下配置好域名目录指向项目下的public下;2.复制下面这段代码放进nginx/conf/vhost文件里:location / { index index.html index.htm index.php; #autoinde...
2018-04-12 14:22:50
2718
原创 thinkphp5的Redis缓存配置
thinkphp采用cache类提供缓存功能支持,采用驱动方式,在使用缓存之前需要进行初始化操作。支持的缓存类型包括file、memcache、wincache、sqlite、redis和xcache等,默认情况下是file类型,配置redis缓存可以单一配置redis也可以同时使用多个缓存类型。配置方式分别如下:thinkphp采用cache类提供缓存功能支持,采用驱动方式,在使用缓存之前需要进...
2018-04-11 18:05:05
2106
1
原创 一张图读懂https加密协议
https是一种加密传输协议,网站使用https后可以避免敏感信息被第三方获取。所以我们经常看见很多银行网站或电子邮箱等等安全级别较高的服务都会采用https协议,具体表现为,https开头、显示绿色安全锁、某些浏览器地址栏变成绿色。那么具体https是怎么工作的呢?一张图读懂https加密协议。 https加密协议简介 https其实是有两部分组成:http + SSL / TLS,也就是...
2018-04-10 17:31:32
602
原创 如何申请https证书、搭建https网站
随着国内搜索引擎巨头百度启用全站https加密服务,全国掀起了网站https加密浪潮。越来越多的站点希望通过部署https证书来解决“第三方”对用户隐私的嗅探和劫持。谷歌方面作为推动网站https加密先驱,早在2010年5月份便开始提供https加密搜索服务。谷歌在算法更新中则表示“同等条件下,使用https加密技术的站点在搜索排名上更具优势”。那么,https加密链接作为互联网站点应用必然趋...
2018-04-10 17:30:16
3969
转载 扩展thinkphp5的redis类方法
笔者在开发时发现,thinkphp5的自带redis类方法,只有简单的读取缓存、写入缓存的基本方法,远不能满足我们业务的需求。redis本身支持五种数据类型,string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)。redis的东西就不必再介绍了,接下来还是让我一起扩展thinkphp5的redis方法吧!首先我们先找到缓存驱动类里的,handler()方法...
2018-04-10 16:44:00
1332
1
原创 Lamp环境搭建
查看linux系统版本uname -a 显示电脑以及操作系统的相关信息cat /proc/version 说明正在运行的内核版本cat /etc/issue 显示的是发行版本信息lsb_release -a (适用于所有的linux,包括Redhat、SuSE、Debian等发行版,但是在debian下要安装lsb)测试环境配置:Linux发型版本:CentOS release 6.3 (Fi...
2018-04-10 15:56:52
259
原创 用php编写支持高并发的网站,需要做什么处理
场景:很难做静态化,像做一个微博那样的东西,并发又高,跟新又快,这种需求的话,又该怎么处理?高并发的问题点是:高并发更多的是考验数据的读写,最终考验的是根据具体的业务需求惊醒系统的架构;解决方案:1.分清楚哪些数据是实时读写,哪些数据是异步读写;(区分数据实时还是异步的方法:) 2.数据的存储方案;mysql擅长的是关系数据和数据统计,高并发访问时瓶颈; ...
2018-04-10 15:53:45
507
原创 Navicat连接mysql 2003 - Can't connect to MySQL server on ' '(10038)
linux下mysql开启远程访问权限及防火墙开放3306端口默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限主流的有两种方法,改表法和授权法。解决这类问题方法如下,报10038是服务器防火墙没有开启3306端口1.打开防火墙配置文件#vim /etc/sysconfig/iptables
2017-11-03 14:41:42
19165
原创 2003 - Can't connect to MySQL server on ' '(10038)
linux下mysql开启远程访问权限及防火墙开放3306端口默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限主流的有两种方法,改表法和授权法。解决这类问题方法如下,报10038是服务器防火墙没有开启3306端口1.打开防火墙配置文件#vim /etc/sysconfig/iptables
2017-11-03 14:38:30
1895
原创 wireshark抓包详解
wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS
2017-11-01 15:07:24
1301
php_igbinary
2018-01-19
ORM(面向对象PDO数据库框架 API框架) PHP
2016-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人