Redis实现分布式锁【六】

1. 概述

  随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景,而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的相互干扰,以保证数据的一致性,在这样情况下,我们就需要用到分布式锁。
  简单说就是在分布式系统中,会出现多个JVM中线程竞争共享资源,此时线程锁已经不适用了(线程锁只能解决同一个JVM中多线程的并发安全问题),必须要在多个JVM外部引入一个具有锁功能的组件,该组件叫做分布式锁。
  实现分布式锁有三种方式,数据库锁、缓存锁、Zookeeper锁。下面主要讲一个使用Redis实现的分布式锁。

2. Redis分布式锁

2.1 分布式锁考虑的因素

   若想要实现的分布式锁可用,必须要考虑以下四个必要因素:
   (1). 互斥性,任意时刻,只有一个客户端获取到锁。
   (2). 不会发生死锁,当客户端获取到锁之后,客户端奔溃了,要保证锁会被释放。
   (3). 可重入锁,一个线程获取到锁之后,允许它再次获取锁。
   (4). 解铃还须系铃人,要确保加锁和解锁的是同一个客户端。

2.1 Redis分布式锁实现

  redis可以使用setnx来实现分布式锁,但是在实现过程中必须要考虑上面的4个要素。如果不想自己实现Redis分布式锁,可以使用Redis的工具类Redisson,Redisson中已经实现了分布式锁,并且非常简单易用。

public static void main(String[] args) {

    Config config = new Config();
    config.useSingleServer().setAddress("redis://127.0.0.1:6379");
    config.useSingleServer().setPassword("redis1234");
    
    //获取redisson客户端
    final RedissonClient client = Redisson.create(config);  
    //获取锁对象
    RLock lock = client.getLock("lock1");
   
    try{
    	//加锁
        lock.lock();
    }finally{
    	//解锁
        lock.unlock();
    }
}

备注: 本博客用于简单记录下分布式锁。具体想要看Redis实现的分布式锁原理,请查看该博客:点击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值