自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 docker搭建redis sentinel实现高可用主从

之前一篇文章介绍过redis主从复制及搭建过程,redis主从并不是一个高可用的方案,一但master宕机,redis将无法提供写服务,因此需要一种机制可以自动将slave升级为master来保证redis主从的高可用,那么就要用到redis-sentinel。什么是redis-sentinel哨兵(sentinel)是一个分布式系统, 用于对主从结构中的每台服务器进行 【监控】,当出现故障时通过投票机制 【选择】 新的master并将所有slave连接到新的master。

2021-01-30 18:01:45 203

原创 基于docker搭建redis主从

redis主从redis主从的运行机制:当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave ,包括客户端的写入、key 的过期或被逐出等等。当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。当无法进行部分重同步时

2020-12-03 22:28:13 188

原创 mysql从库start slave无法启动问题处理

ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository查看错误日志提示如下:[ERROR] [MY-010544] [Repl] Failed to open the relay log './e4917fb8ce7c-relay-bin.000014' (relay_log_pos 371).

2020-10-21 14:52:17 3672

原创 mysql常见的死锁场景

mysql的锁类型根据锁的粒度分为:1、表锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2、页锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。很少使用。3、行锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。...

2020-10-15 15:36:17 1904

原创 一致性hash算法原理及php实现

在使用分布式存储时我们要考虑如何将数据均匀分布在多个节点库中?并且也要方便后期的数据查找。hash取模假设有N个存储节点,根据用户传入的key(key具有唯一性),index = hash(key) % N计算出将数据存储在哪一个节点上。一致性hash为什么不直接使用hash取模的方式,主要原因是:hash取模在容错性和扩展性上较差,如果新增一个节点,或者删除一个节点,那么所有的几点都要重新计算一遍。显然不符合实际实际生产环境。什么是一致性hash?通过一致性hash算法可以把key的has

2020-10-14 22:23:37 247

原创 nginx负载均衡如何保证会话一致性

nginx的负载均衡是依赖于upstream与反向代理实现的。nginx默认采用轮训选举Backend,如果是采用的session会话机制那么就会出现会话不一致的问题。upstream 语法upstream name { server domain_name|unix_socket[:port] [parameters];}# 参数说明domain|unix_socket: 域名|unix套字节parameters: weight:设置服务器权重,默认为1

2020-10-14 13:27:02 1311

原创 PHP常用的设计模式

