原创 使用redis+lua腳本實現分佈式鎖

分佈式鎖的應用場景 當多個機器(多個進程)會對同一條數據進行修改時,並且要求這個修改是原子性的。這裏有兩個限定: 多個進程之間的競爭,意味着JDK自帶的鎖失效; 原子性修改,意味着數據是有狀態的,修改前後有依賴。 分佈式鎖

原创 Redis官方分佈式鎖的實現-Redlock實現原理

前文筆者介紹了目前市面上見的比較多的Redis+lua分佈式鎖的實現,大概有如下三個要點: set命令要用 setkey value px milliseconds nx;保證原子性 value要具有唯一性,釋放鎖時要驗證va

原创 Redis常見的集羣方案

除了耳熟能詳的Redis 3.0開發官方提供的Redis Cluster模式(http://www.redis.cn/topics/cluster-tutorial.html)外,筆者查詢了相關資料,記錄了一下Redis常見的各種

原创 高性能的異步處理框架Disruptor(一)——認識RingBuffer與Disruptor

Disruptor是什麼 Disruptor 基於線程內通信框架,用於線程裏共享數據。也是一個高性能的異步處理框架。 LMAX 創建Disruptor 作爲可靠消息架構的一部分並將它 設計成一種在不同組件中共享數據非常快的方法。

原创 高性能的異步處理框架Disruptor(二)——Disruptor對RingBuffer的讀寫策略

前文了解了Disruptor與RingBuffer的基礎知識後,接下來了解Disruptor對 ringbuffer的訪問控制策略。 Disruptor對RingBuffer的讀取策略 假設消費者(Consumer)是一個想從 R

原创 美團開源分佈式ID生成系統——Leaf源碼閱讀筆記(Leaf的號段模式)

Leaf 最早期需求是各個業務線的訂單ID生成需求。在美團早期,有的業務直接通過DB自增的方式生成ID,有的業務通過redis緩存來生成ID,也有的業務直接用UUID這種方式來生成ID。以上的方式各自有各自的問題,因此我們決定實現

原创 Mysql(InnoDB)的SQL加鎖分析

一、背景 工作經常遇到在編寫併發場景sql時考慮欠缺,造成過一些bug和sql死鎖。於是乎,筆者查閱了不少相關資料。 本文就MySQL/InnoDB的加鎖問題,展開較爲深入的分析與討論,主要是介紹一種思路,運用此思路,拿到任何一條

原创 Mysql 調優記: INNER JOIN查詢 Using temporary; Using filesort 問題優化

近期筆者在生產環境中發現一條執行非常慢的sql。大概時間爲5s左右,於是乎對改SQL場景進行EXPLAIN 分析,發現一個在執行過程中出現對“Using temporary; Using filesort ”。即在執行過程中產生了

原创 一致性hash算法 - consistent hashing

本來轉載於http://blog.csdn.net/sparkliang/article/details/5279393 consistent hashing 算法早在 1997 年就在論文 Consistent hashing

原创 二叉樹的鏈式存儲實現及遍歷

關於二叉樹鏈式實現,常見的爲如下兩種: 二叉鏈表存儲: 每個節點保留一個left,right域,指向左右孩子 三叉鏈表存儲: 每個節點保留一個left, right, parent域,指向左右孩子和父親 故對於每個二叉樹的

原创 二叉樹的順序存儲實現及遍歷

關於二叉樹的實現,常見的大概有三種實現方法: 順序存儲:採用數組來記錄二叉樹的所有節點 二叉鏈表存儲: 每個節點保留一個left,right域,指向左右孩子 三叉鏈表存儲: 每個節點保留一個left, right, paren

原创 CPU load過高產生的原因及排查

之前面試被問到,造成CPU load過高的原因有哪些?如何快速排查其原因? 開一貼,總結該相關知識 什麼是cpu load 值 top命令中顯示的load average即爲最近1分鐘、5分鐘和15分鐘的系統平均負載。 系統

原创 Java爲什麼要將String設置爲不可變對象?

在探討爲什麼要將String設置爲不可變對象前,先考慮不可變對象有什麼好處,在什麼情況下應該用。 相對於可變對象,不可變對象有很多優勢: 不可變對象可以提高對象的效率和安全性。如果你知道一個對象是不可變的,那麼需要拷貝這個對象

原创 Nginx+Tomcat集羣故障遷移實現

前幾天在面試阿里的時候面試官問這麼一個問題: 在Nginx+Tomcat的負載均衡場景中,如果某臺服務器意外宕機的時候,Nginx對於將要分發到這臺服務器的處理策略是怎麼樣的? 筆者當時這個問題沒有回答後,面試介紹後馬上做了實

原创 高性能的異步處理框架Disruptor(三)——Disruptor消費者的依賴關係

前文解釋了Disruptor的生產者,消費者的簡單工作流程。接下來學習當Disruptor的多個消費者存在依賴關係時,Disruptor對RingBuffer中的消息如何按照消費者的依賴關係來處理。 Disruptor系統的最初設