實戰Memcached快取系統(8)Memcached非同步實時讀寫問題的解決方案SAC
尊重知識,轉載請註明本文來自:程式設計藝術家Poechant的CSDN部落格 http://blog.csdn.net/poechant
《伺服器後端開發系列——《實戰Memcached記憶體快取系統》》系列博文:http://blog.csdn.net/poechant/article/category/1060687
在使用Memcached時,一般實時讀寫的場景並不多見。但多是Memcached寫入後,在一定時間後才會有讀操作。但是如果應用場景,是寫入後瞬間即會有讀操作呢?似乎沒有什麼特別之處,我們依然可以這樣寫:
注:此處使用的是spymemcached客戶端。
MemcachedClient cache = new MemcachedClient(cacheServerAddr);
cache.set("key", 3600, bigData);
return cache.get("key");
如此寫入快取後,如果立刻就有其他客戶端進行讀操作,則會讀取失敗,因為set是非同步操作(async),很可能仍還沒有寫入完。
一種可行的方法,是採用同步寫操作。常用的set方法沒有這種方式,需要採用遵守Memcached的CAS(Check And Set)協議的寫操作。而這種寫操作,一般是基於讀取後得到CAS ID(類似於SVN中的版本ID),根據這個CAS ID來保證寫入時,沒有和其他寫入操作產生“寫重複”衝突。因此,在我們現在所討論的場景中,可以如下使用CAS協議:
(1)初始寫入:寫一個簡單的初始值(set,非同步操作);
(2)獲取版本:使用非同步方式獲取CAS ID;
(3)同步寫入:以同步方式寫入資料,保證在讀取前,已經寫入結束。
MemcachedClient cache = new MemcachedClient(cacheServerAddr);
cache.set(“key”, 3600, "");
long casId = cache.asyncGets("key").get().getCas();
cache.cas("key", casid, bigData);
return cache.get("key");
以這種“Set-Asyncgets-Cas”方式的快取非同步實時讀寫問題的解決方案,我們稱之為“SAC”(你一定想到了什麼⋯⋯)。
尊重知識,轉載請註明本文來自:程式設計藝術家Poechant的CSDN部落格 http://blog.csdn.net/poechant
-
相關文章
- Rust編寫的Memcached快取替代品:memc.rsRust快取
- 輕量級 memcached快取代理 twemproxy實踐快取
- Linux系統中部署memcachedLinux
- 快取常見問題及解決方案快取
- 快取三大問題及解決方案快取
- MySQL讀寫分離及主從同步延時問題解決思路深入剖析-綜合元件環境實戰MySql主從同步元件
- Centos8 stream系統編譯安裝Memcached教程。CentOS編譯
- Shopify使用Memcached而不是Redis快取提升20%效能Redis快取
- redis快取相關問題及解決方案Redis快取
- Memcached實戰之複製----基於repcached的主從【轉】PCA
- 對比Memcached和Redis,誰才是適合你的快取?Redis快取
- memcached分散式原理與實現分散式
- 快取世界中的三大問題及解決方案快取
- Memcached
- Java 8 的日期與時間問題解決方案Java
- LNMP 分散式叢集(四):Memcached 快取伺服器的搭建LNMP分散式快取伺服器
- 快取過程存在的三大問題及解決方案快取
- vue SPA專案,瀏覽器和nginx反向代理快取問題解決實方案Vue瀏覽器Nginx快取
- PHP+Redis解決實際問題二:快取擊穿PHPRedis快取
- Elasticsearch 線上實戰問題及解決方案探討Elasticsearch
- ElasticSearch實戰系列十一: ElasticSearch錯誤問題解決方案Elasticsearch
- 快取與資料庫雙寫,不一致問題及解決方案快取資料庫
- 教你用Magent實現Memcached叢集
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- Ubuntu 18.04系統編譯安裝Memcached教程。Ubuntu編譯
- Ubuntu 20.04系統編譯安裝Memcached教程。Ubuntu編譯
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- 利用Nginx+tomcat實現memcached的資源接管NginxTomcat
- 一文讀懂快取穿透、快取擊穿、快取雪崩及其解決方案快取穿透
- Redis作為快取可能會出現的問題及解決方案Redis快取
- iOS Abort問題系統性解決方案iOS
- 快取穿透問題與解決方法快取穿透
- Dynamics 365 Online 匯入解決方案託管實體無法同步的問題
- 安裝 Memcached
- Memcached 原理剖析
- Memcached 協議協議
- NodeJS 實戰系列:DevOps 尚未解決的問題NodeJSdev
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- Linux系統Memcached效能最佳化詳細教程。Linux