相关疑难解决方法(0)

如何使用Redis创建分布式锁?

在redis文档中,我发现可以通过SETNX实现原始锁:

http://redis.io/commands/setnx

  • C4发送SETNX lock.foo以获取锁

  • 崩溃的客户端C3仍然保留它,因此Redis将回复0到C4.

  • C4发送GET lock.foo来检查锁是否过期.如果不是,它会睡一段时间并从头开始重试.

  • 相反,如果锁定已到期,因为lock.foo上的Unix时间早于当前的Unix时间,C4会尝试执行:

    GETSET lock.foo

  • 由于GETSET语义,C4可以检查存储在key中的旧值是否仍然是过期时间戳.如果是,则获得锁定.

  • 如果另一个客户端(例如C5)比C4快并且通过GETSET操作获得锁定,则C4 GETSET操作将返回未过期的时间戳.C4将从第一步开始重新启动.请注意,即使C4将来设置密钥几秒钟,这也不是问题.

但是,正如一些用户所评论的那样,使用UNIX时间戳作为过期时间需要客户端和服务器的时间完全同步.有没有更好的替代方法在Redis中创建全局/分布式锁?

locking redis

13
推荐指数
3
解决办法
2万
查看次数

如何在Node Js应用程序的多个实例之间同步对象

是否可以锁定Node JS应用程序中的任何对象.

应用程序是否有多个实例可用,某些功能不应该并发运行.如果实例A函数完成,它应解锁该对象/密钥或某个标识符和应用程序的B实例应检查其解锁是否应该运行某些功能.

任何对象或密钥都可用于识别锁定和解锁功能.

如何在具有多个实例的NodeJS应用程序中执行此操作.

concurrency synchronization locking node.js

6
推荐指数
1
解决办法
1561
查看次数

标签 统计

locking ×2

concurrency ×1

node.js ×1

redis ×1

synchronization ×1