zoukankan      html  css  js  c++  java
  • 解决Redis分布式锁——死锁问题

    一、 Redis分布式锁实现原理

    SETNX key value //如果key不存在,则创建并赋值
    EXPIRE key seconds //设置key的生存时间,当key过期(生存时间为0),会自动删除

    存在风险:SETNX和EXPIRE 为两个指令,如果设置了SETNX后程序崩溃,EXPIRE未成功执行则会出现资源锁死的情况。
    二、针对该问题,redis 在2.6.12版本过后增加新的解决方案

    set key value [expiration EX seconds|PX milliseconds] [NX|XX]

    EX seconds:将键的过期时间设置为 seconds 秒。 SET key value EX seconds 等同于 SETEX key seconds value
    PX millisecounds:将键的过期时间设置为 milliseconds 毫秒。 SET key value PX milliseconds 等同于 PSETEX key milliseconds value
    NX:只在键不存在的时候,才对键进行设置操作。 SET key value NX 等同于 SETNX key value
    XX:只在键已经存在的时候,才对键进行设置操作
    三、例子

    set name zhangsan EX 10 NX

    当 "name" 不存在时进行设置,同时设置超时时间为10s(将SETNX和EXPIRE合二为一)
    SET操作成功后,返回的是OK,失败返回NIL

  • 相关阅读:
    随笔练习
    获得屏幕相关的辅助类
    C# 下sqlite简单使用
    XP系统下 VS2010 选中行崩溃
    Custome Buble Data Point
    RIA
    Chart Style
    d3js
    TreeView
    [Java入门笔记] Java语言简介
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/13260265.html
Copyright © 2011-2022 走看看