原创 Mysql—Innodb引擎 索引

一、索引分類 索引對於數據庫而言,就像是目錄對於書籍,可以快速定位想要查找的信息,提高效率。而Innodb引擎更是使用索引來組織數據,Innodb引擎目前支持三種形式的索引,B+樹索引、全文索引、哈希索引。 B+樹索引是常用並且效率很高的

原创 ThreadLocal源碼功能解析

一、簡介 ThreadLocal是java中提供的一個意在處理多線程對於共享變量訪問操作衝突問題的一個工具,其實可以認爲是處理多線程併發問題的一個工具。我們知道java中的內存交互方式是java的JMM(java內存模型)模型所規範的,每

原创 Mysql—Innodb引擎 邏輯結構

一、Innodb引擎簡介 Innodb引擎是事務安全的Mysql存儲引擎,其設計上採用了類似於oracle的設計架構,該引擎存在於mysql發佈的任何的二進制版本之中,正是由於Innodb引擎的存在,使得Mysql更具有魅力。 從Mysq

原创 JUC-線程池源碼簡析

一、線程池介紹 Java5開始,在util下提供了一個包,叫做JUC(java.util.concurrent),裏面提供了關於多線程、併發的一些工具包。例如鎖、多線程等工具都在這個包中。 我們知道一個線程的創建、銷燬過程是會消耗系統性能

原创 Redis-集羣構建

1.背景分析 redis使用中遇到的瓶頸   我們日常在對於redis的使用中,經常會遇到一些問題   1、高可用問題,如何保證redis的持續高可用性。   2、容量問題,單實例redis內存無法無限擴充,達到32G後就進入了64位世界

原创 JUC-AQS框架解析

一、簡介 當我們談到併發的時候,就會想到java中juc包下的一系列的併發工具,例如Lock、CountDownLatch、CyclicBarrier以及Semphore等,當你使用這些併發工具的時候,就必需深刻理解AQS,因爲AQS是j

原创 Mysql—Innodb鎖介紹

一、鎖簡介 鎖這個詞是比較常見的,生活中我們使用鎖來保證一個房間或者一個資源的安全,因爲開鎖需要鑰匙,而鑰匙保存在我們手裏,其他人是無法正常獲取到的。程序中,當我們的程序需要多線程去訪問操作共享資源時,爲了保證一致性,我們需要使用鎖機制來

原创 Mysql—Innodb Buffer Pool

一、Innodb Buffer Pool簡介 我們知道Mysql是基於磁盤的永久性存儲的一個數據庫,但是磁盤的讀寫速度遠遠趕不上內存的速度,當數據庫訪問量級比較大時,頻繁的磁盤IO不僅速度慢,還有可能造成數據庫的崩潰。爲了緩解這一問題,通

原创 JUC-volatile關鍵字作用

一、前言 本文意在講解java中volatile關鍵字的作用以及原理,因爲該關鍵字可以說是JMM模型封裝底層原語而提供出來的API,他的實現涉及到cpu的指令以及線程內存與主存間的交互過程,因此本文會從cpu到緩存內存,再到線程以及JMM

原创 Redis-庫之數據結構

一、簡介 Redis數據庫裏邊的每一個鍵值對(key-value pair)都是由對象構成。其中,數據庫鍵總是一個字符串對象(sting object),而值則可能是字符串對象(string objec)、哈希對象(hash object

原创 JUC-BlockingQueue

一、簡介 BlockingQueue是juc包下提供的一種隊列工具,被稱作阻塞隊列,他的工作模式類似於生產者和消費者的工作過程。在juc的線程池中使用到,做爲存儲任務的隊列。內部使用了Lock鎖和Condition條件參數作爲阻塞功能實現

原创 JUC-Lock工具解析

一、簡介 在進行多線程編程的時候,考慮的最多的問題之一就是併發的問題,也就是多線程對於共享變量的操作問題。許多時候我們會藉助於鎖這個工具來控制多線程併發對於共享變量的操作,是一種犧牲時間的併發保障機制。 在java中關於同步工具,有自帶的

原创 JUC-併發工具(CountDownLatch\CycleBarrier\Semaphore)

一、簡介 本文主要講解併發編程中常用的三個工具,他們分別是CountDownLatch(閉鎖)、CycleBarrier(循環欄柵)、Semaphore(信號量),三個工具都是在JUC併發包下提供的多線程開發工具,各自有各自的使用場景,在

原创 ThreadLocal源碼分析

一、簡介 ThreadLocal是java中提供的一個意在處理多線程對於共享變量訪問操作衝突問題的一個工具,其實可以認爲是處理多線程併發問題的一個工具。我們知道java中的內存交互方式是java的JMM(java內存模型)模型所規範的,每

原创 Java-線程池源碼簡析

一、線程池介紹 Java5開始,在util下提供了一個包,叫做JUC(java.util.concurrent),裏面提供了關於多線程、併發的一些工具包。例如鎖、多線程等工具都在這個包中。 我們知道一個線程的創建、銷燬過程是會消耗系統性能