日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

我們一起聊聊如何編寫一個 Java memcached 客戶端

來源: 責編: 時間:2024-07-03 10:08:28 119觀看
導讀非常喜歡讀開源項目,每次讀源碼,都會覺得自己修煉某種武學功法,期待修煉完成后,可以大殺四方。從2012年開始,陸續閱讀了 Cobar、Druid、Xmemcached、RocketMQ、MetaQ、Canal、ShardingJdbc、Sofa-Jraft 等開源項目。這篇文

非常喜歡讀開源項目,每次讀源碼,都會覺得自己修煉某種武學功法,期待修煉完成后,可以大殺四方。5wG28資訊網——每日最新資訊28at.com

從2012年開始,陸續閱讀了 Cobar、Druid、Xmemcached、RocketMQ、MetaQ、Canal、ShardingJdbc、Sofa-Jraft 等開源項目。5wG28資訊網——每日最新資訊28at.com

這篇文章,聊聊筆者閱讀 Xmemcached 源碼的心得體會,希望對大家有所幫助。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

1、Xmemcached 簡介

XMemcached 是一個 Java memcached 客戶端。5wG28資訊網——每日最新資訊28at.com

可能有的同學對 Memcached  并不熟悉,它和 Redis 一樣都是分布式內存緩存系統,用于加速動態 Web 應用程序,通過減少數據庫負載來提高性能 。5wG28資訊網——每日最新資訊28at.com

筆者當時服務于一家彩票公司,公司的核心系統訂單服務、調度中心、業務網關都使用 XMemcached 操作 memcached 。5wG28資訊網——每日最新資訊28at.com

基于一個非常樸素的好奇心:“如何用 Java 編寫一個緩存客戶端 ?”  筆者花了接近兩個月的時間將 Xmemcached 源碼瀏覽了一次。5wG28資訊網——每日最新資訊28at.com

瀏覽完源碼后,筆者有三點心得:5wG28資訊網——每日最新資訊28at.com

  • 設計模式
  • 網絡命令編解碼
  • 一致性哈希算法

2、設計模式

下圖是 Xmemcached 的使用范例:5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

我們可以清晰的發現流程分為三個部分 :5wG28資訊網——每日最新資訊28at.com

  • 客戶端構造器通過 servers 參數創建客戶端 ;
  • 通過客戶端調用 set、 get、 delete 方法 ;
  • 關閉客戶端。

MemcachedClient 接口定義了基本的緩存操作方法,比如 get、set、add 、cas 方法,而 XmemcachedClient 是 MemcachedClient 的實現類。5wG28資訊網——每日最新資訊28at.com

真正創建客戶端對象 XmemcachedClient 是通過構造器 XMemcachedClientBuilder 來實現的,這是一個非常典型的設計模式:Builder 模式 5wG28資訊網——每日最新資訊28at.com

Builder 模式是一種創建型設計模式,它允許你分步驟創建復雜對象。與直接構造對象不同,Builder 模式通過一個構建過程,逐步設置對象的不同部分,從而使對象的創建過程更加靈活和可控。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

我們在配置 構造器 XMemcachedClientBuilder 時,可以配置序列化對象、命令工廠、服務器列表等配置。5wG28資訊網——每日最新資訊28at.com

最后,調用構造器的 build 方法創建 MemcachedClient 對象,見下圖:5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

下面是 XMemcached 的主要類的 UML 圖:5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

3 網絡命令編解碼

在網絡編程中,一個重要的步驟是對發送的數據包進行編碼、對接受的數據包進行解碼5wG28資訊網——每日最新資訊28at.com

1)發送命令,進行編碼)5wG28資訊網——每日最新資訊28at.com

因為 Xmemcached 使用了自研的網絡通訊框架 ,每次發送命令時,都會調用命令的 encode 方法,將命令對象轉換成 IoBuffer 對象通過網絡發送。5wG28資訊網——每日最新資訊28at.com

下圖是  TextGetOneCommand 的 encode 方法 :5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

2)接收命令,進行解碼5wG28資訊網——每日最新資訊28at.com

當通訊框架收到響應字節數組時,可能收到的數據包并不完整,在收到數據包時,通過 decode 方法判斷數據包是否完整,當數據完整之后,將同步請求的 countDownLatch 計數減 1 。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

當筆者理解了網絡命令編解碼的技巧之后,后來用 Netty 寫了個分庫分表 proxy 輪子時,在設計 MySQL 命令包編解碼就使用了類似的技巧。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

4 一致性 Hash 算法

一致性 Hash 算法非常典型的應用就是緩存集群,它能夠很大程度上(注意不是完全解決)解決余數哈希的增加服務器導致緩存失效的問題。5wG28資訊網——每日最新資訊28at.com

我們需要進行如下步驟,使用一致性哈希(Consistent Hashing)將鍵值對映射到 memcached 服務器上。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

  • 計算 memcached 服務器(節點)的哈希值,并將其配置到 0~2^32 的圓上。
  • 用同樣的方法計算存儲數據的鍵的哈希值,并映射到圓上。
  • 從鍵的哈希值對應的位置開始順時針查找,將數據保存到找到的第一個服務器上。
  • 如果超過 2^32 仍然找不到服務器,就會保存到第一臺 memcached 服務器上。

下圖,我們新增一臺 memcached 服務器 node5 。5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

假如是我們使用余數分布式算法,保存鍵的服務器會發生很大變化從而影響緩存的命中率,但一致性哈希算法僅僅如圖中所示 node2 和 node 5 之間小部分黃色區域會有影響。5wG28資訊網——每日最新資訊28at.com

KetamaMemcachedSessionLocator.java 實現了一致性哈希算法, 使用的 Hash 算法是 KETAMA HASH 算法。5wG28資訊網——每日最新資訊28at.com

1、根據服務器列表生成 Hash 環 ,存儲容器 TreeMap5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

2、通過 key 得到 TreeMap 的 tailMap,然后找到 firstKey5wG28資訊網——每日最新資訊28at.com

圖片圖片5wG28資訊網——每日最新資訊28at.com

5 寫到最后

閱讀 Xmemcached 源碼,讓筆者的眼界大大提升,比如序列化方式、構造器 Builder 設計模式、一致性哈希算法、通訊命令編解碼、failover 設計等等。5wG28資訊網——每日最新資訊28at.com

比較可惜的是,筆者當時能力有限,并沒有完全理解自研網絡框架 yanf4j 。5wG28資訊網——每日最新資訊28at.com

盡管如此,當讀完 Xmemcached 源碼后,筆者對于“如何用 Java 編寫一個緩存客戶端 ?” 這個問題,腦海里已經有了概念,當筆者對于 Netty 更加熟悉之后,這個問題也就變得不是問題了。5wG28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-98411-0.html我們一起聊聊如何編寫一個 Java memcached 客戶端

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何正確使用上線部署,泳道、預發布到底如何理解?

下一篇: K8s 也有設計模式?你知道嗎?

標簽:
  • 熱門焦點
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現來得更好,正所謂“大丈夫生居
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 宜良县| 宁城县| 海宁市| 井陉县| 扶绥县| 阳信县| 辰溪县| 庆安县| 昌宁县| 福贡县| 凤山市| 清水县| 得荣县| 文化| 铁岭县| 庄河市| 南充市| 密山市| 东乌珠穆沁旗| 繁峙县| 大渡口区| 西和县| 合肥市| 灵丘县| 北辰区| 宜君县| 平果县| 吉水县| 平乡县| 乡城县| 佳木斯市| 敦煌市| 嘉义市| 虹口区| 绥中县| 田东县| 永嘉县| 外汇| 保亭| 三台县| 芜湖县|