利用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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29497382/viewspace-2636751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用Redis實現分散式鎖Redis分散式
- 【Redis】利用 Redis 實現分散式鎖Redis分散式
- 利用 DB 實現分散式鎖的思路分散式
- 實現分散式鎖分散式
- 分散式鎖實現分散式
- 利用MySQL中的樂觀鎖和悲觀鎖實現分散式鎖MySql分散式
- 分散式鎖----Redis實現分散式Redis
- Redis實現分散式鎖Redis分散式
- 分散式鎖及其實現分散式
- 分散式鎖的實現分散式
- 分散式鎖初窺-分散式鎖的三種實現方式分散式
- Elasticsearch系列---實現分散式鎖Elasticsearch分散式
- Redis之分散式鎖實現Redis分散式
- 分散式鎖之Redis實現分散式Redis
- 分散式鎖之Zookeeper實現分散式
- 分散式鎖實現(二):Zookeeper分散式
- Redisson實現分散式鎖---原理Redis分散式
- Redisson實現分散式鎖—RedissonLockRedis分散式
- 分散式鎖的實現方案分散式
- ZooKeeper分散式鎖的實現分散式
- redis分散式鎖-java實現Redis分散式Java
- Redis如何實現分散式鎖Redis分散式
- 分散式鎖實現(一):Redis分散式Redis
- etcd實現分散式鎖分散式
- 6 zookeeper實現分散式鎖分散式
- redis分散式鎖的實現Redis分散式
- redis分散式鎖-SETNX實現Redis分散式
- 分散式鎖實現彙總分散式
- redisson實現分散式鎖原理Redis分散式
- 使用 Redis 實現分散式鎖Redis分散式
- 在 Java 中利用 redis 實現一個分散式鎖服務JavaRedis分散式
- 「分散式」實現分散式鎖的正確姿勢?!分散式
- 實現一個 Redis 分散式鎖Redis分散式
- Redis優雅實現分散式鎖Redis分散式
- 分散式鎖的實現及原理分散式
- 基於redis實現分散式鎖Redis分散式
- 分散式鎖概念及實現方式分散式
- 如何用 Redis 實現分散式鎖Redis分散式