自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

企鹅漫步

关注数据库,分布式,缓存,系统架构

  • 博客(353)
  • 资源 (1)
  • 收藏
  • 关注

原创 libevent使用

1.安装libevent 安装libebent省略 2.使用libevent高性能io框架库#include <sys/signal.h>#include <event.h>void signal_cb(int fd, short event, void* argc){ struct event_base* base = (event_base*) argc; struct

2016-11-14 10:26:58 745

原创 Linux中的EAGAIN含义

在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起

2016-11-03 17:35:29 1801

转载 poll()函数详解

poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 #include <poll.h>int poll(struct pollfd fd[], nfds_t nfds, int timeout);  参数:   1)第一个参数:一个结构数组,struct pollfd结构如下:  struct pollfd{  int fd; //文件描述

2016-11-03 17:33:56 2575

原创 配置vim读php源代码

1.安装ctags 下载源码: ./configure make && make install 2.配置vim vi ~/.vimrc “========================================================================= “” DesCRiption: 适合自己使用的vimrc文件,for Linux/Windows,

2016-11-03 11:50:46 1039

转载 深入理解Python生成器(Generator)

我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占 我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,而且如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算

2016-10-28 14:39:15 861

转载 php生命周期和Zend引擎

一切的开始: SAPI接口SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了PC的接口规范都可以在PC上正常运行, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。通常,我们使用Apache或者Nginx这类Web服务器来测试PHP脚本

2016-10-24 17:10:31 693

原创 高流量站点NGINX与PHP-fpm配置优化

