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,以此来达到锁的目的