django缓存的简单锁扩展。
django-cache-lock的Python项目详细描述
django缓存锁
Django缓存的一个简单锁扩展,用于防止并发编辑。
安装
使用pip安装django缓存锁
pip install django-cache-lock
快速启动
您可以使用with语句或decorator使用django缓存锁
from django_lock import lock
with lock("global"):
pass
@lock("global")
def foo():
pass
锁定模型实例的快捷方式
from django.db import models
from django_lock import model_lock
class Foo(models.Model):
bar = models.CharField(max_length=8)
@lock_model
def lock_pk(self):
pass
@lock_model("bar", blocking=False)
def lock_bar(self):
pass
配置
key | default | desc |
---|---|---|
DJANGOLOCK_PREFIX | "lock:" | lock's key prefix stored in cache |
DJANGOLOCK_SLEEP | 0.1 | default interval time to acquire a lock if a lock is holded by others |
DJANGOLOCK_RELEASEONDEL | True | release lock when ^{ |
高级用法
有关更多用法,请阅读code
支持的后端
- django.core.cache.backends.db
- django.core.cache.backends.file
- django.core.cache.backends.locmem
- django.core.cache.backends.memcached
- django-redis
- django-redis-cache
注意事项
locmem后端
- 不要在产品环境中使用locmem后端。
memcached后端
- Memcached不支持毫秒过期时间,而且它的过期时间不是很精确所以memcached lock的超时时间并不像其他后端那样精确。
redis后端
- 我们没有测试分布式redis锁。
待办事项:
- 使用memcached的cas释放锁
- 重新获取并扩展锁
- 数据库后端缓存支持