centos7 安裝memcached 以及使用python3 操作 memcached數據庫

memcached介紹
Memcached是一個自由開源的,高性能,分佈式內存對象緩存系統。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric爲首開發的一款軟件。現在已成爲mixi、hatena、Facebook、Vox、LiveJournal等衆多服務中提高Web應用擴展性的重要因素。
Memcached是一種基於內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。
Memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。
本質上,它是一個簡潔的key-value存儲系統。
一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。
memcached分佈式緩存服務器的特點:協議簡單、基於libevent的事件處理、內置內存存儲方式、memcached不互相通信的分佈式


libevent官網:https://libevent.org/old-releases.html#2.0

#下載libevent
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

#編譯安裝
tar -xvf libevent-2.0.21-stable.tar.gz
cd ibevent-2.0.21-stable
./configure --prefix=/usr/local/libevent-2.0.21-stable --libdir=/usr/lib64
make
make install

#檢查是否安裝成功
ls -al /usr/local/libevent-2.0.21-stable/lib | grep libevent

#安裝
yum install memcached

#查看幫助信息
memcached -h


-p <num> 監聽的端口
-l <ip_addr> 連接的IP地址, 默認是本機
-d start 啓動memcached 服務
-d restart 重起memcached 服務
-d stop|shutdown 關閉正在運行的memcached 服務
-d install 安裝memcached 服務
-d uninstall 卸載memcached 服務
-u <username> 以<username>的身份運行 (僅在以root運行的時候有效)
-m <num> 最大內存使用,單位MB。默認64MB
-M 內存耗盡時返回錯誤,而不是刪除項
-c <num> 最大同時連接數,默認是1024
-f <factor> 塊大小增長因子,默認是1.25
-n <bytes> 最小分配空間,key+value+flags默認是48
-h 顯示幫助

#啓動memcached
memcached -d -m 1024 -u root -p 11211 -P /tmp/memcached.pid


yum install telnet


格式<command name> <key> <flags> <exptime> <bytes>
<command name>的值可以是set,add,replace,append,prepend。
<key>此處的值是mykey
<flags>是一個任意的16-bit的無符號number。我們這裏給的值是0
<exptime>指定過期時間,0代表永遠不會過期。如果非0,則當過了過期時間就無法獲取它。
<bytes>存的值的長度。這裏給的值是16,就是I Love Memcached的字符個數。

[root@localhost ~]# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

set mykey 0 300 16
I Love Memcached
STORED

get mykey
VALUE mykey 0 16
I Love Memcached
END
quit
Connection closed by foreign host.
[root@localhost ~]#

#安裝
pip3 install python3-memcached

 

測試腳本

import memcache

mc = memcache.Client(['127.0.0.1:11211'], debug=0)

print("\n")
#添加值
#add添加一個鍵值對,如果存在key,重複執行add則異常
mc.add("key0", "value0")
print('mc.add("key0", "value0")',"->",mc.get("key0"))
mc.add("key0", "value00")
print('mc.add("key0", "value0")',"->",mc.get("key0"))

print("\n")
#設置值
#set設置一個鍵值對,如果key不存在,則創建,如果key存在則修改
mc.set("key1", "value1")
print('mc.set("key1", "value1")',"->",mc.get("key1"))

print("\n")
#設置多個值
#set_multi設置多個鍵值對,如果key不存在,則創建,如果key存在,則修改
mc.set_multi({'key11':'value11','key21':'value21'})
print("mc.set_multi({'key11':'value11','key21':'value21'})","->",mc.get("key11"),mc.get("key21"))

print("\n")
#獲取多個鍵值對
print("mc.get_multi(['key11','key21'])","->",mc.get_multi(['key11','key21']))


print("\n")
#修改
#append:修改指定key的值,在該值後面追加內容
#prepend:修改指定key的值,在該值前面插入內容
mc.append('key11','after')
mc.prepend('key21','before')
print("mc.append('key11','after')-mc.prepend('key21','before')","->",mc.get_multi(['key11','key21']))

print("\n")
#刪除多個值
#delete_multi在memcached中刪除指定的多個鍵值對
mc.delete_multi(['key11','key21'])
print("mc.delete_multi(['key11','key21'])","->",mc.get("key11"),mc.get("key21"))

print("\n")
#獲取多個鍵值對
print("mc.get_multi(['key11','key21'])","->",mc.get_multi(['key11','key21']))

print("\n")
#刪除值
#delete在memcached中刪除指定的一個鍵值對
mc.set("key2", 3)
print('mc.set("key2", 3)',"->",mc.get("key2"))
mc.delete("key2")
print('mc.delete("key2")',"->",mc.get("key2"))

print("\n")
#增加減少值
#incr:自增,將memcached中的某個值增加N(默認爲1)mc.incr('k1',2)
#decr:自減,將memcached中的某分值減少N(默認爲1)mc.decr('k1',3)
mc.set("key3", "1")
print('mc.set("key3", "1")')
mc.incr("key3")
print('mc.incr("key3")',"->",mc.get("key3"))
mc.decr("key3")
print('mc.decr("key3")',"->",mc.get("key3"))

print("\n")
#替換值
#replace修改某個key的值,如果key不存在,則異常
mc.set("key4", "1")
print('mc.set("key4", "1")',"->",mc.get("key4"))
mc.replace('key4','v4')
print('mc.replace("key4","v4")',"->",mc.get("key4"))

print("\n")
#cas:執行一個檢查並設置的操作,它僅在當前客戶端最後一次取值後,該Key對應的值沒有被其他客戶端修改的情況下, 才能夠將值寫入。
mc.cas('key5','999')
print("mc.cas('key5','999')","->",mc.get("key5"))

print("\n")
#gets:gets 命令獲取帶有 CAS 令牌存 的 value(數據值) ,如果 key 不存在,則返回空
print("mc.gets('key5')",mc.gets('key5'))

輸出

[root@localhost ~]# python3 test_mem.py


mc.add("key0", "value0") -> value0
mc.add("key0", "value0") -> value0


mc.set("key1", "value1") -> value1


mc.set_multi({'key11':'value11','key21':'value21'}) -> value11 value21


mc.get_multi(['key11','key21']) -> {'key11': 'value11', 'key21': 'value21'}


mc.append('key11','after')-mc.prepend('key21','before') -> {'key11': 'value11after', 'key21': 'beforevalue21'}


mc.delete_multi(['key11','key21']) -> None None


mc.get_multi(['key11','key21']) -> {}


mc.set("key2", 3) -> 3
mc.delete("key2") -> None


mc.set("key3", "1")
mc.incr("key3") -> 2
mc.decr("key3") -> 1


mc.set("key4", "1") -> 1
mc.replace("key4","v4") -> v4


mc.cas('key5','999') -> 999


mc.gets('key5') 999
[root@localhost ~]#

 

 

 

 

 

 

 

 

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