Simba-Distributed-Mutex分布式锁服务
Simba 旨在提供易用、灵活的分布式锁服务,支持多种存储后端实现:关系型数据库、Redis、Zookeeper。
安装
Gradle
Kotlin DSL
val simbaVersion = "0.3.2"; implementation("me.ahoo.simba:simba-spring-boot-starter:${simbaVersion}")
Maven
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>demo</artifactId> <properties> <simba.version>0.3.2</simba.version> </properties> <dependencies> <dependency> <groupId>me.ahoo.simba</groupId> <artifactId>simba-spring-boot-starter</artifactId> <version>${simba.version}</version> </dependency> </dependencies> </project>
application.yaml
simba: jdbc: enabled: true # redis: # enabled: true spring: datasource: url: jdbc:mysql://localhost:3306/simba_db username: root password: root
Optional-1: JdbcMutexContendService
Kotlin DSL
val simbaVersion = "0.3.2"; implementation("me.ahoo.simba:simba-jdbc:${simbaVersion}")
create table simba_mutex ( mutex varchar(66) not null primary key comment 'mutex name', acquired_at bigint unsigned not null, ttl_at bigint unsigned not null, transition_at bigint unsigned not null, owner_id char(32) not null, version int unsigned not null );
Optional-2: RedisMutexContendService
Kotlin DSL
val simbaVersion = "0.3.2"; implementation("me.ahoo.simba:simba-redis:${simbaVersion}")
Optional-3: ZookeeperMutexContendService
Kotlin DSL
val simbaVersion = "0.3.2"; implementation("me.ahoo.simba:simba-zookeeper:${simbaVersion}")
Examples
使用入门
MutexContender
MutexContendService contendService = contendServiceFactory.createMutexContendService(new AbstractMutexContender(mutex) { @Override public void onAcquired(MutexState mutexState) { log.info("onAcquired"); } @Override public void onReleased(MutexState mutexState) { log.info("onReleased"); } }); contendService.start();
SimbaLocker
try (Locker locker = new SimbaLocker("mutex-locker", this.mutexContendServiceFactory)) { locker.acquire(Duration.ofSeconds(1)); /** * doSomething */ } catch (Exception e) { log.error(e.getMessage(), e); }
Scheduler
public class ExampleScheduler extends AbstractScheduler implements SmartLifecycle { public ExampleScheduler(MutexContendServiceFactory contendServiceFactory) { super("example-scheduler", ScheduleConfig.ofDelay(Duration.ofSeconds(0), Duration.ofSeconds(10)), contendServiceFactory); } @Override protected String getWorker() { return "ExampleScheduler"; } @Override protected void work() { if (log.isInfoEnabled()) { log.info("do some work!"); } } }
Use Cases
评论
RedLock分布式锁
RedLock是一个使用Python和Redis实现的分布式锁。实现了来自 @antirez 的 RedLock算法。示例代码:from redlock import RedLock# By defa
RedLock分布式锁
0
FastLock分布式锁
基于JDKLock接口实现的分布式锁,使用起来与jdklock一致。方便与已有项目无缝接入。底层实现可以使用redis(已支持)、zookeeper(即将支持)以及自定义实现。使用样例:FastLoc
FastLock分布式锁
0
SherlockPython 分布式锁
Sherlock是一个易用的Python分布式进程内锁机制库,你可选择锁同步的不同后台。示例代码:import sherlockfrom sherlock import Lock# Configure
SherlockPython 分布式锁
0
spring-boot-lock-starterRedis 分布式锁
基于redis的分布式锁spring-boot starter组件,使得项目拥有分布式锁能力变得异常
spring-boot-lock-starterRedis 分布式锁
0