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上實習分散式的。