StackTc
2018-06-28 02:18
采纳率: 61.9%
浏览 892

redis锁求解,好像是分布式锁

RedisLock lock = new RedisLock(redisTemplate, userid, 50000, 60000);
            try {
                if(lock.lock()) {
                    userInfo = userService.doSomething(xxxxx);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                lock.unlock();
            }

能跟我讲一下RedisLock中4个参数的作用,以及这个锁跟普通的jdk里面的Lock有什么区别吗

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • oyljerry 2018-06-28 03:25
    已采纳

    redisTemplate -- 你的jedis对象
    userid -- 锁的名称
    50000, 60000 --- 锁的超时时间

    分布式锁主要是可以在多个机器之间进行同步,而jdk的Lock都是进程内线程之间同步,同时分布式锁有各种防止超时,过期,大并发量竞争等机制

    点赞 打赏 评论
  • 樊城城 2018-06-28 05:55

    Lock能够让代码块原子执行,但是比synchronized更加强大,Lock具有嗅探锁定、多路分支通知等功能。

    点赞 打赏 评论
  • jjjay1258 2018-06-28 09:32

    常规的synchronized和jdk的lock都是只在java进程内有效,当涉及分布式环境时其作用域就不满足了。
    redis实现的分布式锁原理是setNX时成功或失败会返回1或0,由于这个操作具有原子性,
    所以可以保证并发情况下同一时间只有一个线程可以设置成功获取锁。
    redisTemplate 是连接对象
    userid 是锁的标识
    50000, 60000 推测一个是最大等待获取锁时间另一个是获取锁后超时释放锁时间

    点赞 打赏 评论

相关推荐 更多相似问题