1. 程式人生 > >memcached的學習(5)

memcached的學習(5)

2018.6.12
前面講述了直接使用memcached命令的使用方法,這裡使用庫libmemcached客戶端,如何使用其實現上面的這些命令操作,也就是libmemcached提供的API有哪些?
具體的見官方檔案:
http://docs.libmemcached.org/libmemcached-1.0/memcached_touch.html

下面對幾個常見的API進行一個說明:

1、說明API操作都需要建立一個memcached的物件:

在這裡插入圖片描述

2、有建立就有刪除,刪除memcached_st結構

在這裡插入圖片描述

3、拷貝一個memcached_st的結構物件

在這裡插入圖片描述

4、用有了memcached的操作物件之後,向此物件中新增memcached伺服器地址及對應的埠號

在這裡插入圖片描述

5、因為客戶端可以連線多個伺服器,因此可能存在有多個服務,這裡體現了分散式的思想,所以可以檢視連線服務的個數

在這裡插入圖片描述

6、返回連線伺服器的物件陣列

在這裡插入圖片描述

7、連線多個伺服器,新增服務物件陣列

在這裡插入圖片描述

下面重點介紹,資料操作的相關命令

8、set命令

在這裡插入圖片描述

9、get命令

在這裡插入圖片描述

10、delete命令

在這裡插入圖片描述
————————————————————————————————————————————

還有其他的常見的API說明:

1. 建立和刪除memcached_st結構。

#include <libmemcached/memcached.h>
memcachd_st ;該結構可以靜態建立也可以由memcached_create動態建立。
 
memcached_st*
memcached_create(memcached_st *ptr) ptr不為空時是靜態建立,如果ptr為空,那麼該函式返回一個memcached_st結構。 void memcached_free(memcached_st *ptr) 釋放memcached_st結構所用的記憶體,刪除memcached_st。 memcached_st*memcached_clone(memcached_st*destination,memcached_st *source 克隆一個memcached_st結構;如果source為空,那麼其作用和memcached_create一樣,如果destination為空,則該函式的返回值將會返回一個和source一樣的memcached_st結構。 void
memcached_servers_reset(memcached_st) 將memcached_st所擁有與伺服器的連線全都斷開。

2.Memcached_return_t的返回值。

MEMCACHED_SUCCESS表示操作成功,其他均表示錯誤;其他錯誤的詳情參考:http://docs.libmemcached.org/error_messages.html。

3.增加和減少值。

#include <libmemcached/memcached.h>
memcached_return_t memcached_increment (memcached_st *ptr, const char *key, size_t key_length, unsigned int offset, uint64_t *value)
 
memcached_return_t memcached_decrement (memcached_st *ptr, const char *key, size_t key_length, unsigned int offset, uint64_t *value)
offset是其增加或者減少的數值,改變後的值通過value指標返回。

其他增加和減少操作參見:
http://docs.libmemcached.org/memcached_auto.html。

4.從伺服器獲取值。

#include <libmemcached/memcached.h>
char * memcached_get(memcached_st *ptr, const char *key, size_t key_length, size_t *value_length, uint32_t *flags, memcached_return_t *error);
一次通過一個鍵獲取一個值。

memcached_return_t memcached_mget(memcached_st *ptr, const char * const *keys, const size_t *key_length, size_t number_of_keys)

memcached_result_st * memcached_fetch_result(memcached_st *ptr, memcached_result_st *result, memcached_return_t *error)

以上兩個函式同時配合使用,一次呼叫可以通過多個鍵獲取多個值。先通過memcached_mget呼叫獲取多個鍵的值,這些值通過迴圈呼叫memcached_fetch_result來獲得每一個鍵所對應的值,直到該函式返回0。

5.Store, Add and Replace的操作。

memcached_return_t memcached_set (memcached_st *ptr, const char *key, size_t key_length, const char *value, size_t value_length, time_t expiration, uint32_t flags);
memcached中如果存在該鍵,則利用新值去替換,否則將該記錄寫入memcached中。
 
memcached_return_t memcached_add (memcached_st *ptr, const char *key, size_t key_length, const char *value, size_t value_length, time_t expiration, uint32_t flags);
如果memcached中存在該鍵,發生錯誤;否則將該記錄新增進memcached中。
 
memcached_return_t memcached_replace (memcached_st *ptr, const char *key, size_t key_length, const char *value, size_t value_length, time_t expiration, uint32_t flags);
如果memcached中沒有該鍵,發生錯誤;否則替換value。
以上三個函式中,key的長度不能超過250個字元,value是一個16個位元組的值。Expiration是該記錄在memcached的有效時間,即是超時時間。

6.刪除操作。

memcached_return_t memcached_delete (memcached_st *ptr, const char *key, size_t key_length, time_t expiration);
該函式將與key對應的記錄放入刪除佇列中,並且通過expiration指定該記錄從伺服器刪除的時間。

7.斷開客戶端與伺服器的連線。

void memcached_quit (memcached_st *ptr);

使用遇到的:

memcached_server_list_st memcached_server_list_append(memcached_server_list_st list, const char *hostname, unsigned int port, memcached_return_t *error)
該函式是將要連線的伺服器新增到memcached_server_st陣列中,返回值為NULL時表示出現錯誤,如果未指定port埠則使用預設的埠。
 
memcached_return_t memcached_server_push(memcached_st *ptr, const memcached_server_st *list)
該函式將 memcached_server_st陣列新增到memcached_st結構中。
 
void memcached_server_list_free(memcached_server_list_st list)
釋放memcached_server_list_st所佔據的記憶體。

思考:

1、客戶端提供的API,使用者可以在上面實現對memcached的訪問,本身也是為web的資料進行快取的設計目的,因此可以在web的後臺呼叫這些API,實現對資料的快取。

2、同時,客戶端也可以提供對多個memcached伺服器的連線,實現一個分散式的快取服務,這些需要使用者自己的基於這些API進行搭建。

3、接下里瞭解memcached伺服器端,如何儲存資料的。看原始碼,然後再去看是否有現有的框架如何在memcached上實習分散式的。