在使用hashCode的时候,发现会出现相同id,虽然几率很小。虽然发现并不是hashCode的原因,而是其他逻辑的问题。

  但是还是试着自己写了一个id生成器,有些id是int的,比如说任务id;有些id是long的,比如说玩家id。

先贴代码来看:

private static AtomicInteger id = new AtomicInteger(0);

    public static long getId()
    {
        return (ServerKit.getServerId() & 0xFFFF) << 48 | (System.currentTimeMillis()/1000L & 0xFFFFFFFF) << 16 | id.addAndGet(1) & 0xFFFF;
    }

    private static AtomicInteger IntId = new AtomicInteger(0);

    public static int getIntId()
    {
        return ((int)(System.currentTimeMillis() - 1000000000000L)/1000)<<16L | (IntId.addAndGet(1));
    }

在生成玩家id的时候把服务器的id也参与,便于以后的合服。

因为服务器是多线程,所以就用了 AtomicInteger 类型,不用再使用类似 sync等同步工具。

服务器唯一id生成规则的更多相关文章

  1. 分布式唯一ID生成服务

    SNService是一款基于分布式的唯一ID生成服务,主要用于提供大数量业务数据建立唯一ID的需要;服务提供最低10K/s的唯一ID请求处理.如果你部署服务的CPU资源达到4核的情况下那该服务最低可以 ...

  2. 分布式全局唯一ID生成策略

    为什么分布式系统需要用到ID生成系统 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据库的分库分表后需要有 ...

  3. 分布式系统唯一ID生成方案汇总【转】

    转自:http://www.cnblogs.com/haoxinyue/p/5208136.html 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很 ...

  4. 【系统设计】分布式唯一ID生成方案总结

    目录 分布式系统中唯一ID生成方案 1. 唯一ID简介 2. 全局ID常见生成方案 2.1 UUID生成 2.2 数据库生成 2.3 Redis生成 2.4 利用zookeeper生成 2.5 雪花算 ...

  5. 分布式系统唯一ID生成方案

    分布式系统唯一ID生成方案汇总 数据库自增主键 最常见的方式.利用数据库,全数据库唯一. 优点: 1)简单,代码方便,性能可以接受. 2)数字ID天然排序,对分页或者需要排序的结果很有帮助. 缺点: ...

  6. (4.24)【mysql、sql server】分布式全局唯一ID生成方案

    参考:分布式全局唯一ID生成方案:https://blog.csdn.net/linzhiqiang0316/article/details/80425437 分表生成唯一ID方案 sql serve ...

  7. 开源项目|Go 开发的一款分布式唯一 ID 生成系统

    原文连接: 开源项目|Go 开发的一款分布式唯一 ID 生成系统 今天跟大家介绍一个开源项目:id-maker,主要功能是用来在分布式环境下生成唯一 ID.上周停更了一周,也是用来开发和测试这个项目的 ...

  8. 关于全局唯一ID生成方法

    引:最近业务开发过程中需要涉及到全局唯一ID生成.之前零零总总的收集过一些相关资料,特此整理以便后用 本博客已经迁移至:http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  9. 分布式系统的唯一id生成算法你了解吗?

    在分库分表之后你必然要面对的一个问题,就是id咋生成? 因为要是一个表分成多个表之后,每个表的id都是从1开始累加自增长,那肯定不对啊. 举个例子,你的订单表拆分为了1024张订单表,每个表的id都从 ...

随机推荐

  1. 【地图API】收货地址详解2

    上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...

  2. VS SuppressMessage忽略特定方法的警告信息

    VS在编译源码的时候有很多警告信息,有些时候 我们需要忽略一个特定方法的特定警告信息,于是就用SuppressMessage特性,可是这个特性的参数不太好搞定,还好有VS,Suppressing Co ...

  3. vim语法高亮不起作用解决

    首先将vim更新为最新版yum -y install vim,并安装Vim的加强版vim-enhanced ,以安装支持彩色的组件    yum -y install vim-enhanced 接下来 ...

  4. samba4.1.9安装

    ./configure \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --with-piddir=/run/samba \ ...

  5. ios app 提交评审注意事项

    在网络上看到的一个文档是这样写,原文的出处无法确认了 基本要点 ·         不能导致手机故障(比如崩溃或屏幕问题) ·         长时间/过度使用之后反应仍然很快 ·         应 ...

  6. AndroidStudio小技巧--依赖库

    同步发表于http://avenwu.net/2015/02/12/androidstudio_library_dependency Fork on github https://github.com ...

  7. 用户管理 之 Linux 用户(user)和用户组(group)管理概述

    一.理解Linux的单用户多任务,多用户多任务概念:Linux 是一个多用户.多任务的操作系统:我们应该了解单用户多任务和多用户多任务的概念: 1.Linux 的单用户多任务:单用户多任务:比如我们以 ...

  8. 4M宽带一般最大的下载速度是多少?

    4M宽带理论速度=4Mbit/s=4096 Kbit/s=512 KByte/s宽带速度其实是有两个参数的:上行(上传速度).下行(下载速度),一般宽带标为4M其实是说下载速度是4M(即512KB/每 ...

  9. cocos2d-x-3.0 的改变,由于变得太多,一点点累积吧!

    1.cpp  改成  Point 2.setIsRelativeAnchorPoint() 改成  ignoreAnchorPointForPosition() 3.Layer::create   图 ...

  10. Win7 32bit + Matlab2013b +Visual Studio 2010联合编程配置

    要建立独立运行的C应用程序,系统中需要安装Matlab.Matlab编译器.C/C++编译器以及Matlab C/C++数学库函数和图形库函数. Matlab编译器使用mbuild命令可以直接将C/C ...