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

OSCHINA-MIRROR/jwpttcg-redis-game-transaction

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

Redis-распределённая-транзакция

В крупных играх часто используют распределённые системы, в которых из-за игровой логики часто возникают игровые транзакции. Благодаря особенностям Redis мы можем реализовать распределённую блокировку и распределённую транзакцию. Многие Redis-кластеры не поддерживают функцию транзакций Redis.

Этот фреймворк используется для решения проблемы с отказом распределённых транзакций в кластере Redis. Он основан на распределённой блокировке и позволяет выполнять распределённые транзакции. Поддерживает эксклюзивные блокировки, общие блокировки, блокировки чтения-записи, а также поддерживает откат операций при неудачной попытке фиксации транзакции, что даёт разработчикам больше времени на реализацию игровой логики.

Пример использования эксклюзивной блокировки

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Пример использования блокировки чтения

  1. Создать причину транзакции в GameTransactionCause.
  2. Создать объект блокировки в GameTransactionEntityFactory.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Пример использования метки блокировки

Можно обратиться к тесту для настройки успешной операции чтения по умолчанию.

Пример использования записи

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Создать содержимое метки блокировки с помощью объекта GameTransactionEntity, который получает интерфейс блокировки GameTransactionLockInterface.
  4. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  5. Проанализировать результат фиксации транзакции после выполнения.

Пример использования чтения

  1. Создать причину транзакции в GameTransactionCause.
  2. Создать объект блокировки в GameTransactionEntityFactory.
  3. Создать содержимое метки блокировки с помощью объекта GameTransactionEntity, который получает интерфейс блокировки GameTransactionLockInterface.
  4. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  5. Проанализировать результат фиксации транзакции после выполнения.

Пример принудительной записи

Можно обратиться к тесту для настройки задержки использования блокировки.

Если блокировка существует, она будет занимать время.

Пример:

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Пример блокировки записи с указанием времени

Можно обратиться к тесту для настройки блокировки с указанием времени.

Когда блокировка существует, она будет занимать время.

Пример:

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Пример ожидания блокировки записи

Можно обратиться к тесту для проверки ожидания.

При неудачной блокировке система будет пытаться проверять блокировку каждую секунду до истечения установленного времени ожидания.

Пример:

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Пример отката транзакции с блокировкой записи

Можно обратиться к тесту для отката.

При неудачном завершении транзакции система выполнит откат в соответствии с прогрессом фиксации.

Пример:

  1. Создать причину транзакции в GameTransactionCauseImpl.
  2. Создать объект блокировки в GameTransactionEntityFactoryImpl.
  3. Зафиксировать объект блокировки и транзакцию в transactionService.commitTransaction.
  4. Проанализировать результат фиксации транзакции после выполнения.

Фреймворк уже интегрирован с Spring и Redis-кластером.

Код развёртывается через Maven.

Эта структура была успешно использована в двухлетней разработке проекта мобильной игры с миллиардами DAU (уникальных пользователей в день), где она показала стабильную работу.

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

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

Введение

В крупных играх часто используется распределённая система, в которой из-за игровой логики часто происходят игровые транзакции. Используя некоторые особенности Redis, мы можем реализовать распределённые блокировки и распределённые транзакции. Многие кластеры Redis не поддерживают транзакционные функции Redis. Этот фреймворк предназначен для реше... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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