小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与「掘力星计划>」,赢取创作大礼包,挑战创作激励金。
概述
本文主要是讲述分布式锁的实现和代码解析。
Redis 分布式锁
大家项目中都会使用到分布式锁把,通常用来做数据的有序操作场景,比如一笔订单退款(如果可以退多次的情况)。或者用户多端下单。
Maven 依赖
我主要是基于 Spring-Boot 2.1.2
+ Jedis
进行实现
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
配置文件
application.properties
配置文件内容如下:
1 | shell复制代码spring.redis.host=127.0.0.1 |
接口定义
接口定义,对于锁我们核心其实就连个方法 lock
和 unlock
.
1 | java复制代码public interface RedisLock { |
分布式锁实现
我的实现方式是通过 setnx 方式实现了,如果存在 tryLock
逻辑的话,会通过 自旋
的方式重试
1 | java复制代码// AbstractRedisLock.java 抽象类 |
测试代码
最后再来看看如何使用吧. (下面是一个模拟秒杀的场景)
1 | java复制代码@RunWith(SpringRunner.class) |
总结
本文是 Redis 锁的一种简单的实现方式,基于 jedis
实现了锁的重试操作。
但是缺点还是有的,不支持锁的自动续期,锁的重入,以及公平性(目前通过自旋的方式实现,相当于是非公平的方式)。
参考文档
本文转载自: 掘金