原创 expect安裝和測試

1.下載expect和tcl 下載地址:http://download.csdn.net/download/tobyaries/5754943 2.安裝expect tar -zxvf tcl8.4.11-src.tar.gz  tar

原创 阿里巴巴開源項目: 基於mysql數據庫binlog的增量訂閱&消費

背景 早期,阿里巴巴B2B公司因爲存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的數據庫同步業務,主要是基於trigger的方式獲取增量變更,不過從2010年開始,阿里系公司開始逐步的嘗試基於數據庫的日誌解析,獲取增

原创 nginx限流算法

nginx限流主要是limit_conn模塊和limit_req模塊 limit_conn 針對連接數限流,limit_req針對請求速率限流 limit_conn限流 http { limit_conn_zone $binary_rem

原创 redis性能優化

擴展讀性能 1.在使用短結構時,請確保壓縮列表的最大長度不會太大以至於影響性能 2.根據程序需要執行的查詢類型,選擇能夠爲這種查詢提供最好性能的結構 3.大對象放到redis之前,考慮對它進行壓縮以減少讀取和寫入對象需要的網絡帶寬。對比壓

原创 Linux中的EAGAIN含義

在Linux環境下開發經常會碰到很多錯誤(設置errno),其中EAGAIN是其中比較常見的一個錯誤(比如用在非阻塞操作中)。 從字面上來看,是提示再試一次。這個錯誤經常出現在當應用程序進行一些非阻塞(non-blocking)

原创 配置vim讀php源代碼

1.安裝ctags 下載源碼: ./configure make && make install 2.配置vim vi ~/.vimrc “===========================================

原创 在線修改MySQL大表的表結構

由於某個臨時需求,需要給在線MySQL的某個超過千萬的表增加一個字段。此表在設計之時完全按照需求實現,並沒有多餘的保留字段。 我們知道在MySQL中如果要執行ALTER TABLE操作,MySQL會通過製作原來表的一個臨時副本來工作。對

原创 libevent使用

1.安裝libevent 安裝libebent省略 2.使用libevent高性能io框架庫 #include <sys/signal.h> #include <event.h> void signal_cb(int fd, sho

原创 高流量站點NGINX與PHP-fpm配置優化

將TCP切換爲UNIX域套接字 UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的數據拷貝和上下文切換)。 但有一點需要牢記:僅運行在同一臺服務器上的程序可以訪問UNIX域套接字(顯然沒有網絡支持)。 u

原创 poll()函數詳解

poll提供的功能與select類似,不過在處理流設備時,它能夠提供額外的信息。  #include <poll.h> int poll(struct pollfd fd[], nfds_t nfds, int timeout);  

原创 php生命週期和Zend引擎

一切的開始: SAPI接口 SAPI(Server Application Programming Interface)指的是PHP具體應用的編程接口, 就像PC一樣,無論安裝哪些操作系統,只要滿足了PC的接口規範都可以在PC上正常運行,

原创 數據庫分表後,併發環境下,生成全局id生成的幾種方式

1.使用redis鎖機制 在 Redis 裏,所謂 SETNX,是「SET if Not eXists」的縮寫,也就是隻有不存在的時候才設置,可以利用它來實現鎖的效果,不過很多人沒有意識到 SETNX 有陷阱! 比如說:某個查詢數據庫的

原创 php更快的hugepage

PHP7剛剛發佈了RC4, 包含一些bug修復和一個我們最新的性能提升成果(NEWS), 那就是”HugePageFy PHP TEXT segment”, 通過啓用這個特性,PHP7會把自身的TEXT段(執行體)”挪“到Huagepa

原创 數據緩存的幾種方式

引入緩存可以提高性能,但是數據會存在兩份,一份在數據庫中,一份在緩存中,如果更新其中任何一份會引起數據的不一致,數據的完整性被破壞了,因此,同步數據庫和緩存的這兩份數據就非常重要。本文介紹常見的緩存更新的同步策略。 預留緩存Cache-

原创 用這四種套路更新緩存,你會少走很多彎路!

看到好些人在寫更新緩存數據代碼時,先刪除緩存,然後再更新數據庫,而後續的操作會把數據再裝載的緩存中。然而,這個是邏輯是錯誤的。試想,兩個併發操作,一個是更新操作,另一個是查詢操作,更新操作刪除緩存後,查詢操作沒有命中緩存,先把老數據讀出