python淺學【網絡服務中間件】之Memcached


一、緩存的由來:

  • 提升性能

    絕大多數情況下,select 是出現性能問題最大的地方。一方面,select 會有很多像 join、group、order、like 等這樣豐富的語義,而這些語義是非常耗性能的;另一方面,大多 數應用都是讀多寫少,所以加劇了慢查詢的問題。

    分布式系統中遠程調用也會耗很多性能,因為有網絡開銷,會導致整體的響應時間下降。為了挽救這樣的性能開銷,在業務允許的情況(不需要太實時的數據)下,使用緩存是非常必要的事情。

  • 緩解數據庫壓力

    當用戶請求增多時,數據庫的壓力將大大增加,通過緩存能夠大大降低數據庫的壓力。

 

 

 

 

二、memcached的特點:

 

什么是Memcached:

Memcached是一個自由開源的,高性能,分布式內存對象緩存系統。

Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟件。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴展性的重要因素。

Memcached是一種基於內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。

Memcached簡潔而強大。它的簡潔設計便於快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流行的開發語言。

本質上,它是一個簡潔的key-value存儲系統。

一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、提高可擴展性。

 

特點如下:

  (1)開源------協議簡單
  (2)高效------C語言開發 基於libevent處理
  (3)速度快------內存存儲
  (4)c/s架構------tcp連接方便
  (5)數據存滿時------通過lru機制進行刪除

    注意:數據存儲在內存中,斷電消失,不是數據持久化數據庫

 

支持語言:

  • Perl
  • PHP
  • Python
  • Ruby
  • C#
  • C/C++
  • Lua
  • 等等

 

三、memcached的安裝和常見操作:

安裝(centos7安裝) yum install memcached

daemon后台啟動

$ /usr/local/bin/memcached -p 11211 -m 64m -d

這里使用的memcached啟動選項的內容如下。
選項說明

-p 使用的TCP端口。默認為11211

-m 最大內存大小。默認為64M

-vv 用very vrebose模式啟動,調試信息和錯誤輸出到控 制台

-d 作為daemon在后台啟動

上面四個是常用的啟動選項,其他還有很多,通過 $ /usr/local/bin/memcached –h 查看幫助

 

關於memcached的簡單操作(增刪改查)不做書寫,請移步學習:https://www.runoob.com/memcached/memcached-tutorial.html

 

四、使用python對memcached進行操作:

pip install pymemcache  #安裝庫

 

連接memcahed服務:

from pymemcache.client.base import Client

client = Client(('localhost', 11211))  #創建連接
client.set('some_key', 'some_value')  #將key的value上傳緩存
result = client.get('some_key')  #獲取key的值

 

簡單的序列化操作:

tv = {'ch':['ch1','ch2'], 'mudan':['md1', 'md2']}
cli.set('menu_tv', json.dumps(tv)) 

 

 

然后一頓操作(簡單的操作)如下:

 1 import time
 2 import json
 3 from pymemcache.client.base import Client
 4  
 5  
 6 # 演示緩存流程
 7 def get_data():
 8     '''生成數據'''
 9     data = {'ch': ['ch1', 'ch2'], 'md': ['mdA', 'mdB']}
10     time.sleep(3)
11     return data
12  
13  
14 def show_data(data):
15     '''顯示數據內容'''
16     for k, v in data.items():
17         print(k, v)
18  
19  
20 def mind_data(k, data):
21     '''將數據加入到緩存中'''
22     client = Client(('192.168.66.189', 11211))
23     res = client.set(k, json.dumps(data))
24     return res
25  
26  
27 def get_cache(k):
28     '''獲取數據'''
29     try:
30         client = Client(('192.168.66.189', 11211))
31         data = json.loads(client.get(k))
32         return data
33     except Exception as e:
34         print(e)
35         return False
36  
37  
38 if __name__ == '__main__':
39     k = 'test'
40     data = get_cache(k)
41     if data:
42         show_data(data)
43     else:
44         data = get_data()
45         show_data(data)
46         mind_data(k, data)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM