Spymemcached操作隊列分析

Spymemcached是一個Memcached(一個高性能內存對象緩存系統)的開源客戶端程序。其他MC客戶端還有xmemcached、Memcached Client for Java等。我們使用MC客戶端程序與MC服務端通信,實現set、get緩存的操作,MC支持的協議類型包括:ASCII 文本協議和二進制協議。

Spymemcached使用Java NIO來實現,並且是單線程的,也就是說在Spymemcached中只有一個主循環線程來處理各種IO事件(Connection、Read、Write)。對於業務線程來說,調用Spymemcached提供的API即可實現對服務端緩存的增、刪、查、改操作,很是便利。處理業務線程操作的具體過程如下:
1. Spymemcached將每一個業務線程的操作都封裝爲一個Operation對象,然後放入內部的inputQueue隊列中。
2. 在放入inputQueue的時候,調用selector.wakup()方法喚醒內部IO線程。
3. IO線程被喚醒後,會將inputQueue中所有的Operation拷貝到writeQueue中去,並且會立馬對writeQueue中的Operation做IO寫操作,而且會註冊讀事件,如果必要(還有可寫的Operation或者寫buf中還有數據)還會註冊寫事件。
4. 一旦MC服務端有數據返回,就會觸發讀事件,然後客戶端就會返回緩存對象給業務線程。

下圖描述了上述過程:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章