django使用锁

django使用锁

第一个:内存锁

1
pip install django-cache-lock

这么视图函数里面去使用,这是内存锁。

1
2
3
4
5
6
from django_lock import lock
with lock(name=id, timeout=10 * 60):
print(f'Acquire Lock: {k}')
print("do some thing")
time.sleep(3)
print(f'Release Lock: {k}')

这个name,就是锁的key,当需要同一份代码,锁上之后再去执行的情况下,就用同一个key。

这个timeout就是 锁的过时时间,当timeout等于0的时候就是永不过时。慎用。

第二个:redis分布式锁

在settings文件里面,需要配置一下redis的地址:

1
pip install django-redis
1
2
3
4
5
6
7
8
9
10
11
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": 'redis://127.0.0.1:6379/0',
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"SOCKET_CONNECT_TIMEOUT": 5,
"SOCKET_TIMEOUT": 5,
}
}
}

在视图函数里面,这么去使用:

1
2
3
4
5
6
7
8
from django.core.cache import cache
k = "key_name"
timeout = 15
with cache.lock(k, timeout=timeout):
print(f'Acquire Lock: {k}')
print("do some thing")
time.sleep(3)
print(f'Release Lock: {k}')

这个k,就是锁的key,当需要同一份代码,锁上之后再去执行的情况下,就用同一个key。

这个timeout就是 锁的过时时间,当timeout等于0的时候就是永不过时。慎用。

内存锁适用于当项目只在一个服务器上跑的情况,redis的分布式锁可以同时锁住多个服务器上的程序。其原理就是基于redis数据库。在程序需要被锁的时候,就写入一个key,以此来达到锁的目的

文章作者: 海龟先生
文章链接: http://haiguixiansheng.org.cn/2020/10/12/django使用锁/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 海龟先生
打赏
  • 微信
  • 支付宝

评论