对Python-memcache分布式散列和调用的实现
煮酒品茶:对python-memcache进行学习,把分布式HASH算法加进去,不说线上自己玩玩的程序可以加到里面去。memcached读存数据就这些东西,看着补。
分布式一致性HASH算法:memcache_ring.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#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读取数据:
从数据库中读取数据
sql:
可利用起来的程序,稍改动加一些try之类的就可以用到自己的程序玩了。else下key
=
str
(
hash
(sql))可以去掉。不知道为啥不好册。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#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)
|
本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/1351032,如需转载请自行联系原作者