原创 Golang 實現 Redis(6): 實現 pipeline 模式的 redis 客戶端

本文是使用 golang 實現 redis 系列的第六篇, 將介紹如何實現一個 Pipeline 模式的 Redis 客戶端。 本文的完整代碼在Github:Godis/redis/client 通常 TCP 客戶端的通信模式都是阻塞式的:

原创 LSM 樹詳解

LSM樹(Log Structured Merged Tree)的名字往往給人一個錯誤的印象, 實際上LSM樹並沒有嚴格的樹狀結構。 LSM 樹的思想是使用順序寫代替隨機寫來提高寫性能,與此同時會略微降低讀性能。 LSM 的高速寫入能力與讀

原创 Redis 內存壓縮原理

Redis 無疑是一個大量消耗內存的數據庫,因此 Redis 引入了一些設計巧妙的數據結構進行內存壓縮來減輕負擔。ziplist、quicklist 以及 intset 是其中最常用最重要的壓縮存儲結構。 瞭解編碼類型 Redis對外提供了

原创 Redis 應用實戰

爲了提高系統吞吐量,我們經常在業務架構中引入緩存層。 緩存通常使用 Redis / Memcached 等高性能內存緩存來實現, 本文以 Redis 爲例討論緩存應用中面臨的一些問題。 緩存穿透 集合式緩存 熱點數據緩存 使用鎖保證高一

原创 Golang 實現 Redis(5): 使用跳錶實現 SortedSet

本文是使用 golang 實現 redis 系列的第五篇, 將介紹如何使用跳錶實現有序集合(SortedSet)的相關功能。 跳錶(skiplist) 是 Redis 中 SortedSet 數據結構的底層實現, 跳錶優秀的範圍查找能力爲Z

原创 Golang 實現 Redis(4): AOF 持久化與AOF重寫

本文是使用 golang 實現 redis 系列的第四篇文章,將介紹如何使用 golang 實現 Append Only File 持久化及 AOF 文件重寫。 本文完整源代碼在作者GithubHDT3213/godis AOF 文件 AO

原创 Redis 緩存更新一致性

當執行寫操作後,需要保證從緩存讀取到的數據與數據庫中持久化的數據是一致的,因此需要對緩存進行更新。 因爲涉及到數據庫和緩存兩步操作,難以保證更新的原子性。 在設計更新策略時,我們需要考慮多個方面的問題: 對系統吞吐量的影響:比如更新緩存策

原创 Golang 實現 Redis(3): 實現內存數據庫

本文是 golang 實現 redis 系列的第三篇, 主要介紹如何實現內存KV數據庫。本文完整源代碼在作者Github: HDT3213/godis db.go 是內存數據庫的主要源文件,db.Exec 方法會從協議解析器中獲得命令參數並

原创 Linux 系統監控工具 atop

系統監控是運維工作中重要的一環,本文以 atop 工具爲例來介紹系統的重要監控項。 atop可以使用yum或apt包管理器進行安裝。atop man page 中詳細說明了 atop 中各監控項含義及atop命令用法。 如上圖所示, at

原创 實現 Redis 協議解析器

本文是 《用 Golang 實現一個 Redis》系列文章第二篇,本文將分別介紹Redis 通信協議 以及 協議解析器 的實現,若您對協議有所瞭解可以直接閱讀協議解析器部分。 Redis 通信協議 Redis 自 2.0 版本起使用了統一的

原创 Golang 編寫 Tcp 服務器

Golang 作爲廣泛用於服務端和雲計算領域的編程語言,tcp socket 是其中至關重要的功能。無論是 WEB 服務器還是各類中間件都離不開 tcp socket 的支持。 Echo 服務器 拆包與粘包 優雅關閉 與早期的每個線程持

原创 Redis 主從複製與哨兵

Redis 可以使用從屬服務器來實現讀寫分離提高吞吐量或在主服務器故障時接替主服務器以提高可用性。 每個 Redis 服務器實例都可以配置多個 slave 節點,slave 服務器也可以擁有次級 slave 節點, 可以組織成複雜的樹狀結構

原创 Redis 緩存應用實戰

爲了提高系統吞吐量,我們經常在業務架構中引入緩存層。 緩存通常使用 Redis / Memcached 等高性能內存緩存來實現, 本文以 Redis 爲例討論緩存應用中面臨的一些問題。 緩存更新一致性 先更新數據庫,再刪除緩存 先更新數

原创 Java 內存模型

Java 內存模型(Java Memory Model, JMM) 定義了 JVM 操作內存的行爲模式。 內存模型 指令重排序與 happens-before volatile 與 synchronized final 內存模型 JVM

原创 iptables 指南

iptables 是 Linux 內核集成的防火牆系統, 幾乎所有 Linux 發行版都會內置 iptables。 iptables 對進出的 IP 數據報進行處理和過濾, 過濾規則(rule)存儲在4個表(table)中, 表中的規則又組