文档章节

redis-game-transaction

s
 snowcattle
发布于 2016/12/15 18:06
字数 1010
阅读 32
收藏 1

README.md

Redis-分布式-事务

在大型游戏中经常使用分布式,分布式中因为游戏逻辑会经常游戏事务,借助redis某些特性我们可以实现分布式锁和分布式事务。很多redis集群不支持redis的事务特性。
这个框架用来解决分布式服务器下redis集群事务失效的情况下多线程分布式锁和分布式锁,支持独占锁,共享锁,读写锁,并且支持事务提交失败情况下的回滚操作,让开发者可以有更多时间侧重游戏逻辑.

互斥锁使用例子

可参考test下的entity.

  1. 生成事务原因,GameTransactionCauseImpl里面构造.
  2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造TimeMutexEntity.
  3. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
  4. 后去事务提交结果,根据返回值做出判断.

读取锁使用例子

可参考test下的read 可以设置默认是否成功读取到

  1. 生成读取事务原因GameTransactionCause里面已经构造好了.
  2. 生成读取锁实体GameTransactionEntityFactory里面已经构造好了.
  3. 提交读取锁实体跟事务transactionService.commitTransaction里面提交.
  4. 后去事务提交结果 根据返回值做出判断.

标记锁使用例子

可参考test下的lockattchment可以设置默认是否成功读取到

写锁例子如下

  1. 生成事务原因,GameTransactionCauseImpl里面构造.
  2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造.
  3. 生成锁标记内容 GameTransactionEntity对象获取GameTransactionLockInterface锁使用setContent
  4. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
  5. 后去事务提交结果,根据返回值做出判断.

读锁例子如下

  1. 生成读取事务原因GameTransactionCause里面构造.
  2. 生成读取锁实体GameTransactionEntityFactory里面构.
  3. 生成锁标记内容 GameTransactionEntity对象获取GameTransactionLockInterface锁使用setContent
  4. 提交读取锁实体跟事务transactionService.commitTransaction里面提交.
  5. 后去事务提交结果 根据返回值做出判断.

强制写锁使用例子如下

可参考test下的force
当锁存在的情况,延迟锁占用时间。
例子如下
1. 生成事务原因,GameTransactionCauseImpl里面构造.
2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造ForceEntity.
3. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
4. 后去事务提交结果,根据返回值做出判断.

带时间写锁使用例子如下

参考test下的testlock.
当锁存在的情况,延迟锁占用时间。
例子如下

  1. 生成事务原因,GameTransactionCauseImpl里面构造.
  2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造TestTimeMutexEntity.
  3. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
  4. 后去事务提交结果,根据返回值做出判断.

带时间等待写锁使用例子如下

参考test下的wait.当锁失败的情况下,会尝试每秒检查锁,直到设置的等待时间结束.例子如下

  1. 生成事务原因,GameTransactionCauseImpl里面构造.
  2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造WaitMutexEntity.
  3. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
  4. 后去事务提交结果,根据返回值做出判断.

带事务回滚写锁使用例子如下

参考test下的rollback.当事务提交失败的情况下,根据提交进度进行rollback.例子如下

  1. 生成事务原因,GameTransactionCauseImpl里面构造.
  2. 生成锁实体,GameTransactionEntityFactoryImpl里面构造RollbackMutexEntity.
  3. 提交锁实体跟事务,transactionService.commitTransaction里面提交.
  4. 后去事务提交结果,根据返回值做出判断.

代码最后通过maven部署

  • 作者qq 330258845
  • QQ群310158485

© 著作权归作者所有

上一篇: game-excutor
下一篇: game-excutor
s
粉丝 1
博文 2
码字总数 1680
作品 2
朝阳
私信 提问
使用Python操作Redis

使用Python操作Redis 2014年5月15日 by debugo · 8条评论 1. 安装pyredis 首先安装pip <SHELL># apt-get install python-pip......<SHELL># pip install --proxy=http://172.1.2.6:8080 red......

Airship
2016/01/28
67
0
Redis中的事务

Redis中的事务非常弱,总的理解起来,只适合做乐观的并发控制 以下摘自网络 Jedis Pipeline & Transaction Transaction Redis 提供了简单的"事务"能力,MULTI、EXEC、DISCARD、WATCH/UNWATCH...

varvelworld
2015/05/17
8
0
mysql 主从设置

导出mysqldump --single-transaction --skip-opt --create-option -F --master-data=2 -q -B -uroot gamerelease > gamerel0726.sql 数据库game_release,用户名密码:game/!123456' db上设置......

wb84451208
2014/04/17
0
0
基于 Redis 实现分布式应用限流

原文出处:冷冷gg 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。 前几天在DD的公众号,看了一篇关于使用 瓜娃 ...

冷冷gg
2017/09/07
0
0
php-redis中文参考手册_multi_exec_discard_watch_unwatc...

multi, exec, discard. Description Enter and exit transactional mode. 进入、退出事务处理模式。 Parameters (optional) or . Defaults to . A block of commands runs as a single tran......

四云麒麟
2012/07/17
746
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
18
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部