本文共 1252 字,大约阅读时间需要 4 分钟。
煮酒品茶:对python-memcache进行学习,把分布式HASH算法加进去,不说线上自己玩玩的程序可以加到里面去。memcached读存数据就这些东西,看着补。
分布式一致性HASH算法:memcache_ring.py
#coding:utf8import hash_ringimport memcachememcache_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 setdef 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读取数据:
从数据库中读取数据
sql:
可利用起来的程序,稍改动加一些try之类的就可以用到自己的程序玩了。else下key
=
str
(
hash
(sql))可以去掉。不知道为啥不好册。
#coding:utf8from memcache_ring import mcimport 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)
转载地址:http://cqyoa.baihongyu.com/