将TCP切换为UNIX域套接字UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。upstream backend { # UNIX domain sockets server unix:/var/run/fastcgi.sock;#

2016-10-18 17:54:10 608

转载 在线修改MySQL大表的表结构

由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段。此表在设计之时完全按照需求实现,并没有多余的保留字段。 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通过制作原来表的一个临时副本来工作。对于表结构的修改在副本上施行,然后将新表替换原始表,此时会产生锁表,用户可以从原始表读取数据,而用户的更新和写入操作都会被lock,待新表准备好后写入新表。 这对于

2016-10-14 15:19:04 1169

原创 mysql主从同步延迟分析

一、MySQL数据库主从同步延迟 要了解MySQL数据库主从同步延迟原理,我们先从MySQL的数据库主从复制原理说起:MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。Slave的IO Thread线程从主库中bin log中读取取日志。 Slave的SQL Thread线程将主库的DDL和DML操作事件在slave

2016-10-14 15:16:32 512

转载 什么是持续集成?持续交付?持续部署?

一、概念持续集成指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个。(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。 (2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个

2016-09-22 10:33:59 2451

转载 rsync 的核心算法

rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像是只对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。rsync利用由Andrew Tridgell发明的算法。这里不介绍其使用方法,只介绍其核心算

2016-09-07 16:52:44 342

原创 数据库分表后,并发环境下,生成全局id生成的几种方式

1.使用redis锁机制 在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成

2016-09-06 10:48:41 557

原创 linux使用flock文件锁解决crontab冲突问题

flock命令提供了文件锁的功能。命令参数如下:1 2 3 4 5 6 7 8 9 10 11 12 13 [hailong@vhost ~]$ flock -h flock (util-linux 2.13-pre7) Usage: flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] comman

2016-09-05 19:12:40 2091

原创 动态修改php的配置项

我们一般修改php的配置项都是在php.ini中修改。在php,ini中的修改会影响到所有使用php的程序。假如我想让修改只在某个域名下生效,该如何做呢?使用ini_set() 首先想到的可能是使用ini_set()方法在脚本中修改。但是这个只能修改作用域为PHP_INI_USER和PHP_INI_ALL的配置项。使用php_value 如果我访问www.1122.com下的url时,程序每次执

2016-09-05 19:10:36 1142

原创 几种流行的hash函数

A comprehensive collection of hash functions, a hash visualiser and some test results [see Mckenzie et al. Selecting a Hashing Algorithm, SP&E 20(2):209-224, Feb 1990] will be available someday. If you

2016-08-26 16:58:55 2112

原创 memcached hash一致性算法

<?php/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */class cons

2016-08-04 15:28:16 476

转载 用这四种套路更新缓存,你会少走很多弯路!

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多

2016-08-02 11:10:46 3467

转载 数据缓存的几种方式

引入缓存可以提高性能,但是数据会存在两份,一份在数据库中,一份在缓存中,如果更新其中任何一份会引起数据的不一致,数据的完整性被破坏了,因此,同步数据库和缓存的这两份数据就非常重要。本文介绍常见的缓存更新的同步策略。预留缓存Cache-aside  应用代码能够手工管理数据库和缓存中数据,应用逻辑会在访问数据库之前检查缓存,在数据库更新以后再更新缓存:上图中Cache upd

2016-07-25 12:07:01 8744

转载 让PHP7达到最高性能的几个Tips

1. Opcache记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:zend_extension=opcache.soopcache.enable=1opcache.enable_c

2016-07-22 15:32:19 1527

转载 php更快的hugepage

PHP7刚刚发布了RC4, 包含一些bug修复和一个我们最新的性能提升成果(NEWS), 那就是”HugePageFy PHP TEXT segment”, 通过启用这个特性,PHP7会把自身的TEXT段(执行体)”挪“到Huagepage上,之前的测试,我们能稳定的在Wordpress上看到2%~3%的QPS提升。关于Hugepage是啥,简单的说下就是默认的内存是以4KB分页的,而

2016-07-22 15:16:15 505

原创 php共享内存shmop初探

先上读写程序:<?php/** * SHMOP共享内存操作示例 * @author monkee **/$key = 0x4337b700;$size = 4096;$shmid = @shmop_open($key, 'c', 0644, $size);if($shmid === FALSE){ exit('shmop_open error!');}$data =

2016-07-21 16:48:57 4210 1

原创 sys和cc攻击防范分享

调整系统参数挡攻击第一个参数tcp_synack_retries = 0是关键,表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,不进行重试,加快回收“半连接”,不要耗光资源。不修改这个参数,模拟攻击,10秒后被攻击的80端口即无法服务,机器难以ssh登录; 用命令netstat -na |grep SYN_RECV检测“半连接”hold

2016-07-20 12:03:04 725

原创 expect安装和测试

1.下载expect和tcl下载地址:http://download.csdn.net/download/tobyaries/57549432.安装expecttar -zxvf tcl8.4.11-src.tar.gz tar -zxvf expect-5.43.0.tar.gz cd tcl8.4.11/unix ./configuremake && make

2016-07-13 15:37:32 2872

原创 redis的pipeline测试分析

先上程序:<?php$redis = new Redis(); $redis->connect('127.0.0.1', 6379);$starttime = explode(" ",microtime());$pipe = $redis->multi(Redis::PIPELINE); for ($i = 0; $i < 10000; $i++) { $pi

2016-07-11 16:45:08 1323

转载 防范sql注入

1、关于SQL注入互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低、成本低、收益大,颇受各层次的黑客们所青睐。一般来说,SQL注入的手法是利用各种机会将恶意SQL代码添加到程序参数中,并最终被服务器端执行,造成不良后果。例如,我们访问接口 http://imysql.com/user.php?userid=123 来根据userid获取用户

2016-07-01 15:24:33 524

转载 线上环境到底要不要开启query cache

Query Cache(查询缓存,以下简称QC)存储SELECT语句及其产生的数据结果,特别适用于:频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。QC有可能会从InnoDB Buffer Pool或者MyISAM key buffer里读取结果。由于QC需要缓存最新数据结果,因此表数据发生任何变化(INSERT、U

2016-06-30 16:13:17 909

转载 redis几种启动方式

Part I. 直接启动下载官网下载安装tar zxvf redis-2.8.9.tar.gzcd redis-2.8.9#直接make 编译make#可使用root用户执行`make install`,将可执行文件拷贝到/usr/local/bin目录下。这样就可以直接敲名字运行程序了。make install启动#加上`&`号使redis以后台

2016-06-28 17:39:45 453

原创 nginx限流算法

nginx限流主要是limit_conn模块和limit_req模块limit_conn 针对连接数限流,limit_req针对请求速率限流limit_conn限流http {limit_conn_zone $binary_remote_addr zone=addr:10mlimit_conn_log_level error;limit_conn_status 503;

2016-06-24 19:22:20 2004 1

原创 mysql数据类型与索引调优

varcha比固定长度占用更少存储空间,只占用需要空间,但是需要1字节保存长度更小通常更好简单就好,避免null确定类型使用enum代替字符串类型innnodb存储引擎事务性外键行级锁多版本按照主键聚集所有索引包含主键列优化的缓存:innodb把数据和内存缓存缓冲到缓存池 自动构建哈希索引未压缩索引:索引没有使用前缀压缩,阻塞auto_i

2016-06-16 11:22:03 567

原创 redis make test tcl 8.5 or newer in order to run the Redis test

[root@10-10-84-36 redis-3.0.7]# make testcd src && make testmake[1]: Entering directory `/data/programfiles/redis-3.0.7/src'You need tcl 8.5 or newer in order to run the Redis testwget http://

2016-05-03 21:36:20 1168

原创 redis性能优化

扩展读性能1.在使用短结构时,请确保压缩列表的最大长度不会太大以至于影响性能2.根据程序需要执行的查询类型,选择能够为这种查询提供最好性能的结构3.大对象放到redis之前,考虑对它进行压缩以减少读取和写入对象需要的网络带宽。对比压缩算法lz4,gzip和bzip24。使用pipeline5.增加从服务器6.增加主从复制树减少主服务器可用带宽消耗殆尽7.网络连接进行压缩

2016-05-03 21:13:48 2411

原创 python包管理

pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品。本文将详细说明 安装 pip 的方法和 使用 pip 的一些基本操作如安装、更新和卸载 python 包。distribute是setuptools的取代(Setuptools包后期不再维护了),pip是easy_install的取代。pip的安装需要setuptools 或者 dis

2016-04-12 21:27:27 649

原创 python类初探

直接上例子:import osimport stringclass C(object):   def __init__(self):       print "c class"class B(object):    def __init__(self):        print "this is super class"        de

2016-03-30 11:28:32 441

原创 ubuntu升级php版本

由于5.3版本不支持[]数组简单声明,故升级版本.apt-get install python-software-propertiesapt-get install -y ppa-purgeadd-apt-repository ppa:ondrej/php5-5.6apt-get updateapt-get install php5-common

2016-03-28 16:34:36 5883

转载 数据库同步中间件

背景早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部版本已经支持mysql和oracle部分版本的日志解析,当前的can

2016-03-23 11:57:29 3552

原创 并发模型归纳

市面上几种常用的并发模型:1.事件驱动select,poll,epollnginx高系能采用的就是epoll事件驱动模型2.多线程3.多进程4.多协程

2016-03-17 14:54:36 425

原创 并发过高导致库存买超情况

生产环境中遇到并发过高,导致库存买超的情况。可以通过以下几种情况解决:1.使用数据库锁机制防止并发方法1 select for update;update set stock = stock - x;insert into order_list(order_id) values (1);方法2 return = update set stock = stock -x whe

2016-01-14 14:42:47 2962 1

翻译 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费背景早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部使用的同步,已经支

2016-01-12 11:15:45 570

转载 SQL慢查询分析,原因及优化

问题描述一个用户反映线上一个SQL语句执行时间慢得无法接受。SQL语句看上去很简单(本文描述中修改了表名和字段名):SELECT count(*) FROM a JOIN b ON a.`S` = b.`S` WHERE a.`L` > '2014-03-30 00:55:00' AND a.`L` < '2014-03-30 01:00:00' ; 且查询需要的字段都建了索引

2015-03-05 15:22:52 2369

转载 一个例子与InnoDB索引的几个概念

1、一个简单的sql语句问题    假设当前我们有一个表记录用户信息,结构如下:    a)      表结构CREATE TABLE `u` (  `id` int(11) NOT NULL DEFAULT ‘0′,  `regdate` int(1) unsigned,  …..  PRIMARY KEY (`id`),  KEY

2015-03-05 15:18:15 524

ganglia系统监控扩展

ganglia各种系统监控扩展脚本.欢迎前来下载使用.

2014-05-23

空空如也

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

TA关注的人

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