1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/coodyer-coody-elock

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Коуди-Илок

Мотивация:

В процессе разработки реальных продуктов часто приходится использовать распределённые блокировки. Наиболее зрелым из них является redisson (по мнению автора).

Однако для автора, который предпочитает чистоту и не любит излишеств, использование redisson только увеличило объём на 12 Мбайт, что вызвало у него сильное раздражение.

Кроме того, конфигурация redisson слишком сложна и тяжеловесна, и использование его исключительно в качестве распределённой блокировки кажется автору излишним.

Поэтому автор решил разработать собственный плагин для распределённых блокировок.

Примечание: этот плагин будет постоянно развиваться в будущем, предоставляя такие функции, как аспекты, поддержка Redis кластера и Zookeeper, и будет принадлежать Coody Framework и опубликован в центральном репозитории Maven. Ссылка: https://gitee.com/coodyer/coody-icop

Архитектура программного обеспечения

Плагин распределённой блокировки, основанный на функции подписки jedis для Redis.

Использование

1. Инициализация JedisPool
// Прямое инициализирующее соединение с пулом
ELockCache.initJedisPool(JediPool);
// Передача IP, порта, пароля, времени ожидания для инициализации
ELockCache.initJedisPool(host, port, secretKey, timeOut);
// Передача IP, порта, пароля, времени ожидания, конфигурации JedisPool для инициализации
ELockCache.initJedisPool(host, port, secretKey, timeOut, jedisPoolConfig);

Примечание: если пароль не требуется, передайте null.

2. Блокировка

LockHandle.lock(key, expireSecond);

3. Снятие блокировки

LockHandle.unLock(key);

4. Общее представление

Изображение

5. Примечание

Код для блокировки (LockHandle.lock(key, expireSecond);) должен быть заключён в try{}catch{} и освобождён в finally (LockHandle.unLock(key);).

	LockHandle.lock(key, 100);
	for (int i = 0; i < 10; i++) {
	System.out.println(Thread.currentThread().getId() + ">>" + i);
	Thread.sleep(100l);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
LockHandle.unLock(key);
}```


###### 6. Тестовый код

```package org.coody.framework.elock.test;

import java.util.ArrayList;
import java.util.List;

import org.coody.framework.elock.LockHandle;
import org.coody.framework.elock.redis.ELockCache;

/**
 * Распределённая блокировка тестирования
 * @author Coody
 *
 * 2018年12月14日
 * 
 * @blog 54sb.org
 */
public class ELockTest {

// Ключ для блокировки
static String key = "TESTLOCK_1";

static {
// Инициализировать соединение Jedis
ELockCache.initJedisPool("127.0.0.1", 16379, "123456", 10000);
}

public static void main(String[] args) {
List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
test();
}
});
threads.add(thread);
}
// Запустить десять потоков
for (Thread thread : threads) {
thread.start();
}
}

// Метод блокировки
private static void test() {
try {
LockHandle.lock(key, 100);
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getId() + ">>" + i);
Thread.sleep(100l);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
LockHandle.unLock(key);
}
}
}```


###### 7. Эффект выполнения

![Изображение](https://images.gitee.com/uploads/images/2018/1214/184647_f99ea98c_1200611.png "c.png")

### Авторские права:

Этот проект содержит тестовые примеры исходного кода.

Автор: Coody.

Права: ©2014-2020 Test404 All right reserved. Все права защищены.

Адрес обратной связи: 644556636@qq.com

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/coodyer-coody-elock.git
git@api.gitlife.ru:oschina-mirror/coodyer-coody-elock.git
oschina-mirror
coodyer-coody-elock
coodyer-coody-elock
master