使用python操做RabbitMQ,Redis,Memcache,SQLAlchemy 其一

一.概念
1.Memcached
     Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的 hashmap 。其 守護進程 (daemon )是用 C 寫的,可是客戶端能夠用任何語言來編寫,並經過memcached協議與守護進程通訊。

2.RabbitMQ

    RabbitMQ是一個在AMQP基礎上完整的,可複用的企業消息系統。他遵循Mozilla Public License開源協議。python

    MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用鏈接來連接它們。消 息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過隊列來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求。redis

3.Redis
     redis是一個key-value 存儲系統 。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list( 鏈表 )、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些 數據類型 都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。

4.SQLAlchemy
     SQLAlchemy是 Python 編程語言下的一款ORM框架,該框架創建在數據庫API之上,使用關係對象映射進行數據庫操做,簡言之即是:將對象轉換成SQL,而後使用數據API執行SQL並獲取執行結果。

二.理解
Memcache通常是用來做爲緩存服務使用的.經過這個工具,咱們能夠把常常使用的數據放置在讀取速度很是快的內存裏面,用戶在訪問的時候,就能夠直接提取數據,而不用從緩慢的硬盤裏面獲取,提升了訪問的效率.
Redis 在功能上和Memcache有相同的地方,也會把數據緩存在內存裏面,因此提升訪問的效率.
RabbitMQ是一個消息隊列目的是用來給其餘模塊提供信息傳輸的功能,能夠供其餘的模塊調用.
SQLAlchemy是一個工具,用來簡化python到數據庫的訪問.

三.使用
3.1 Memcache
3.1.1 安裝
wget http: / / memcached.org / latest
tar  - zxvf memcached - 1.x .x.tar.gz
cd memcached - 1.x .x
. / configure && make && make test && sudo make install
 
PS:依賴libevent
        yum install libevent - devel
        apt - get install libevent - dev
3.1.2 啓動
memcached  - - 10     - u root  - 10.211 . 55.4  - 12000  - 256  - / tmp / memcached.pid
 
參數說明:
     - d 是啓動一個守護進程
     - m 是分配給Memcache使用的內存數量,單位是MB
     - u 是運行Memcache的用戶
     - l 是監聽的服務器IP地址
     - p 是設置Memcache監聽的端口,最好是 1024 以上的端口
     - c 選項是最大運行的併發鏈接數,默認是 1024 ,按照你服務器的負載量來設定
     - P 是設置保存Memcache的pid文件
3.1.3 操做
存儲命令:  set / add / replace / append / prepend / cas
獲取命令: get / gets
其餘命令: delete / stats..

3.2 使用python來控制Memcache
3.2.1 安裝API
python操做Memcached使用Python - memcached模塊
下載安裝:https: / / pypi.python.org / pypi / python - memcached
3.2.2 Example
import  memcache
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
mc. set ( "foo" "bar" )
ret  =  mc.get( 'foo' )
print  ret

3.2.3 集羣
python-memcached模塊原生支持集羣操做,其原理是在內存維護一個主機列表,且集羣中主機的權重值和主機在列表中重複出現的次數成正比
  主機    權重
     1.1 . 1.1    1
     1.1 . 1.2    2
     1.1 . 1.3    1
 
那麼在內存中主機列表爲:
     host_list  =  [ "1.1.1.1" "1.1.1.2" "1.1.1.2" "1.1.1.3" , ]


若是用戶根據若是要在內存中建立一個鍵值對(如:k1 = "v1"),那麼要執行一下步驟:算法

  • 根據算法將 k1 轉換成一個數字
  • 將數字和主機列表長度求餘數,獲得一個值 N( 0 <= N < 列表長度 )
  • 在主機列表中根據 第2步獲得的值爲索引獲取主機,例如:host_list[N]
  • 鏈接 將第3步中獲取的主機,將 k1 = "v1" 放置在該服務器的內存中

example:
mc  =  memcache.Client([( '1.1.1.1:12000' 1 ), ( '1.1.1.2:12000' 2 ), ( '1.1.1.3:12000' 1 )], debug = True )
mc. set ( 'k1' 'v1' )

3.2.4 增長值
添加一條鍵值對,若是已經存在的 key,重複執行add操做異常
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache
 
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
mc.add( 'k1' 'v1' )
# mc.add('k1', 'v2') # 報錯,對已經存在的key重複添加,失敗!!!

3.2.5 修改值
replace 修改某個key的值,若是key不存在,則異常
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache
 
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
# 若是memcache中存在kkkk,則替換成功,不然一場
mc.replace( 'kkkk' , '999' )


3.2.6 增長和修改的混合 set
set            設置一個鍵值對,若是key不存在,則建立,若是key存在,則修改
set_multi   設置多個鍵值對,若是key不存在,則建立,若是key存在,則修改

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
mc. set ( 'key0' 'wupeiqi' )
mc.set_multi({ 'key1' 'val1' 'key2' 'val2' })


3.2.7 刪除
delete             在Memcached中刪除指定的一個鍵值對
delete_multi    在Memcached中刪除指定的多個鍵值對
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
mc.delete( 'key0' )
mc.delete_multi([ 'key1' 'key2' ])

3.2.8 獲取信息
get            獲取一個鍵值對
get_multi   獲取多一個鍵值對
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
val  =  mc.get( 'key0' )
item_dict  =  mc.get_multi([ "key1" "key2" "key3" ])

3.2.9 追加
append    修改指定key的值,在該值 後面 追加內容
prepend   修改指定key的值,在該值 前面 插入內容
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import  memcache  
mc  =  memcache.Client([ '10.211.55.4:12000' ], debug = True )
# k1 = "v1"
mc.append( 'k1' 'after' )
# k1 = "v1after"
mc.prepend( 'k1' 'before' )
# k1 = "beforev1after"


























































相關文章
相關標籤/搜索