美文网首页redis
redis分布式锁--001(超时问题)

redis分布式锁--001(超时问题)

作者: 天的安排 | 来源:发表于2019-08-12 20:16 被阅读0次

超时问题

Redis 的分布式锁不能解决超时问题,如果在加锁和释放锁之间的逻辑执行的太长,以至

于超出了锁的超时限制,就会出现问题。因为这时候锁过期了,第二个线程重新持有了这把锁,
但是紧接着第一个线程执行完了业务逻辑,就把锁给释放了,第三个线程就会在第二个线程逻
辑执行完之间拿到了锁。
为了避免这个问题,Redis 分布式锁不要用于较长时间的任务。如果真的偶尔出现了,数
据出现的小波错乱可能需要人工介入解决。



有一个更加安全的方案是为 set 指令的 value 参数设置为一个随机数,释放锁时先匹配
随机数是否一致,然后再删除 key。但是匹配 value 和删除 key 不是一个原子操作,Redis 也
没有提供类似于 delifequals 这样的指令,这就需要使用 Lua 脚本来处理了,因为 Lua 脚本可
以保证连续多个指令的原子性执行。

# delifequals
if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

相关文章

  • redis分布式锁--001(超时问题)

    超时问题 于超出了锁的超时限制,就会出现问题。因为这时候锁过期了,第二个线程重新持有了这把锁,但是紧接着第一个线程...

  • redis

    1.redis 分布式锁及问题 (1)实现: 加锁:setnx、解锁:del、锁超时:expire (2)可能出现...

  • Redis深度历险-小笔记

    应用篇 1、Redis分布式锁 超时问题 如果在加锁和释放锁之间的逻辑执行的太长,以至于超出了锁的超时限制,就会出...

  • redis分布式锁

    setnx 和 expire 组合在一起的原子指令,它就是分布式锁的奥义所在 超时问题Redis 的分布式锁不能解...

  • 使用JVM提高秒杀系统性能

    前提 使用redis分布式锁,解决秒杀系统库存为零 继续扣减问题 redis分布式锁出现的问题 使用redis锁,...

  • 死磕 java同步系列之redis分布式锁进化史

    问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点...

  • Redis的基本使用(-) 分布式锁

    Redis的基本使用(-) 分布式锁 1、Redis做分布式锁 分布式锁是Redis较常见的使用场景。 问题场景:...

  • 常见问题对应的文章

    redis分布式锁实现方案 单点问题Redission redLock set nx原语要加超时时间,避免客户端d...

  • 分布式锁之Redis实现(最终版)

    我们接着上篇继续了解redis实现分布式锁的相关问题,先来解释几个问题1.为什么不直接使用expire设置超时时间...

  • java复习知识点清单-考面经

    电商 并发性能问题 B+tree 优点 原理 redis 分布式锁nx解决原子性检查与设值的原子性问题超时时间设置...

网友评论

    本文标题:redis分布式锁--001(超时问题)

    本文链接:https://www.haomeiwen.com/subject/cljpjctx.html