1. 程式人生 > >go gomemcache包原始碼分析

go gomemcache包原始碼分析

因為beego中的cache模組中的子模組memcached引用了這個包,所以也對這包的原始碼進行分析了下。花了一定的時間編寫整理這篇部落格,這個包一共兩個檔案,原始碼檔案
關於memcache學習,可以到http://www.runoob.com/memcached/memcached-tutorial.html這邊教程學習

1)func New(server ...string) *Client
用法:
mc := memcache.New("127.0.0.1:11211")

主要可以分為以下步驟:
1、傳入一個合法的memcached伺服器地址資訊
2、定義變數和賦值

New方法流程圖如下,點選下載


image.png

2)func (c Client) Add(item Item) error
作用:
mc := memcache.New("127.0.0.1:11211")
mc.Add(&memcache.Item{Key:"data",Value:[]byte("你好!")})

主要可以分為以下步驟:
1、選擇一個memcache伺服器並獲取連線
2、傳送資料到memcached伺服器
3、接收memcached資訊和處理連線
Add方法流程圖如下,點選下載
image.png

3)func (c Client) Set(item Item) error
用法:
mc := memcache.New("127.0.0.1:11211")
mc.Set(&memcache.Item{Key:"data",Value:[]byte("你好!")})

主要分為以下步驟:
1、選擇一個memcached伺服器並進行連線
2、向連線的那個memcached伺服器傳送資料並處理相關內容
3、連線處理(回收或釋放)
Set方法流程圖如下,點選下載
image.png

4)func (c Client) Get(key string) (item Item, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
i, err := mc.Get("data")
fmt.Println(i, err)

主要可分為三個步驟
1:獲取tcp連線
2:傳送資料到memcached
3:處理memcached返回訊息和tcp連線處理(放入回收池或釋放)
Get方法流程圖如下,

點選下載
image.png

5)func (c Client) GetMulti(keys []string) (map[string]Item, error)
用法:
mc := memcache.New("127.0.0.1:11211")
items, err := mc.GetMulti([]string{"data1","data2","data3"})

主要可分為三個步驟
1:獲取tcp連線
2:傳送資料到memcached
3:處理memcached返回訊息和tcp連線處理(放入回收池或釋放)
GetMulti方法流程圖如下,點選下載
image.png

6)func (c *Client) Increment(key string, delta uint64) (newValue uint64, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
newVal, err := mc.Increment("test", 2)
fmt.Println(newVal, err)

作用:將原來鍵的值加上指定數,可分為以下兩種情況:
1、如果原來的是一個數字,則加上指定數,返回修改後的值和nil
2、如果原來的不是一個數,則返回0和報錯資訊

內部執行步驟:
1、連線memcached伺服器
2、傳送資料到memcached伺服器
3、斷開連線,對連線進行回收或釋放
Delete方法流程圖如下,點選下載
image.png

7)func (c *Client) Decrement(key string, delta uint64) (newValue uint64, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
newVal, err := mc.Decrement("test", 2)
fmt.Println(newVal, err)

作用:將原來鍵的值減去指定數,可分為以下兩種情況:
1、如果原來的是一個數字,則減去指定數,返回修改後的值和nil
2、如果原來的不是一個數,則返回0和報錯資訊
Decrement方法流程圖如下,點選下載
image.png

8)func (c Client) CompareAndSwap(item Item) error
用法:
mc := memcache.New("127.0.0.1:11211")
mc.CompareAndSwap(&memcache.Item{Key:"data",

Value:[]byte("你好!")})

封裝發給memcached伺服器的命令是:cas data 0 0 9 0
主要分為以下步驟:
1、選擇一個memcached伺服器地址並進行連線
2、向memcached伺服器傳送資料和處理伺服器返回的資訊
3、連線結束處理(回收或釋放)
CompareAndSwap方法流程圖如下,[點選下載]
(https://github.com/laijinhang/go-gomemcache-study/blob/master/CompareAndSwap方法.odg)
image.png

9)func (c *Client) FlushAll() error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.FlushAll()

用於清理快取中的所有 key=>value(鍵=>值) 對

主要可以分為以下步驟:
1、往每個memcached伺服器傳送資料和接收處理memcached資訊
2、和處理連線
FlushAll方法流程圖如下,點選下載
image.png

10)func (c *Client) Replace() error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Replace()
傳送replace命令到mecmached伺服器,該命令用於替換已存在的
key(鍵)的value(資料值)。
如果 key 不存在,則替換失敗,並且您將獲得響應 NOT_STORED。

主要可以分為以下步驟:
1、往每個memcached伺服器傳送資料和接收處理memcached資訊
2、和處理連線
Replace方法流程圖如下,點選下載
image.png

11)func (c *Client) Touch(key string, seconds int32) (err error)
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Touch("data", 120)
傳送touch命令到mecmached伺服器,如果key不存在,則會返回錯誤,
如果key存在,則會在設定的時間後自動刪除。

主要可以分為以下步驟:
1、獲取伺服器地址操作
2、往每個memcached伺服器傳送資料和接收處理memcached資訊
3、連線處理(回收或釋放)
Touch方法流程圖如下,點選下載
image.png

12)func (c *Client) Delete(key string) error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Delete("test")

將原有key對應的內容刪除

主要可以分為以下步驟:
1、獲取連線
2、傳送資料到memcached伺服器
3、接收memcached資訊和處理連線
Delete方法流程圖如下,點選下載
image.png

13)func (c *Client) DeleteAll() error

用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.DeleteAll()
將內容刪除
(和Delete共用一套實現程式碼)

主要可以分為以下步驟:
1、獲取連線
2、傳送資料到memcached伺服器
3、接收memcached資訊和處理連線
DeleteAll方法流程圖如下,點選下載
image.png

相關連結:
原始碼連結:https://github.com/laijinhang/gomemcache
筆記連結:https://github.com/laijinhang/go-gomemcache-study