利用Python+Redis实现分布式锁
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实现分布式锁的更多相关文章
- 利用多写Redis实现分布式锁原理与实现分析(转)
利用多写Redis实现分布式锁原理与实现分析 一.关于分布式锁 关于分布式锁,可能绝大部分人都会或多或少涉及到. 我举二个例子:场景一:从前端界面发起一笔支付请求,如果前端没有做防重处理,那么可能 ...
- 利用redis实现分布式锁知识点总结及相关改进
利用redis实现分布式锁知识点总结及相关改进 先上原文,本文只为总结及对相关内容的质疑并提出若干意见,原文内容更详细https://www.cnblogs.com/linjiqin/p/800383 ...
- 利用redis实现分布式锁
分布式锁一般有三种实现方式: 1. 数据库乐观锁: 2. 基于ZooKeeper的分布式锁: 3. 基于Redis的分布式锁: 这里大概说一下三种方式的优缺点,数据库乐观锁优点是实现简单,只需要for ...
- spring boot 利用redisson实现redis的分布式锁
原文:http://liaoke0123.iteye.com/blog/2375469 利用redis实现分布式锁,网上搜索的大部分是使用java jedis实现的. redis官方推荐的分布式锁实现 ...
- 通过Redis 实现分布式锁_利用Jedis 客户端
前言 分布式锁一般有三种实现方式: 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁. 本篇博客将介绍第二种方式,基于Redis实现分布式锁. 虽然网上已经有各种介 ...
- python基于redis实现分布式锁
阅读目录 什么事分布式锁 基于redis实现分布式锁 一.什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无 ...
- 基于 redis 的分布式锁实现 Distributed locks with Redis debug 排查错误
小结: 1. 锁的实现方式,按照应用的实现架构,可能会有以下几种类型: 如果处理程序是单进程多线程的,在 python下,就可以使用 threading 模块的 Lock 对象来限制对共享变量的同步访 ...
- Redis++:Redis做分布式锁真的靠谱吗
Redis做分布式锁真的靠谱吗 Redis的分布式锁可以通过Lua进行实现,通过setnx和expire命令连用的方式 || 也可以使用高版本的方法同时设置失效时间,但是假如在以下情况下,就会造成无锁 ...
- 基于redis 实现分布式锁的方案
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁 ...
随机推荐
- 二、python数据类型、字符编码、文件处理
一. 前言 1. 什么是数据: x = 10,10就是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的, 不同的状态就应该用不同类型的数据去表示 3. 数据类型 数字(整型.长整型 ...
- C语言 读取配置文件
配置文件截图: 读取结果截图: 代码转自:http://www.tuicool.com/articles/Zb2iIn 附代码: // ReadConfig.cpp : 定义控制台应用程序的入口点. ...
- uni-app中picker组件的一个坑
这里直接贴出代码 <view class="goods-info-add fl-sw"> <view>运费模板:</view> <view ...
- JS基础_实参可以是任何值
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 0基础学习web技术
说实话0基础学习前端挺难的,当然也没有是技术是容易学习的 我只是想分享一下我的学习经历: 分为以下几点: 1:学习html和css ,学习完成之后可以模仿各大网站的静态网页 2:学习原生js基础,jq ...
- Caffe之layer_factory
之前在测试NN中各个层的时间的时候,遇到一个非常奇怪的问题,分别使用Caffe自己的gpu方法和cuDNN方法,在卷积上性能差异非常大,但是在pooling层上基本没有变化.抽空检查了代码之后,发现是 ...
- elasticsearch 配置外网访问
进入 config/ elasticsearch.ym 修改:network.host: 127.0.0.1 或者内网Ip 添加:http.host: 0.0.0.0
- CHD-5.3.6集群上hive安装
解压过后: [hadoop@master CDH5.3.6]$ ls -rlttotal 8drwxr-xr-x. 17 hadoop hadoop 4096 Jun 2 16:07 hadoop- ...
- 发送短信——java
闲来无事研究一下调用第三方接口发送短信的技术 这一次我们使用阿里的短信服务 一.进行平台相关服务的注册和设置 下面请参照阿里的短信服务文档进行设置,只要按照文档步骤来差不多30分钟就能搞定服务注册: ...
- 解决Django项目静态资源无法访问的问题
静态资源无法访问 url.py中配置 from django.conf.urls import url from django.views import static from django.conf ...