您当前的位置:网站首页>Redis>使用Redis锁处理并发问题的方法 找Redis教程就上ki4.cc (>^ω^<),Redis

使用Redis锁处理并发问题的方法 找Redis教程就上ki4.cc (>^ω^<),Redis

2020年05月11日 投稿作者: 围观人数:37

redis自增计数 找Redis教程就上ki4.cc (>^ω^<)

Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,本文就来为大家介绍一下redis实现自增计数的方法。

使用Redis锁处理并发问题,保证多进程仅有一个实例在运行,当运行中的实例down了后其它实例中的一个能顶上来,保证有且仅有一个实例在运行。

import redis
r = redis.Redis(...)

last_heart = 0		# 记录上一次得到的锁心跳
free_lock_try = 6	# 锁无心跳的最大次数 

while not r.setnx('mylock', 1):
    now_heart = r.get('mylock')
    print(f"没获取到锁,now_heart={now_heart},last_heart={last_heart},free_lock_try={free_lock_try}")
    if now_heart == last_heart:
        free_lock_try = free_lock_try - 1
        if free_lock_try == 0:	# 锁已经1分钟没有心跳了
            old_heart = r.getset('mylock', 1)	# 将lock重置为1,并返回set之前的心跳值
            if old_heart < now_heart:
                time.sleep(10)
                continue
            else:
                break	# 成功获取到锁,退出循环
    else:
        free_lock_try = 6	# 锁有心跳,重置free_lock_try值
        last_heart = now_heart
    time.sleep(10)

def producer_exit():
    """程序正常退出时候自动清理锁"""
    r.delete('mylock')
import atexit
atexit.register(producer_exit)

# 业务代码
while True:
  r.incr('mylock')	# 让锁心跳加一
  ...

我们来看看这段程序都解决了并发锁中的哪些问题:

1、高并发下,多个进程无法同时获取到锁。这里使用的是redis.setnx,如果锁已经存在,其他进程是无法重置锁并获取到锁的。另外当多个进程同时发现有锁已经没有心跳了,使用的是redis.getset将心跳重置为1,都能set成功,但是get出来的值多个进程是不一样的,只有真正获取到锁的进程返回的是之前进程的心跳,而其他进程获取到的都是1。

使用Redis存放token 找Redis教程就上ki4.cc (>^ω^<)

相信做过微信公众号开发的phper都知道,调取微信的接口都需要带上access_token的。access_token是公众号的全局唯一接口调用凭据。这个access_token每天获取的次数有限制,所以,我们需要自己保存。另外这个token也是有有效期的。

2、有锁进程正常退出,可以使用atexit注册进程退出函数删除锁,这里也可以不要,不过下次启动得等新的进程等待几次心跳

3、有锁进程意外退出,退出后心跳不再增加,超过free_lock_try次数后,其他进程会重新设置并获取锁

4、所有进程全都意外退出,这个问题不是锁来关心的,可以使用supervisor进行守护进程。

更多redis知识请关注redis入门教程栏目。

以上就是使用Redis锁处理并发问题的方法的详细内容,更多请关注ki4导航其它相关文章!

使用redis来做计数器完善投票系统 找Redis教程就上ki4.cc (>^ω^<)

首先看应用场景:几年前,微信里许多投票系统。很多人都找好友或朋友圈找人拉票。当时,有一个比较大的乐园也做了这个投票活动,好像是超过一定票数就可以免费玩。我也被好友要求给他投票,一天好像可以投3票还是5票,具体的记不太清了。我当时进去该系统后,给朋友点了投票按钮,发现没有任何反应。我以为是我网络的问题,后来发现是程序的问题。

标签

版权说明
免责声明:本文文章内容由ki4导航网发布,但不代表本站的观点和立场,具体内容可自行甄别.