使用redisson简单实现分布式锁

什么是分布式锁

        在分布式项目中, 常常伴随着多线程同时操作一个数据的情况,比较常见的就是淘宝抢单的情况,多个人抢一件商品时,正常情况下只有一个人才能获得商品,但是在分布式项目中,会存在多个线程在多个服务下,同时操作一个数据的情况,可能有人要问了,我们加一个Java锁不行吗?在做单体项目的时候我也是这么 想的,但是java锁只能锁同一个服务的数据,但是分布式项目中往往存在多个服务,我们的Java锁,是无法完全锁住的,这个时候我们就可以考虑使用分布式锁。

分布式锁的种类

  • 基于数据库实现的分布式锁
  • 基于redis实现的分布式锁
  • 基于zookeeper实现的分布式锁
  • 使用redisson实现分布式锁

分布式锁的实现方案

        分布式锁可以简单的理解为,在分布式项目中实现的数据锁,既然我们不能使用项目中的锁来得到线程安全,那么我们需要借助外界存储来实现,例如我们可以使用redis作为中间件,redis本身就提供分布式锁,我们可以通过lua脚本控制来对redis加锁,间接实现了线程安全,可能有朋友就要问了,为什么要使用lua脚本,不能直接用代码控制呢?使用redis的话,大部分公司应该都是多节点的,少部分是单节点的,如果你是单节点使用代码控制问题也不大,但是如果是多节点的,使用lua脚本控制就容易的多,因为lua脚本执行的命令是具有原子性的。

使用redisson简单实现分布式锁

        由于公司今天紧急添加分布式锁,所以使用了已经比较成型的分布式锁框架redisson,他的内部也是redis+lua脚本实现的,内部拥有很多分布式场景,可以轻松实现分布式锁,我们先来感受一下,redisson的强大。

第一步:选择心仪的jar包

通过我们常用的maven仓库来筛选想要的redisson版本。链接如下:
https://mvnrepository.com/artifact/org.redisson/redisson

第二步:通过maven引入jar包

        <!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.12.0</version>
        </dependency>

第三步:启动redis

在这里插入图片描述

第四步:配置redis连接

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public Redisson redisson() {
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();
        singleServerConfig.setAddress("redis://127.0.0.1:6379").setDatabase(15);
        singleServerConfig.setPassword("123456");
        return (Redisson) Redisson.create(config);
    }

}

第五步:获取分布式锁

  • 通过spring注入获取redisson对象
    @Autowired
    private Redisson redisson;

第六步:加锁解锁

    public void demo() {
        String lockKey = "lock";
        RLock lock = redisson.getLock(lockKey);
        try {
            lock.lock();
            System.out.println("抢单");
        } finally {
            lock.unlock();
        }
    }

总结

本次与分布式锁的相遇非常的突然,由于需求变化,突然需要使用分布式锁来进行控制,对于没有概念的我来说是一次挑战,查询了很多资料后,为了安全起见,使用了成熟的redisson来做分布式锁,后续还会分析redisson源码,手动实现一个分布式锁,关于分布式锁的知识点,未来会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值