- 博客(290)
- 资源 (17)
- 收藏
- 关注
原创 Redis分页
<?phpclass RedisPage { protected $_redis; protected $_redis_ip ; protected $_redis_port ; protected $_redis_db ; protected $_hash_prefix; /** * RedisPage constructor. * 初始化redis配置 */ public function __cons.
2022-05-11 11:36:17 1314
原创 服务器日志分析shell脚本
# 查看有多少个IP访问awk '{print $1}' access.log |sort|uniq|wc -l# 查看某一个页面被访问的次数grep "/index.php" access.log | wc -l# 查看每一个IP访问了多少个页面awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txtsort -n -t ' ' -k 2 log.txt # 配合sort进一步排序# 将每个IP.
2022-04-15 14:54:03 734
原创 PHP+Redis实现分页
废话少说,上代码吧<?phpclass RedisPage { protected $_redis; protected $_redis_ip ; protected $_redis_port ; protected $_redis_db ; protected $_hash_prefix; /** * RedisPage constructor. * 初始化redis配置 */ public func
2022-04-15 12:59:09 1342
原创 go实现投票并实时打印投票信息
package mainimport "fmt"var students []Studentvar flag bool = truetype Student struct { no int // 候选人编号 name string // 候选热姓名 count int //得票数}func initInfo(){ fmt.Println("请输入参加候选的人数:") sum := 0 fmt.Scanln(&sum) students = make([]Stude.
2022-01-20 23:06:53 508
原创 死锁案例 七
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 业务场景业务开发同学想同步数据,他们的逻辑是通过 update 更新操作,如果更新记录返回的 affect_rows为0,然后就调用 insert 语句进行插入初始化。如果插入失败则再进行更新操作,多个会话并发操作的情况下就出现死锁。2.2 环境说明MySQL 5.6.24 事务隔离
2020-10-09 09:41:03 517
原创 死锁案例 六
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 环境说明MySQL 5.6.24 事务隔离级别为 RR create table tx ( id int not null primary key auto_increment , c1 int not null default 0, c2...
2020-10-09 09:40:10 293
原创 为什么选择B+树作为数据库索引结构?
背景首先,来谈谈B树。为什么要使用B树?我们需要明白以下两个事实:【事实1】不同容量的存储器,访问速度差异悬殊。以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的。有个形象的比喻,若一次内存访问需要1秒,则一次外存访问需要1天。所以,现在的存储系统,都是分级组织的。最常用的数据尽可能放在更高层、更小的存储器中,只有在当前层找不到,才向更低层、更大的存储器中寻找。这也就解释了,当处理大规模数据的时候(指无法将数据一次性存入内存),算法的实际运行时间,往往取决于数据在不
2020-09-29 17:57:58 181
原创 TCP协议灵魂12问
TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位。001. 能不能说一说 TCP 和 UDP 的区别?首先概括一下基本的区别:TCP是一个面向连接的、可靠的、基于字节流的传输层协议。而UDP是一个面向无连接的传输层协议。(就这么简单,其它TCP的特性也就没有了)。具体来分析,和UDP相比,TCP有三大核心特性: 面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,...
2020-09-29 17:57:00 239
原创 Zookeeper的PHP实践
Apache Zookeeper是我最近遇到的最酷的技术,我是在研究Solr Cloud功能的时候发现的。Solr的分布式计算让我印象深刻。你只要开启一个新的实例就能自动在Solr Cloud中找到。它会将自己分派到某个分片中,并确定出自己是一个Leader(源)还是一个副本。不一会儿,你就可以在你的那些服务器上查询到了。即便某些服务器宕机了也可以继续工作。非常动态、聪明、酷。将运行多个应用程序作为一个逻辑程序并不是什么新玩意。事实上,我在几年前就已写过类似的软件。这种架构比较让人迷惑,使用起来也.
2020-09-29 17:55:07 179
原创 HTTPS 是什么?
HTTPS 是什么?答:HTTPS 不就是 HTTP 后面多加了一个 S 吗?对这里的 S 就是指 SSL/TLS(就是一种安全加密协议,想深入了解的同学可以自行百度),HTTPS 是在 HTTP 的基础上,利用 SSL/TLS 加密数据包。我们记住两个主要目的就行: 对数据加密 验证网站服务器身份 HTTPS 怎么对数据进行加密我们已经知道 HTTPS 第一个目的是给数据加密,对于数据加密,我们这里要谈到两种加密方式: 对称加密:所谓对称就是指两边一样..
2020-09-29 17:53:04 1563
原创 死锁案例 五
一、前言死锁其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文是源于生产过程中一个死锁案例。二、背景知识官方文档[1]中表述:"REPLACE is done like an INSERT if there is no collision on a unique key. Otherwise, an exclusive next-key lock is placed o
2020-09-17 08:49:07 227
原创 死锁案例 四
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文介绍一例三个并发insert 导致的死锁,根本原因还是在于insert 唯一键申请插入意向锁这个特殊的GAP锁。其实称呼插入意向锁 为 Insert Intention Gap Lock 更为合理。二、案例分析2.1 环境准备Percona server 5.6 RR模式 CREATE TABLE `..
2020-09-17 08:47:13 143
原创 死锁案例 三
一、前言死锁其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发朋友都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、背景知识2.1 insert 锁机制在分析死锁案例之前,我们先学习一下背景知识 insert 语句的加锁策略。我们先来看看官方定义:An insert intention lock is a type of gap lock set by INSERT operations prior to row in
2020-09-17 08:46:35 124
原创 死锁案例 二
一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA都会在工作过程中遇见。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。本文源于我们的生产案例:并发申请gap锁导致的死锁案例,与之前的 死锁案例一不同,本案例是因为RR模式下两个事务中的sql可以获取同一个gap锁,导致对方事务的insert 相互等待,导致死锁的。二 案例分析2.1测试环境准备Percona server 5.6.24 事务隔离级别为RR CREATE TABLE `t...
2020-09-17 08:45:59 137
原创 死锁案例 一
一、前言死锁,其实是一个很有意思也很有挑战的技术问题,大概每个 DBA 和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助。二、案例分析2.1 环境说明MySQL 5.6 事务隔离级别为 RR。 CREATE TABLE `ty` ( `id`int(11) NOT NULL AUTO_INCREMENT, `a`int(11) DEFAULT NULL, `b`int(11) D...
2020-09-17 08:45:12 225
原创 死锁 二
一、前言每个MySQL DBA和开发大概率都会遇到死锁问题,本文是自己对死锁相关知识总结,介绍死锁是什么,MySQL如何检测死锁/处理死锁,死锁的案例,以及如何避免死锁。二、死锁死锁是并发系统中常见的问题,同样也会出现在数据库系统的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现"死锁"。举例来说A 事务持有X1锁 ,申请X2锁,B 事务持有X2锁,申请X1 锁。A和B 事务持有锁并且申请对方持有的锁进入循环等待,.
2020-09-17 08:44:34 134
原创 死锁日志 一
一 前言 工欲善其事必先利其器,前面分析了很多死锁案例,并没有详细的介绍如何通过死锁日志来诊断死锁的成因。本文将介绍如何读懂死锁日志,尽可能的获取信息来辅助我们解决死锁问题。二 日志分析2.1 场景为了更好的学习死锁日志,我们需要提前了解死锁场景MySQL 5.6 事务隔离级别为RR CREATE TABLE `ty`( `id`int(11)NOTNULL AUTO_INCREMENT, `a`int(11)DEFAULT NULL, ...
2020-09-17 08:43:25 241
转载 MySQL是怎么处理并发操作的?
问题: 为什么需要锁? MySQL 中锁分类? 什么是事务? 事务的隔离级别 MySQL 是怎么实现事务机制的? MVCC 机制 总结 为什么需要锁?相信大家都比较熟悉电商系统中库存管理的场景,对于日常活动促销、618、双 11 等场景,会在规定时间内对商品进行促销活动,假设现在有一款 HHKB 机械键盘要参与促销活动,数据库中准备了 10 件,促销活动开始时,多位买家开始争抢,每卖出一件商品,库存减 1,直到卖完,那么怎么能保证商品
2020-08-29 11:20:17 1175
原创 PHP-FPM进程模型
本文将介绍以下内容: PHP-FPM进程管理方式介绍 PHP-FPM如何与Nginx等Web服务器进行通信 先说一下PHP-FPM的进程模型,PHP-FPM采用的是Master/Worker进程模型。当PHP-FPM启动时,会读取配置文件,然后创建一个Master进程和若干个Worker进程(具体是几个Worker进程是由php-fpm.conf中配置的个数决定)。Worker进程是由Master进程fork出来的。Master进程和Worker进程的作用: Mas..
2020-08-29 11:17:19 454
原创 python 实现简单的五子棋游戏
# -*- coding:utf-8 -*-# @Time: 2017/8/29 0029 10:14# @Author: assasin# @Email: assasin0308@sina.comfrom tkinter import *import mathclass chessBoard(): def __init__(self): # 创建一个tk对象,窗口 self.window = Tk() # 窗口名称 .
2020-08-29 11:15:43 465
转载 Kafka系列10:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(下)
前言在今天文章开始之前,想和粉丝朋友们先分享一个好消息,作者坚持以原创的态度去努力写好每一篇文章,同时得到了一小部分粉丝朋友们的认可和 InfoQ 写作平台的支持。在此非常感谢粉丝朋友的支持,同时也非常感谢 InfoQ 小编的认可。接下来我会继续努力,不忘初心,用心写好每一篇文章。另外最近忙着搬家和工作的事情,导致没有多余的时间来更文,希望朋友们能够多多包涵。好了,今天我们我们来继续分析 Kafka 的常见面试题。文章概览 Kafka 的延迟队列你有了解吗? Kafka 的幂等性
2020-08-22 10:29:37 151
转载 Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)
前言在本文开始之前,作者一直有个疑惑,就是面试题是只写写问题和答案就草草了事,还是应该深入分析一下其背后发生的一些原理。和朋友探讨以后作者还是决定采用后者的方式,因为我认为不仅要做到知其一,更要知其二,所以我们就用讲解原理的方式来看看 Kafka 常见的面试题吧。另外避免文章过长,我打算接下来使用几篇文章来详解每道题背后的原理。好了废话有点多,直接开干。文章概览 kafka 如何保证数据的可靠性和一致性? kafka 为什么那么快? Kafka 中的消息是否会丢失和重复消费
2020-08-22 10:29:28 184
转载 Kafka系列8:一网打尽常用脚本及配置,宜收藏落灰!
前言通过前面 7 篇文章的介绍,小伙伴们应该对 Kafka 运行工作原理有一个相对比较清晰的认识了。为了提高平时的工作效率,帮助我们快速定位一些线上问题,比如查看部分 Partition 堆积机器 IP 等操作,这篇文章总结了一些平时常用到的一些 Kafka 命令及常用配置,方便日后查阅(该文章中提到的相关配置会持续更新)。文章概览 常用脚本及命令总结。 常用配置及说明。 常用命令总结一.kafka-topic.sh脚本相关常用命令,主要操作 Topic。 创建名字..
2020-08-22 10:29:20 800
转载 Kafka系列第7篇:你必须要知道集群内部工作原理的一些事!
前言上篇文章讲到了消息在 Partition 上的存储形式,本来准备接着来聊聊生产中的一些使用方式,想了想还有些很重要的工作组件原理没有讲清楚,比如一个 Topic 由 N 个 Partition 组成,那么这些 Partition 是如何均匀的分布在不同的 Broker 上?再比如当一个 Broker 宕机后,其上负责读写请求的主 Partition 无法正常访问,如何让从 Partition 转变成主 Partition 来继续提供正常的读写服务?想要解决这些问题,就必须先要了解一下 Kafka 集
2020-08-22 10:29:11 202
转载 Kafka系列第6篇:消息是如何在服务端存储与读取的,你真的知道吗?
前言经过前 5 篇文章的介绍,估么着小伙伴们已经对消息生产和消费的流程应该有一个比较清晰的认识了。当然小伙伴们肯定也比较好奇,Kafka 能够处理千万级消息,那它的消息是如何在 Partition 上存储的呢?今天这篇文章就来为大家揭秘消息是如何存储的。本文主要从消息的逻辑存储和物理存储两个角度来介绍其实现原理。文章概览 Partition、Replica、Log 和 LogSegment 的关系。 写入消息流程分析。 消费消息及副本同步流程分析。 Partition、
2020-08-22 10:29:00 128
转载 Kafka系列第4篇:消息发送时,网络“偷偷”帮忙做的那点事儿
前言上篇文章讲述了消息从生产到写入到 Broker 的 partition 上背后发生的故事,并提出了消息发送的网络模型的问题。本篇文章我们来尝试揭开其背后的神秘面纱,耐心看完你一定会有所收获。文章概览 Sender 线程的建连准备阶段和发送网络请求两阶段。 Selector 选择器处理网络请求过程。 Sender 线程的两阶段上篇文章结尾提到了三个重要的方法,分别是 ready()、send()、poll()。其中 ready()和 send()可以理解为第一阶段,即建连准
2020-08-22 10:28:41 110
转载 Kafka第3篇之一条消息如何被存储到Broker上
本文我们从以下 4 个方面来探讨下一条消息如何被准确的发送到 Broker 的 partition 上。1. 客户端组件2. 客户端缓存存储模型3. 确定消息的 partition 位置4. 发送线程的工作原理客户端组件 KafkaProducer: KafkaProducer 是一个生产者客户端的进程,通过该对象启动生产者来发送消息。 RecordAccumulator: RecordAccumulator 是一个记录收集器,用于收集客户端发送的消息,并将收集到的消
2020-08-22 10:28:22 141
转载 Kafka系列文章之安装测试-第2篇
上篇文章讲解了 Kafka 的基础概念和架构,了解了基本概念之后,必须得实践一波了,所谓“实践才是检验真理的唯一办法”,后续系列关于 Kafka 的文章都以 kafka_2.11-0.9.0.0 为例;另外为了让大家快速入门,本文只提供单机版的安装实战教程,如果有想尝试集群方案的,后面在出一篇集群安装的教程,废话不多说了,直接开干。安装1. 下载版本号:kafka_2.11-0.9.0.0下载地址:http://kafka.apache.org/downloads2. 安装# 安装
2020-08-19 19:07:23 124
翻译 Kafka是什么-第一篇
前言如果有幸目睹过系统从零到一的演变过程,大家估计都会有一种感叹,就是随着业务复杂度和流量的不断上升,系统变得越来越难以维护,面对高额的维护成本,攻城师们不得不对现有架构进行改造升级,以便使得系统更适合当下业务的发展。说到架构改造升级,那到底该怎么改造呢?从哪里入手比较合适呢?这是一个比较大的话题,一两句话没办法讲述清楚,但是有一个出发点肯定是没有错的,就是为了更好的适应业务的发展需要进行必要的改造。假设几个场景,场景一:用户 A 刷了微博,可能对某类博主比较感兴趣,为了让用户 A 看到更多可能
2020-08-19 19:06:38 147
转载 Redis系列(八):缓存到底该如何做到高可用?
什么情况会导致缓存不可用? 单点问题: 什么是单点问题呢?就是我们在使用缓存时,有时候由于 QPS、内存容量只需要一个端口(此处的一个端口是指一主一从)就可以扛住所有读写请求时,比如写 QPS 5k,读 QPS 30k,内存 5G;根据这个数据规模,DBA 在部署资源时会选择只部署一个节点。当缓存资源由于某些情况导致服务器宕机或服务不可用时,由于只部署了一个端口,从而导致当前整个应用服务不可用(这种情况之前在实际生产环境中真实发生过,直接炸裂),这就是所谓的单点问题;其实在分布式架构中,为了做.
2020-08-19 19:04:46 163
转载 Redis系列(七):缓存只是读写回种这么简单吗?
前面利用 6 篇文章讲述了 Redis 相关的基础知识,相信小伙伴们对 Redis 已经有了一个比较深入的认识和理解了;本文来讲讲实际生产环境中 Redis 作为常用缓存组件是怎么和 DB(关系型数据库,比如 MySQL)配合使用的。看到这里可能有些朋友会内心肯定会淡淡的说上一句:写操作先更新 DB,然后在更新缓存,读操作先读缓存,如果没有读 DB 回种缓存,然后返回结果不就完事了么,这有什么好讲的?只要你有这样的疑问,那么请你一定认真看完本文,因为缓存读写策略远不止你想的那么简单,下面我们就来分析
2020-08-19 19:03:57 297
转载 Redis系列(六):Redis线程模型
最近有朋友说,能不能写一篇关于 Redis 线程模型的文章,面试被问到不会导致比较尴尬;今天就来给安排上。Redis 事件是什么?不是讲线程模型吗?和事件有什么关系?实际上 Redis 是一个事件驱动程序;大白话理解一下:就是通过事件的方式来运行 Redis 的。比如客户端向服务端发起一个 get 请求,在做好了建连、发送请求、响应请求、关闭连接等准备操作后,就触发了一个事件。所以在了解线程模型之前,先来看看事件。Redis 的事件分为两种,分别是文件事件和时间事件两种。什么是文件事件
2020-08-19 19:02:47 196
转载 Redis系列(五): Redis 集群搭建!
前言上篇文章我们介绍了 Redis 集群的工作原理机制,本文我们就来手动搭建一个 Redis 集群玩玩。强烈建议大家在开始本篇文章之前先看看上篇文章的介绍,这样对集群的安装会更加清楚一些。Redis 集群工作原理环境及版本说明 环境:MacOS 10.14.6 Redis 版本:Redis-4.0.10 最终目标 集群最终会有 6 个节点,3 主 3 从 7000 - 7002 三个节点为主节点 7003 - 7003 三个节点为从节点 700
2020-08-19 19:02:05 142
转载 Redis系列(四):Redis集群工作原理
前言插播一个小插曲,本来文章已经写好准备发布了,手贱清理了缓存导致文本内容全部丢失,以至于重新写稿。借此提醒广大粉丝朋友,平时一定要养成备份的好习惯,谨防出现博主这种愚蠢的行为。上篇文章讲解了缓存剔除的流程,以及 RDB 文件和 AOF 文件的原理介绍,本文我们来讲讲数据复制和集群工作的原理。目录 主从数据同步原理分析。 Redis 集群工作原理剖析。 集群槽指派机制。 集群服务自动检测 & 故障转移恢复操作。 主从数据同步原理分析主从数据同步
2020-08-19 19:00:37 305 1
转载 Redis系列(三):缓存过期该如何剔除?RDB和AOF又是什么?
前言相信很多朋友和我一样,平时工作中经常用到 Redis 的过期特性,还有通过 RDB 和 AOF 文件恢复数据,但是它们是如何工作的,本文就来介绍一下;通过了解底层实现原理,从而更好的整体把控系统的正常运行。目录 Redis 的缓存过期策略 RDB 的实现原理 AOF 的实现原理 Redis 的缓存过期策略常见的缓存过期策略大概有如下几种: 定时剔除策略 定期剔除策略 惰性剔除策略 定时剔除策略定时剔除是指在 Redis 后台启动
2020-08-19 18:59:39 317
转载 Redis系列之扫盲篇(一)
目录 Redis 是什么? Redis 安装。 基础命令扫盲。 Redis 是什么?Redis 是一款由 C 语言编写的、分布式的、高性能的、非关系型数据库,其拥有超高的吞吐量(每秒 10w,我司实际使用场景中单端口读请求最高 8w,写请求 5w,具体得看实际使用场景和机器性能),但由于其基于内存操作的,内存相对比较昂贵的,所以一般只有在并发相对比较高且存储要求相对较小的场景中被广泛使用(如果有钱一般可以不用考虑内存的事情,哈哈)。想说一句多余的话,为什么要学习 Red
2020-08-19 18:58:30 125
转载 Redis系列(二): 集合底层实现原理
目录 SDS 的设计到底有多牛逼。 List、Set、Sorted Set、Hash 底层实现原理 SDS 的设计到底有多牛逼Redis 使用 C 语言编写,但是并没有直接使用 C 语言自带的字符串,而是使用了 SDS 来管理字符串。接下来就来探讨下为什么 Redis 使用了 SDS 来管理字符串。SDS 全称 Simple Dynamic String,即简单动态字符串。SDS 组成部分如下: free:表示 buf 中的空闲的空间大小,图左空闲空间为 0,图右空闲空
2020-08-19 18:57:15 701
原创 性能测试之redis集群监控环境搭建:prometheus + redis_exporter + grafana
搭建redis集群1、环境操作系统:centos7.4redis版本:redis-5.0.4说明:一台云服务器(云服务器抢购地址)模拟6个redis节点,3个master,3个slaveredis安装:https://www.cnblogs.com/uncleyong/p/9882843.html2、创建集群节点目录mkdir /usr/local/redis_clustercd /usr/local/redis_cluster/mkdir -p 7001/da.
2020-07-06 16:39:16 1700
翻译 使用Xenon实现MySQL高可用集群
使用Xenon实现MySQL高可用集群1、Xenon 介绍https://github.com/radondb/xenon#VIP就是对外提供服务的IP,比如jdbc配置就是写这个VIPxenon 架构介绍,每个MySQL 节点安装了一个agent ,agent的作用:ping 一下本来MySQL是否存活,然后把本地的gtid 获取出来,写入到local index ,看各节点的local index的gtid 谁大,谁大谁做作为主库。每个agent 都有一个心跳信息,...
2020-06-23 19:03:54 3052 1
原创 php或python使用ftp,sftp实现上传文件至远程服务器
1. ftp方式,必须开放21端口 yum install vsftp -y 即可传到/home/xxxx目录$fp = fopen ($localfile, "r");// $arr_ip = gethostbyname(www.111cn.net);$arr_ip = '192.168.1.115';// echo $arr_ip;$ftp = "ftp://".$arr_ip.'/home/assasin/test/'.$localfile; $ch = curl_init();c.
2020-06-05 10:40:04 672
Lamp 环境搭建 (centos7 php 7.2 + apache 2.4 + Mariadb 10.2)
2018-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人