对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读取数据:

wKioL1LSeDuRXANVAADW8yi1_eA271.jpg


从数据库中读取数据

sql:

wKioL1LTX1vTNIezAAB9FTHMdz0194.jpg


wKiom1LSeC-xCtr5AAG-lqNwfrk454.jpg


可利用起来的程序,稍改动加一些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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值