Memcached筆記——(三)Memcached使用總結
為了將N個前端資料同步,通過Memcached完成資料打通,但帶來了一些新問題:
相關連結:
Memcached筆記——(一)安裝&常規錯誤&監控
Memcached筆記——(二)XMemcached&Spring整合
Memcached筆記——(三)Memcached使用總結
Memcached筆記——(四)應對高併發攻擊
說了這麼多,簡要總結如下:
關於使用XMemcached實現時,參考如下實現:
主要有以下幾點參考:
關於SET&ADD
快取命中率,通常認為:快取命中率低於95%的設計都是不合理的,存在設計缺陷的。
這是我線上上伺服器,經過優化後得到的最好成績!
相關連結:
Memcached筆記——(一)安裝&常規錯誤&監控
Memcached筆記——(二)XMemcached&Spring整合
Memcached筆記——(三)Memcached使用總結
Memcached筆記——(四)應對高併發攻擊
Memcached PPT參考
- 使用iBatis整合了Memcached,iBatis針對每臺server生成了唯一標識,導致同一份資料sql會產生不同的key,造成重複快取。——通過重寫iBatis部分原碼,終止了唯一標識的生成,同一個SQL產生同一個Key,同時對生成key做hash,控制長度,使得資料統一在Memcached。
- 為了迎合iBatis的架構,通過CacheModel模式,對快取資料分組管理。最初通過Map實現CacheModel,就是簡單的Key對應最終的Object。為了後臺運算元據時,前臺能及時響應,以CacheModel為基準點。後臺運算元據時,做Flush,清空對應的CacheModel,可以及時同步資料。但,由於前後臺Domain物件可能不一致,呼叫CacheModel(Map)反序列化時,發生ClassNotFonudException(CNF)。——將CacheModel的Map實現改為Set,CacheModel僅存需要Flush掉的key,Object按原有方式快取。
- 以前一直用EhCache,也很少會把List<List>這樣的重量級物件放進快取裡。即便如此,只要EhCache沒有拋異常,我們恐怕也無感知。這次改用Memcached,沒有注意到快取List過大,導致“Cannot cache data larger than 1MB memcached”,即快取物件體積不能超過1MB——使用Memcached資料壓縮,優化SQL,可以暫時維持。
相關連結:
Memcached筆記——(一)安裝&常規錯誤&監控
Memcached筆記——(二)XMemcached&Spring整合
Memcached筆記——(三)Memcached使用總結
Memcached筆記——(四)應對高併發攻擊
說了這麼多,簡要總結如下:
- Memcached的Key,要杜絕使用空格,且長度控制在250個字元。
- Memcached的Value,要控制體積,必須小於1MB,必要時進行使用壓縮。
- 失效時間,0為永久有效,最大值不得超過30天(2592000s),否則重新計算可能快取只有1秒
- Memcached僅支援LRU演算法,完全適用你的需要。
- 儘量不要將List這種重體積物件扔到Memcached中,傳輸、儲存都會產生瓶頸。
- 使用一致性雜湊演算法實現,提高多個Memcacehd Server利用率。
關於使用XMemcached實現時,參考如下實現:
- private MemcachedClientBuilder createMemcachedClientBuilder(
- Properties properties) {
- String addresses = properties.getProperty(ADDRESSES).trim();
- if (logger.isInfoEnabled()) {
- logger.info("Configure Properties:[addresses = " + addresses + "]");
- }
- MemcachedClientBuilder builder = new XMemcachedClientBuilder(
- AddrUtil.getAddresses(addresses));
- // 使用二進位制檔案
- builder.setCommandFactory(new BinaryCommandFactory());
- // 使用一致性雜湊演算法(Consistent Hash Strategy)
- builder.setSessionLocator(new KetamaMemcachedSessionLocator());
- // 使用序列化傳輸編碼
- builder.setTranscoder(new SerializingTranscoder());
- // 進行資料壓縮,大於1KB時進行壓縮
- builder.getTranscoder().setCompressionThreshold(1024);
- return builder;
- }
private MemcachedClientBuilder createMemcachedClientBuilder(
Properties properties) {
String addresses = properties.getProperty(ADDRESSES).trim();
if (logger.isInfoEnabled()) {
logger.info("Configure Properties:[addresses = " + addresses + "]");
}
MemcachedClientBuilder builder = new XMemcachedClientBuilder(
AddrUtil.getAddresses(addresses));
// 使用二進位制檔案
builder.setCommandFactory(new BinaryCommandFactory());
// 使用一致性雜湊演算法(Consistent Hash Strategy)
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
// 使用序列化傳輸編碼
builder.setTranscoder(new SerializingTranscoder());
// 進行資料壓縮,大於1KB時進行壓縮
builder.getTranscoder().setCompressionThreshold(1024);
return builder;
}
主要有以下幾點參考:
- 使用二進位制檔案模式
- 使用一致性雜湊演算法
- 使用序列化編碼
- 對資料進行壓縮
關於SET&ADD
- SET&ADD都屬於更新操作,都要先申請記憶體
- SET,會擦除這個鍵所對應的記憶體,不管原先是否有內容
- ADD,會先檢視這個鍵對應的記憶體是否有內容,如果有,則等待;若沒有,則獲取鎖,並更新記憶體。
快取命中率,通常認為:快取命中率低於95%的設計都是不合理的,存在設計缺陷的。
這是我線上上伺服器,經過優化後得到的最好成績!
相關連結:
Memcached筆記——(一)安裝&常規錯誤&監控
Memcached筆記——(二)XMemcached&Spring整合
Memcached筆記——(三)Memcached使用總結
Memcached筆記——(四)應對高併發攻擊
Memcached PPT參考
相關文章
- memcached 原始碼閱讀筆記原始碼筆記
- Memcached筆記——(二)XMemcached&Spring整合筆記Spring
- Memcached
- memcached全面剖析--2.理解memcached的記憶體儲存記憶體
- Memcached Client 使用手冊client
- Memcached筆記——(四)應對高併發攻擊筆記
- memcached安裝及.NET中的Memcached.ClientLibrary使用詳解client
- Memcached--基本使用命令
- 使用Memcached實現Session共享Session
- 安裝和使用memcached(windows)Windows
- Memcached筆記——(一)安裝&常規錯誤&監控筆記
- Memcached 協議協議
- Memcached 原理剖析
- 安裝 Memcached
- memcached 安裝
- memcached深度分析
- redis和memcachedRedis
- Memcached入門
- memcached安裝
- Memcached安裝與使用例項
- 使用memcache.php監控memcachedPHP
- 安裝和使用memcached(linux)Linux
- Memcached記憶體管理原始碼分析記憶體原始碼
- 最全總結 | 聊聊 Python 資料處理全家桶(Memcached篇)Python
- php開發memcachedPHP
- PHP memcached,(set,get)PHP
- Ubuntu 安裝 MemcachedUbuntu
- ubuntu安裝memcachedUbuntu
- Memcached::cas 詳解
- memcached 安裝配置
- 正確理解memcached,才能更好的使用
- 實戰Memcached快取系統(4)Memcached的CAS協議快取協議
- 被人遺忘的Memcached記憶體注射記憶體
- PHP memcached 利用遠端終端連線、操作memcached伺服器PHP伺服器
- 實戰Memcached快取系統(5)Memcached的CAS程式例項快取
- 實戰Memcached快取系統(3)Memcached配置引數初解快取
- Memcached常用命令及使用說明
- [轉]memcached學習系列