redis setNx原子锁
2024-10-19 08:16:15
https://github.com/suqi/rlock/blob/master/rlock.py
保持逻辑并发情况不产生多次结果
常用于下单,钱包,抢购,秒杀等场景
1 LOCK_TIMEOUT = 3
2 lock = 0
3 lock_timeout = 0
4 lock_key = 'lock.foo'
5
6 # 获取锁
7 while lock != 1:
8 now = int(time.time())
9 lock_timeout = now + LOCK_TIMEOUT + 1
10 lock = redis_client.setnx(lock_key, lock_timeout)
11 if lock == 1 or (now > int(redis_client.get(lock_key))) and now > int(redis_client.getset(lock_key, lock_timeout)):
12 break
13 else:
14 time.sleep(0.001)
15
16 # 已获得锁
17 do_job()
18
19 # 释放锁
20 now = int(time.time())
21 if now < lock_timeout:
22 redis_client.delete(lock_key)
最新文章
- Boost信号/槽signals2
- lnmp配置Yii2规则
- [http session]
- 精品素材:WALK &; RIDE 单页网站模板下载
- php 下载保存文件保存到本地的两种方法
- vsftp关于";550 create directory operation failed";问题解决
- 文件类似的推理 -- 超级本征值(super feature)
- JS 用角度换东南西北
- IIS 支持 ajax 跨域
- electron Windows和mac 的菜单栏隐藏
- laravel读取excel
- bis.org
- .net core部署到Ubuntu
- rest framework 尝鲜
- MySQL 从库down机
- 外观模式Facade pattern
- POJ-2336 Ferry Loading II(简单DP)
- toArray()
- PHPCMS部件
- bzoj3673可持久化并查集