php常用的设计模式:1、单例模式(构造方法私有化,对外提供实例化对象的静态调用方法)class Site{ public $siteName; public static $instance = null; private function __construct($siteName) { $this->siteName = $siteName; } // 实例化本类 public static function getI

2020-09-25 11:58:19 236

原创 php实现bitmap

Bitmap(1)bitmap原理所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。(2)应用范围Bitmap算法可用于处理大量数据的排序、查询以及去重。缓存系统中的 布隆过滤器 就是利用了bitmap算法实现。实际应用中一般超过亿级应用使用...

2020-09-14 16:29:25 739

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

关于缓存雪崩、穿透、击穿解决方案

2020-09-12 12:13:36 308

原创 web缓存之http缓存

访问一个网站,每次http请求都从通过网络服务器下载js/css/image等内容,不仅会导致页面加载时间变长,同时也增加了服务器的访问流量导致服务器压力增大。对于大型网站,通过http缓存可以快网站的响应速度,减小服务器的压力。这都得益于每个浏览器都支持http缓存功能,只要在发送http请求时,设置相应的请求头即可(包括缓存时间)。发起一次http请求,并观察header头信息:Request headersGET /static/admin/images/nginx.jpg HTTP/1.

2020-09-06 18:01:05 186

原创 php搭建mysql连接池

一直以来,php一直没有mysql连接池的概念,而在开发中大多数框架也是直接使用了长连接的方式。如Thinkphp就是使用过的长连接。对于并发较小的项目来说,长连接确实可以提高查询效率,php不用每次去与mysql服务器建立连接,只要某个php-cgi连接过mysql,那么本次访问结束后,php不会释放与mysql的连接。当下次请求过来的时候,php就可以复用之前的连接,从而消除了建立连接是的额外损耗。举个栗子:假如有一台mysql服务器MA允许的最大连接数为50。有一台php-fpm服务器PA,PA常

2020-08-08 14:47:27 3679 2

原创 如何保持mysql主从数据一致

对于mysql主从结构数据库如何保障数据一致性官方提供了“半同步插件”该插件默认不安装1、要使用半同步复制,必须满足以下要求:MySQL服务器支持动态加载插件的能力。要验证这一点,可以检查 have_dynamic_loading系统变量的值为YES。二进制发行版应支持动态加载。mysql> show variables like "%have_dynamic_loading%";+----------------------+-------+| Variable_name

2020-08-06 00:04:06 1438

原创 mysql主从服务器slave宕机后复制中断处理

昨天基于docker搭建了mysql的主从服务器。今天测试了一下宕机后,重新开启服务器master-slave是否可用。测试流程如下:1、直接关闭slave服务的container模拟服务器宕机docker stop my-app-mysql8-slave12、在master服务器的某个库中插入数据INSERT INTO `rbac`.`think_user`(`u_id`, `u_name`, `u_password`, `register_time`, `is_delete`, `statu

2020-08-04 23:35:05 782

原创 基于docker 搭建mysql8.0主从复制

如何使用docker搭建mysql8.0主从复制从而实现读写分离前言1、 docker的安装与mysql8.0镜像的打包这里不做详细介绍。以后有时间再出详细教程。安装好docker运行环境拉去mysql8镜像,我使用的是自己源码编译的mysql8.0。docker-hub地址如下docker pull gongxulei/centos-lnmp:mysql82、主从复制原理mysql的主从复制是基于bin-log实现的,因此需要开启bin-log配置,另外mysql8.0默认是开启bin-lo

2020-06-27 22:37:28 1220

原创 golang使用gomonkey和monkey来mock方法或者函数时报panic: permission denied [recovered]

问题:golang写单元测试中一般会用到monkey或者gomonkey来进行mock数据。在mac环境中会报如下错误:panic: permission denied [recovered]panic: permission denied解决方法1、下载工具cd `go env GOPATH`git clone https://github.com/eisenxp/macos-golink-wrapper.git2、重命名link重命名为original_linkmv `go env

2021-08-15 10:48:16 7621 10

原创 生产环境的php-fpm配置优化

关于php-fpm的配置优化主要优化一下三个方向:1、慢日志slowlog = log/$pool.log.slowrequest_slowlog_timeout = 5slowlog设置慢日志路径,request_slowlog_timeout设置满足慢日志记录的请求最大超时时间2、运行模式pm = static:始终保持一个固定数量的子进程,通过pm.max_children定义数量pm = staticpm.max_children = 30适用高并发场景,因为设置的为静态数量,

2021-04-05 23:57:46 278

原创 php-mongdb 连接无法释放问题

在使用php7的生产环境中遇到MongoDB连接数量飙升,遇到了连接释放不掉的问题,在编写代码时并未使用长连接,排查后得知,在php5.6版本使用的客户端为MongoClient,该客户端是支持在创建连接的时候传入persistent参数指定连接方式是长连接还是短链接。因此在php-fpm运行模式的情况下可以控制连接的释放。php7版本中推出了新的连接客户端MongoDB\Driver\Manager,而目前的主流框架中都是用了这个客户端,该客户端不再支持连接控制,驱动底层默认采用长连接的方式(可能是为了查

2021-04-05 18:30:51 863

原创 php运行模式

php的运行模式1、Web模块模式(Apache等Web服务器运行的模式) 2、CGI(通用网关接口/ Common Gateway Interface)3、FastCGI(常驻型CGI / Long-Live CGI)4、CLI(命令行运行 / Command Line Interface)

2021-03-10 21:10:24 97 1

原创 记录一次删除缓存导致的接口部分数据为空

前段时间接到个需求,要求现有的指数数据做到实时更新。目前相关接口都是等待缓存过期才能查到最新的数据,如果想做到实时更新,就要在生成指数后去触发删除缓存数据目前的项目使用了TP5框架,开始想的是使用框架自带的Cache类的Tag进行缓存的标记与删除,看过源码后发现TP5的tag实现并不是很理想,其把缓存key使用逗号分隔存在一个tag中,并发过程中,可能会出现tag中的key丢失的情况,最后还是计划通过给缓存加前缀,然后通过原生keys匹配到具体的缓存key列表,然后使用del方法删除缓存。为了在最小程度

2020-11-11 21:13:37 171

原创 redis分布式锁

在实际业务场景中,如果业务中并发并不是很高,只用了单机的redis,为了防止突发流量可以使用单机的分布式锁防止对db层的冲击。如果想获得较高的安全性,并且可以接受不同进程共同持有锁的情况发生(由于redis主从复制是异步的),那么可以考虑使用redis主从实现故障转移。这里简单说一下加锁过程中出现故障转移的场景:1、客户端A获取redis-master中的锁。2、在将密钥写入传输到slave之前,主机崩溃。3、slave晋升为master4、客户端B获取相同的锁,而该资源的锁已经被客户端A所持有。此

2020-10-17 18:40:27 91

原创 关于支付宝、微信支付开发中可能会与到的问题

支付宝支付要注意的地方支付宝支付中可能遇到下单时携带回到通知参数passback_params未使用urlencode,将导致支付时出现”订单信息无法识别,请联系卖家“的提示。经测试发现,pc支付下单如果携带passback_params参数,那么必须要进行urlencode处理。否则在支付时会遇到”订单信息无法识别,请联系卖家“的问题。而奇怪的是,app支付下单虽然官方文档给出的必须要urlencode处理,但是不使用urlencode处理也是可以正常支付,并且接收到通知参数。微信支付需要注意的地方

2020-10-14 14:16:14 595

原创 mysql常见问题

1、什么是索引,有哪些优点,缺点。—— 索引是帮助MySQL高效获取数据的数据结构。—— 优点:(1)提高数据查询效率减小数据库IO。(2)通过索引排序,降低CPU消耗。—— 缺点:(1)索引需要占用存储空间。(2)降低了表的更新速度,需要额外的维护索引信息。2、索引分类?—— 应用层:主键索引、普通索引,唯一索引,复合索引。—— 存储结构:B+Tree(适合范围查询)、Hash(适合=、in、<> 查询)。3、B+Tree有哪些优势?—— 除了叶子节点外,其他节点只存储ke

2020-08-22 20:55:18 126

原创 为什么http三次握手四次挥手

http协议属于OSI七层模型中的应用层协议。其主要是用于规范数据传输所遵循的格式标准。最终的连接建立与数据传输还是基于TCP/IP协议来完成。TCP的三次握手(连接建立的过程)1、客户端发送一个标记syn(synchronize)的报文给服务端2、服务端接收到含syn标记的报文后向客户端回复一个含有syn/ack(acknowledgement)的数据包给客户端。3、最后客户端在回传一个含ack标记的数据包给服务端。表示握手结束,连接建立完成。为什么是三次握手,而不是两次或者四次?由于tcp

2020-08-22 20:29:38 982

原创 mysql主从复制工作原理

关于mysql主从复制原理的官方文档说明MySQL复制功能是通过三个线程实现的,一个在主服务器上,两个在从服务器上:Binlog dump thread: 在slave连接master时,master创建了一个线程, 将二进制日志内容发送给slave。 这个线程可以在master上使用show processlist查看到,是一个标识为该Binlog Dump线程。Slave I/O thread: 当执行start slave在slave服务器上执行时,slave服务器创建一个I / O线程,该线

2020-06-30 23:25:34 246

原创 The newly created data directory /usr/local/mysql/data/ by --initialize is unusable. You can remove

已经是凌晨深夜,终于找到了问题。昨天晚上打算把自己源码编译的mysql8docker镜像搭建一下主从复制。我使用本地目录挂载到了mysql容器的data目录。然后使用/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data user=mysql 命令初始化了目录。my.cnf配置如下:[client]default-character-set=u

2020-06-27 01:46:28 8782

原创 windows环境下的PHP+selenium+Firefox实现自动登录抓取网站cookie等信息

前段时间公司开发了一个商城项目,需要商品数据,订单数据,以及带cookie操作的数据,需要登录某某妈妈后爬取数据,于是乎需要部署一个自动登录获取cookie的信息,于是采用了爬虫登录常用的selenium来实现。selenium一款实现自动化测试的插件,其包含了对浏览器的绝大数操作,具体可以去问度娘说的很详细。一下说一下实现的具体过程。1、第一步就是...

2018-05-26 17:36:32 4894

空空如也

空空如也

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

TA关注的人

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