网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

利用Python+Redis实现分布式锁-创新互联

公司主营业务:成都网站建设、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出阳城免费做网站回馈大家。

利用Python+Redis实现分布式锁

欢迎一起交流技术:一个人可以走的很快,但是一群人却可以走的更远。

常见关系型数据库(Oracle+MySQL+PG+GP)+高可用企业解决方案+分布式锁

使用场景:

  彻底解决HA的脑裂问题

  多个服务器之间只允许一个进程执行的场景


class MyDLock(object):

    def __init__(self, lockID,timeout):

        self.connection = redis.Redis(host=cfg.REDIS_SERVER_IP

                                      , port=cfg.REDIS_SERVER_PORT

                                      , password=cfg.REDIS_SERVER_PWD

                                      , db=cfg.REDIS_SERVER_DB_NUM

                                      ,decode_responses=True)

        self.__lockID = lockID

        self.__timeout  = timeout

    def tryLock(self, appid):

        #To_Main

        try:

            val=self.connection.get(self.__lockID)

            if val is None:

                logging.info("The app(%s) try lock(%s) ok." % (appid, self.__lockID));

                self.connection.set(self.__lockID, appid, ex=self.__timeout)

                return True

            else:

                logging.info("The owner of lock(%s) is %s. you(%s) can not get it"%(self.__lockID, val, appid));

                return False

        except Exception as e:

            logging.error("Warning: Can't write log. (%s)" % e)

            return False

    def activeLock(self, appid):

        #心跳,定期激活

        val = self.connection.get(self.__lockID)

        if val is None:

            logging.info("There is no lock(%s)." % (self.__lockID));

            return False

        else:

            if appid == val:

                #只能激活自己的锁

                logging.info("Application(%s) active lock(%s) ok." % (appid, self.__lockID));

                self.connection.set(self.__lockID, appid, ex=self.__timeout)

                return True

            else:

                #不能激活非自己的锁

                logging.info("Application(%s) can not active lock(%s). The owner is (%s)" % (appid, self.__lockID, val));

                return False

    def releaseLock(self, key, appid):

        val = self.connection.get(self.__lockID)

        if val is None:

            return False

        else:

            if appid == val:

                # 只能删除自己的锁

                self.connection.delete(self.__lockID)

                return True

            else:

                # 不能删除非自己的锁

                return False


网站栏目:利用Python+Redis实现分布式锁-创新互联
转载来源:http://bjjierui.cn/article/digjhp.html

其他资讯