zoukankan      html  css  js  c++  java
  • Redis分布式锁

    加锁

    //Redis 2.6.12 之后
    SET lock_1 val EX 30 NX
    

    解锁

    lua 脚本

    // 判断锁是自己的,才释放
    if redis.call("GET",KEYS[1]) == ARGV[1]
    then
        return redis.call("DEL",KEYS[1])
    else
        return 0
    end
    

    流程

    加锁:SET lock_key $unique_id EX $expire_time NX
    操作共享资源
    释放锁:Lua 脚本,先 GET 判断锁是否归属自己,再 DEL 释放锁

    常见问题

    基于 Redis 的实现分布式锁,前面遇到的问题,以及对应的解决方案:

    死锁:设置过期时间
    过期时间评估不好,锁提前过期:守护线程,自动续期
    锁被别人释放:锁写入唯一标识,释放锁先检查标识,再释放

  • 相关阅读:
    微信公众平台开发(51)会员卡
    iOS UIViewController的瘦身计划
    NSProxy
    Xcode
    NSPredicate
    NSArray、NSDictionary
    iOS Runtime
    iOS UmbrellaFramework
    iOS UmbrellaHeader
    iOS OCR
  • 原文地址:https://www.cnblogs.com/aworkstory/p/14875185.html
Copyright © 2011-2022 走看看