鍍金池/ 教程/ Python/ 對 Python-memcache 分布式散列和調用的實現
通過 memcached 實現領號排隊功能及 python 隊列實例
利用 pypy 提高 python 腳本的執(zhí)行速度及測試性能
Python FAQ3-python 中 的原始(raw)字符串
Mongodb 千萬級數據在 python 下的綜合壓力測試及應用探討
Parallel Python 實現程序的并行多 cpu 多核利用【pp 模塊】
python simplejson 模塊淺談
服務端 socket 開發(fā)之多線程和 gevent 框架并發(fā)測試[python 語言]
python Howto 之 logging 模塊
python 之 MySQLdb 庫的使用
關于 python 調用 zabbix api 接口的自動化實例 [結合 saltstack]
python 之利用 PIL 庫實現頁面的圖片驗證碼及縮略圖
Python 通過 amqp 消息隊列協(xié)議中的 Qpid 實現數據通信
python 中用 string.maketrans 和 translate 巧妙替換字符串
python linecache 模塊讀取文件用法詳解
Python 批量更新 nginx 配置文件
python 計算文件的行數和讀取某一行內容的實現方法
python+Django 實現 Nagios 自動化添加監(jiān)控項目
多套方案來提高 python web 框架的并發(fā)處理能力
python 寫報警程序中的聲音實現 winsound
python 調用 zabbix 的 api 接口添加主機、查詢組、主機、模板
對 Python-memcache 分布式散列和調用的實現
使用 python 構建基于 hadoop 的 mapreduce 日志分析平臺
一個腳本講述 python 語言的基礎規(guī)范,適合初學者
Python 編寫的 socket 服務器和客戶端
如何將 Mac OS X10.9 下的 Python2.7 升級到最新的 Python3.3
python 監(jiān)控文件或目錄變化
報警監(jiān)控平臺擴展功能 url 回調的設計及應用 [python 語言]
Python 處理 cassandra 升級后的回滾腳本
python 實現 select 和 epoll 模型 socket 網絡編程
關于 B+tree (附 python 模擬代碼)
通過 python 和 websocket 構建實時通信系統(tǒng)[擴展 saltstack 監(jiān)控]

對 Python-memcache 分布式散列和調用的實現

煮酒品茶:對 python-memcache 進行學習,把分布式 HASH 算法加進去,不說線上自己玩玩的程序可以加到里面去。memcached 讀存數據就這些東西,看著補。

分布式一致性 HASH 算法:memcache_ring.py

#coding:utf8
import hash_ring
import memcache
memcache_servers = [
        '127.0.0.1:11211']
weights = {
        '127.0.0.1:11211':1}
ring = hash_ring.HashRing(memcache_servers,weights)
#if value is null then get else set
def mc(key,value="Null-0"):
    server_node = ring.get_node(key)
    mc = memcache.Client([server_node],debug=1)
    if value == "Null-0":
        return mc.get(key)
    else:
        return mc.set(key,value)

一致性 hash 讀取數據:

http://wiki.jikexueyuan.com/project/python-actual-combat/images/74.jpg" alt="pic" />

從數據庫中讀取數據

sql:

http://wiki.jikexueyuan.com/project/python-actual-combat/images/75.jpg" alt="pic" />

http://wiki.jikexueyuan.com/project/python-actual-combat/images/76.jpg" alt="pic" />

可利用起來的程序,稍改動加一些 try 之類的就可以用到自己的程序玩了。else下key =str(hash(sql))可以去掉。不知道為啥不好冊。

#coding:utf8
from memcache_ring import mc
import MySQLdb
#如果在 memcache 中就不查數據庫,不在就取出來并存一份
sql = "select * from zwhset where id=100"
key = str(hash(sql))
#查數據庫
def select_sql(sql):
    conn = MySQLdb.connect(host="localhost",user="root",passwd="",db="test",charset="utf8")
    cursor = conn.cursor()
    cursor.execute(sql)
    value = cursor.fetchall()
    #如果沒有查到數據,則原值返回
    if not value:
        return value
    else:
        key = str(hash(sql))
        #把存儲的結果給調用程序
        return mc(key,value)
#讀數據,先看 memcached里有沒有,有就直接返回 memcached 查的值,沒有就查數據庫,
#如果數據庫也返回空的話原值返回,如果有值就寫 memcached,然后把 value 返回
if not mc(key):
    select_sql(sql)
else:
    mc(key)