原创 Redis 源碼簡潔剖析 08 - epoll select, poll, epoll 源碼分析 參考鏈接 Redis 源碼簡潔剖析系列

select, poll, epoll 源碼分析 參考鏈接 Redis 源碼簡潔剖析系列 select, poll, epoll 關於 select, poll, epoll,網絡 IO 演變發展過程和模型介紹 這篇文章講得很好,本文就

原创 Redis 源碼簡潔剖析 15 - AOF AOF 是什麼 AOF 持久化的實現 AOF 文件的載入和數據還原 AOF 重寫 實際例子 參考鏈接 Redis 源碼簡潔剖析系列

AOF 是什麼 AOF 持久化的實現 命令追加 AOF 文件的寫入和同步 AOF 文件的載入和數據還原 AOF 重寫 爲什麼需要重寫 什麼是重寫 如何重寫 AOF 後臺重寫 爲什麼需要後臺重寫 帶來的問題 AOF 重寫緩衝

原创 Redis 源碼簡潔剖析 14 - Redis 持久化 Redis 持久化方式 RDB AOF 參考鏈接 Redis 源碼簡潔剖析系列

Redis 持久化方式 RDB 優勢 劣勢 AOF 優勢 劣勢 Redis < 7.0 參考鏈接 Redis 源碼簡潔剖析系列 Redis 持久化方式 主要參考 Redis 官方文檔:Redis Persiste

原创 Redis 源碼簡潔剖析 16 - 客戶端 整體概述 客戶端屬性 客戶端的創建與關閉 參考鏈接 Redis 源碼簡潔剖析系列

整體概述 客戶端屬性 套接字描述符 標誌 輸入緩衝區 命名及命令參數 命令的實現函數 輸出緩衝區 客戶端的創建與關閉 創建普通客戶端 關閉普通客戶端 參考鏈接 Redis 源碼簡潔剖析系列 整體概述 Redis 一個服務

原创 Redis 源碼簡潔剖析 09 - Reactor 模型 Reactor 模型 事件驅動框架 Redis 如何實現 Reactor 模型 總結 參考鏈接 Redis 源碼簡潔剖析系列

Reactor 模型 事件驅動框架 Redis 如何實現 Reactor 模型 事件的數據結構:aeFileEvent 主循環:aeMain 函數 事件捕獲與分發:aeProcessEvents 函數 事件註冊:aeCreateFil

原创 Redis 源碼簡潔剖析 10 - aeEventLoop 及事件 aeEventLoop IO 事件處理 時間事件處理 參考鏈接 Redis 源碼簡潔剖析系列

aeEventLoop IO 事件處理 IO 事件創建 讀事件處理 寫事件處理 時間事件處理 時間事件定義 時間事件創建 時間事件回調函數 時間事件的觸發處理 參考鏈接 Redis 源碼簡潔剖析系列 aeEventLoo

原创 Redis 源碼簡潔剖析 13 - RDB 文件 RDB 是什麼 RDB 文件格式 編碼算法說明 實際例子 參考鏈接 Redis 源碼簡潔剖析系列

RDB 是什麼 RDB 文件格式 Header Body DB Selector AUX Fields Key-Value Footer 編碼算法說明 Length 編碼 String 編碼 Score 編碼 Val

原创 Redis 源碼簡潔剖析 12 - 一條命令的處理過程 命令的處理過程 命令讀取 命令解析 命令執行 結果返回 參考鏈接 Redis 源碼簡潔剖析系列

命令的處理過程 Redis server 和一個客戶端建立連接後,會在事件驅動框架中註冊可讀事件——客戶端的命令請求。命令處理對應 4 個階段: 命令讀取:對應 readQueryFromClient 函數 命令解析:對應 proce

原创 30分鐘帶你瞭解「消息中間件」Kafka、RocketMQ 消息中間件的應用場景 主流 MQ 框架及對比 各公司發展 Kafka 分佈式事務的應用場景 代碼、思維導圖筆記下載

消息中間件的應用場景 主流 MQ 框架及對比 說明 Kafka 優點 Kafka 缺點 RocketMQ Pulsar 發展趨勢 各公司發展 Kafka Kafka 是什麼? Kafka 術語 Kafka 如何持久化? Kaf

原创 深入分析 Java、Kotlin、Go 的線程和協程 前言 進程 線程 協程 Java、Kotlin、Go 的線程與協程 總結 參考資料 代碼

前言 協程是什麼 協程的好處 進程 進程是什麼 進程組成 進程特徵 線程 線程是什麼 線程組成 任務調度 進程與線程的區別 線程的實現模型 一對一模型 多對一模型 多對多模型 線程的“併發” 協程 協

原创 深入分析 Java、Kotlin、Go 的線程和協程 前言 進程 線程 協程 Java、Kotlin、Go 的線程與協程 總結 參考資料 代碼

前言 協程是什麼 協程的好處 進程 進程是什麼 進程組成 進程特徵 線程 線程是什麼 線程組成 任務調度 進程與線程的區別 線程的實現模型 一對一模型 多對一模型 多對多模型 線程的“併發” 協程 協

原创 最簡 Spring AOP 源碼分析! 前言 基本概念 猜測實現原理 調試代碼 使用說明 源碼深入分析 總結 代碼

前言 最近在研究 Spring 源碼,Spring 最核心的功能就是 IOC 容器和 AOP。本文定位是以最簡的方式,分析 Spring AOP 源碼。 基本概念 上面的思維導圖能夠概括了 Spring AOP,其最重要的是 Sprin

原创 深入分析 Java 樂觀鎖 前言 樂觀鎖是什麼? 樂觀鎖的實現 LongAdder vs AtomicLong 代碼

前言 激烈的鎖競爭,會造成線程阻塞掛起,導致系統的上下文切換,增加系統的性能開銷。那有沒有不阻塞線程,且保證線程安全的機制呢?——樂觀鎖。 樂觀鎖是什麼? 操作共享資源時,總是很樂觀,認爲自己可以成功。在操作失敗時(資源被其他線程佔用),

原创 Java Stream 源碼分析 前言 操作分類 源碼結構 操作疊加 並行處理 性能 參考文章

前言 Java 8 的 Stream 使得代碼更加簡潔易懂,本篇文章深入分析 Java Stream 的工作原理,並探討 Steam 的性能問題。 Java 8 集合中的 Stream 相當於高級版的 Iterator,它可以通過 Lam

原创 Java String 演進全解析 前言 下面的輸出結果是什麼? String 對象的實現方式 String 在 JVM 中是如何存儲的? 使用 String.intern 節省內存 公衆號

前言 String 是我們使用最頻繁的對象,使用不當會對內存、程序的性能造成影響,本篇文章全面介紹一下 Java 的 String 是如何演進的,以及使用 String 的注意事項。 下面的輸出結果是什麼? @Test public voi