游戏后台生成唯一ID

游戏后台为了处理海量玩家的交互,需要生成全局唯一ID。文章介绍了几种生成方式,如数据库自增、Redis原子操作、UUID和SnowFlake算法。重点讲述了MMO游戏中一种64位ID生成策略,类似于SnowFlake,但根据游戏特性调整位段,包含大区号、虚拟机器号、功能号、实例ID、校验序号和序列号。在应对UID生成突增和自适应时间超前重启的情况时,通过校验序号自增和位段调整避免了ID冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏后台生成唯一ID

  MMO游戏后台通常需要由大量服务器来共同承载海量玩家,虽然玩家可能分布在不同的游戏大区,但是他们可能会通过跨服等等方式进行各种交互。游戏中的角色,装备,物品等需要生成一个全局唯一ID标识,便于辨别不同玩家,不同装备,也方便定位外网问题。

  常见的分布式全局唯一ID生成方式包括使用数据库自增,使用Redis的原子操作INCR和INCRBY,使用UUID,SnowFlake算法等等。前面两种方式均需要产生一次异步调用,在MMO中,海量玩家会集中在一个场景中进行PK,做任务,打怪等,场景内业务逻辑复杂,为了降低编码复杂度,减少BUG几率,通常会选择使用本地算法来生成全局唯一ID。

  UUID方式生成的ID比较长,通常需用字符串表示,作为内存数据主键或者数据库主键它的查找效率比不上直接使用整数类型生成的ID做主键。同时它对业务来说是一串无规则的字符串,不能根据相关业务规则进行调整。

  SnowFlake算法是开源的分布式生成算法,它是一个本地生成算法,它可以生成一个位的整数,具体生成的位结构如下图:
在这里插入图片描述
  SnowFlake算法12位序列号支持一个节点同一毫秒内产生4096个ID,一秒内可以产生400多万个UID,其41位的时间戳可以使用69年。

  下面讲述一种MMO中的分布式ID生成方式,它会生成一个64位的整数ID,核心思想与SnowFlake类似。同时会根据游戏的特性对64位ID中的位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值