原创 Java架構進階之Redis內存回收策略

1、背景 作爲時下熱門的存儲系統,Redis在系統扮演重要角色。不管是 session 存儲還是熱點數據的緩存,還是其他場景,都會用到 Redis。在生產環境我們偶爾會遇到 Redis 服務器內存不夠的情況,那對於這種情況 Red

原创 深入剖析HashMap應用原理

Hashing(散列法或哈希法)的概念 散列法(Hashing)是一種將字符組成的字符串轉換爲固定長度(一般是更短長度)的數值或索引值的方法,稱爲散列法,也叫哈希法。由於通過更短的哈希值比用原始值進行數據庫搜索更快,這種方法一般用

原创 redis源碼分析—基本數據結構

redis中使用的數據結構有: dict 字典,就是個哈希表,實現和HashMap類似,不做闡述;不同的是在哈希表resize()的時候是分步執行的,後續篇幅再說明。 sds 很多項目都對自己的字符串進行了封裝,作用類似於lev

原创 Java高併發網絡編程

一、OSI網絡七層模型 因特網是一個極爲複雜的網絡,分層有助於我們對網絡的理解 。分層也是一種標準,爲了使不同廠商的計算機能夠互相通信,以便在更大範圍內建立計算機網絡,有必要建立一個國際範圍的網絡體系結構標準。 文章分享,內容較

原创 Java高併發- 鎖的優化及 JVM 對鎖優化所做的努力

在高併發環境下,激烈的鎖競爭會導致程序的性能下降,所以我們有必要討論一下有關 鎖 的性能問題及注意事項。如:避免死鎖,減小鎖粒度,鎖分離等。 一、鎖優化 1.1 減小鎖持有時間 在鎖競爭過程中,單個線程對鎖的持有時間與系統性能有着

原创 消息中間件這麼多,到底應該如何選型?

消息隊列已經逐漸成爲企業應用系統內部通信的核心手段。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能。 當前使用較多的消息隊列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Met

原创 Java深入剖析之JVM

Java運行時數據區: Java虛擬機在執行Java程序的過程中會將其管理的內存劃分爲若干個不同的數據區域,這些區域有各自的用途、創建和銷燬的時間,有些區域隨虛擬機進程的啓動而存在,有些區域則是依賴用戶線程的啓動和結束來建立和銷燬

原创 Spring AOP實現Redis緩存數據庫查詢源碼

應用場景 我們希望能夠將數據庫查詢結果緩存到Redis中,這樣在第二次做同樣的查詢時便可以直接從redis取結果,從而減少數據庫讀寫次數。 需要解決的問題 操作緩存的代碼寫在哪?必須要做到與業務邏輯代碼完全分離。 如何避免髒讀?

原创 在 Java 中利用 redis 實現分佈式架構的全局唯一標識服務

獲取全局唯一標識的方法介紹 在一個IT系統中,獲取一個對象的唯一標識符是一個普遍的需求。在以前的單體應用中,如果數據庫是一個單數據庫的結構。通常可以利用數據庫的自增字段來獲取這個唯一標識。例如,在 Mysql 數據庫中,我們可以通

原创 redis源碼分析—集羣--哨兵模式

redis在啓動時,如果進程名是"redis-sentinel",或者參數中帶了"–sentinel",這時redis便以哨兵的方式運行。一個sentinel可以監控多個master。 sentinel的配置如下 // 當前Sen

原创 Java實現Redis的發佈訂閱

redis的應用場景實在太多了,現在介紹一下它的幾大特性之一 發佈訂閱(pub/sub)。 特性介紹:   什麼是redis的發佈訂閱(pub/sub)? Pub/Sub功能(means Publish, Subscrib

原创 2019大廠面試真題之消息中間件—kafka

kafka: 1.消息分類按不同類別,分成不同的Topic,Topic⼜拆分成多個 partition,每個partition均衡分散到不同的服務器(提⾼併發訪問的能⼒) 2.消費者按順序從partition中讀取,不⽀持隨機讀取

原创 Java NIO之tcp粘包拆包

一 ByteToMessageDecoder 1.1 實例 ByteToMessageDecoder,用於把一個byte流轉換成一個對象,實例: public class StringDecoder extends ByteToM

原创 Netty私有協議棧開發

幾個基本功能描述 消息協議定義,消息編解碼,連接認證,鏈路有效性校驗機制,鏈路的斷開重連機制。 主要設計 消息協議設計:消息頭+消息體。消息頭定義了基本協議字段定義,添加attachment方便擴展。Object編解碼使用Mars

原创 分佈式唯一ID服務架構

一、背景介紹 在大型互聯網應用中,隨着用戶數的增加;爲了提高應用的性能,我們經常需要對數據庫進行分庫分表操作。在單表時代我們可以完全依賴於數據庫的自增ID來唯一標識一個條數據。但是當我們對數據庫進行了分庫分表之後,就不能依賴於每個