因為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方法流程圖如下,
點選下載下傳2)func (c Client) Add(item Item) error
作用:
mc.Add(&memcache.Item{Key:"data",Value:[]byte("你好!")})
1、選擇一個memcache伺服器并擷取連接配接
2、發送資料到memcached伺服器
3、接收memcached資訊和處理連接配接
Add方法流程圖如下,
3)func (c Client) Set(item Item) error
mc.Set(&memcache.Item{Key:"data",Value:[]byte("你好!")})
主要分為以下步驟:
1、選擇一個memcached伺服器并進行連接配接
2、向連接配接的那個memcached伺服器發送資料并處理相關内容
3、連接配接處理(回收或釋放)
Set方法流程圖如下,
4)func (c Client) Get(key string) (item Item, err error)
i, err := mc.Get("data")
fmt.Println(i, err)
主要可分為三個步驟
1:擷取tcp連接配接
2:發送資料到memcached
3:處理memcached傳回消息和tcp連接配接處理(放入回收池或釋放)
Get方法流程圖如下,
5)func (c Client) GetMulti(keys []string) (map[string]Item, error)
items, err := mc.GetMulti([]string{"data1","data2","data3"})
GetMulti方法流程圖如下,
6)func (c *Client) Increment(key string, delta uint64) (newValue uint64, err error)
newVal, err := mc.Increment("test", 2)
fmt.Println(newVal, err)
作用:将原來鍵的值加上指定數,可分為以下兩種情況:
1、如果原來的是一個數字,則加上指定數,傳回修改後的值和nil
2、如果原來的不是一個數,則傳回0和報錯資訊
内部執行步驟:
1、連接配接memcached伺服器
3、斷開連接配接,對連接配接進行回收或釋放
Delete方法流程圖如下,
7)func (c *Client) Decrement(key string, delta uint64) (newValue uint64, err error)
newVal, err := mc.Decrement("test", 2)
作用:将原來鍵的值減去指定數,可分為以下兩種情況:
1、如果原來的是一個數字,則減去指定數,傳回修改後的值和nil
Decrement方法流程圖如下,
8)func (c Client) CompareAndSwap(item Item) error
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)
9)func (c *Client) FlushAll() error
err := mc.FlushAll()
用于清理緩存中的所有 key=>value(鍵=>值) 對
1、往每個memcached伺服器發送資料和接收處理memcached資訊
2、和處理連接配接
FlushAll方法流程圖如下,
10)func (c *Client) Replace() error
err := mc.Replace()
發送replace指令到mecmached伺服器,該指令用于替換已存在的
key(鍵)的value(資料值)。
如果 key 不存在,則替換失敗,并且您将獲得響應 NOT_STORED。
Replace方法流程圖如下,
11)func (c *Client) Touch(key string, seconds int32) (err error)
err := mc.Touch("data", 120)
發送touch指令到mecmached伺服器,如果key不存在,則會傳回錯誤,
如果key存在,則會在設定的時間後自動删除。
1、擷取伺服器位址操作
2、往每個memcached伺服器發送資料和接收處理memcached資訊
Touch方法流程圖如下,
12)func (c *Client) Delete(key string) error
err := mc.Delete("test")
将原有key對應的内容删除
1、擷取連接配接
13)func (c *Client) DeleteAll() error
err := mc.DeleteAll()
将内容删除
(和Delete共用一套實作代碼)
DeleteAll方法流程圖如下,
相關連結:
源碼連結:
https://github.com/laijinhang/gomemcache筆記連結:
https://github.com/laijinhang/go-gomemcache-study