# Simba **Repository Path**: AhooWang/Simba ## Basic Information - **Project Name**: Simba - **Description**: 易用、灵活的分布式锁服务,支持多种存储后端实现:关系型数据库、Redis、Zookeeper。 - **Primary Language**: Kotlin - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://github.com/Ahoo-Wang/Simba - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 3 - **Created**: 2021-11-25 - **Last Updated**: 2025-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Lock, Distributed, 锁, 分布式, 分布式锁 ## README # Simba(Distributed Mutex) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub release](https://img.shields.io/github/release/Ahoo-Wang/Simba.svg)](https://github.com/Ahoo-Wang/Simba/releases) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/me.ahoo.simba/simba-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/me.ahoo.simba/simba-core) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/41f28a111d9c457ab7a9aae6861185eb)](https://www.codacy.com/gh/Ahoo-Wang/Simba/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Ahoo-Wang/Simba&utm_campaign=Badge_Grade) [![codecov](https://codecov.io/gh/Ahoo-Wang/Simba/branch/main/graph/badge.svg?token=P9EMJKJ2I5)](https://codecov.io/gh/Ahoo-Wang/Simba) ## 介绍 Simba 旨在提供易用、灵活的分布式锁服务,支持多种存储后端实现:关系型数据库、Redis、Zookeeper。 ## 安装 ### Gradle > Kotlin DSL ``` kotlin implementation("me.ahoo.simba:simba-spring-boot-starter:${simbaVersion}") ``` ### Maven ```xml 4.0.0 demo simbaVersion me.ahoo.simba simba-spring-boot-starter ${simba.version} ``` ### application.yaml ```yaml simba: jdbc: enabled: true # redis: # enabled: true spring: datasource: url: jdbc:mysql://localhost:3306/simba_db username: root password: root ``` ### Optional-1: JdbcMutexContendService ![JdbcMutexContendService](docs/JdbcMutexContendService.png) > Kotlin DSL ``` kotlin implementation("me.ahoo.simba:simba-jdbc:${simbaVersion}") ``` ```sql 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 ``` kotlin implementation("me.ahoo.simba:simba-redis:${simbaVersion}") ``` ### Optional-3: ZookeeperMutexContendService > Kotlin DSL ``` kotlin implementation("me.ahoo.simba:simba-zookeeper:${simbaVersion}") ``` ## Examples [Simba-Examples](https://github.com/Ahoo-Wang/Simba/tree/main/simba-example) ## 使用入门 ### MutexContender ```java 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 ```java try (Locker locker = new SimbaLocker("mutex-locker", this.mutexContendServiceFactory)) { locker.acquire(Duration.ofSeconds(1)); /** * doSomething */ } catch (Exception e) { log.error(e.getMessage(), e); } ``` ### Scheduler ```java 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 - [Govern-EventBus](https://github.com/Ahoo-Wang/govern-eventbus/tree/master/eventbus-core/src/main/java/me/ahoo/eventbus/core/compensate) - [CoSky](https://github.com/Ahoo-Wang/CoSky/blob/main/cosky-rest-api/src/main/kotlin/me/ahoo/cosky/rest/stat/StatServiceScheduler.kt)