基于雪花算法的增强版ID生成器

sequence

  • 解决了时间回拨的问题
  • 无需手动指定workId, 微服务环境自适应
  • 可配置化
    @Bean
    public Sequence sequence() {
        SequenceConfig sequenceConfig = new SimpleSequenceConfig();
        return new Sequence(sequenceConfig);
    }
    @Autowired
    private Sequence sequence;

    public long generateId() {
        return sequence.nextId();
    }
  • io.github.mocreates.config.DefaultSequenceConfig
  • io.github.mocreates.config.SimpleSequenceConfig

前者需要显式地指定 workerId、datacenterId,可以结合数据库来使用,后者是利用网卡信息进行自适应

字段名 释义 默认值 twepoch 可以被设置为最接近项目启用前的某个时间点(unix 时间戳) 1665817757000L workerIdBits 机器位所占的bit位数 19L datacenterIdBits 数据标识位所占的bit位数 0L sequenceBits 毫秒内自增位数 3L workerId 机器位 datacenterId 数据位 0L inetAddress 网络相关信息

CREATE TABLE worker_node (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  node_info varchar(512) NOT NULL,
  gmt_create datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  gmt_modify datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DB WorkerID Assigner for UID Generator';
    @Bean
    public Sequence sequence(WorkerNodeMapper workerNodeMapper) throws UnknownHostException {
        WorkerNode workerNode = new WorkerNode();
        InetAddress localHost = InetAddress.getLocalHost();
        workerNode.setNodeInfo(localHost.toString());
        workerNodeMapper.insertSelective(workerNode);
        DefaultSequenceConfig defaultSequenceConfig = new DefaultSequenceConfig();
        defaultSequenceConfig.setWorkerId(workerNode.getId());
        return new Sequence(defaultSequenceConfig);
    }
    @Autowired
    private Sequence sequence;

    public long generateId() {
        return sequence.nextId();
    }

MacBook Pro (13-inch, M1, 2020) 8C 16G

    private static final DefaultSequenceConfig SEQUENCE_CONFIG = new DefaultSequenceConfig();

    static {
        SEQUENCE_CONFIG.setSequenceBits(22);
        SEQUENCE_CONFIG.setWorkerIdBits(0);
        SEQUENCE_CONFIG.setDatacenterIdBits(0);
        SEQUENCE_CONFIG.setTwepoch(System.currentTimeMillis());

        SEQUENCE_CONFIG.setWorkerId(0L);
        SEQUENCE_CONFIG.setDatacenterId(0L);
    }
    private static final Sequence SEQUENCE = new Sequence(SEQUENCE_CONFIG);
@BenchmarkMode(Mode.Throughput)
@Threads(10)
@Warmup(iterations = 3, time = 10, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 10, timeUnit = TimeUnit.SECONDS)
@State(value = Scope.Benchmark)
@Fork(1)
@OutputTimeUnit(TimeUnit.SECONDS)

Benchmark Mode Cnt Score Error Units SingleNodeSequenceTest.nextIdTest thrpt 10 27825573.565 ± 962298.054 ops/s

如果对qps性能要求较高,可以适当调整sequenceBits

Original: https://www.cnblogs.com/think-in-java/p/16797882.html
Author: 陈其苗
Title: 基于雪花算法的增强版ID生成器



相关阅读

Title: Python 能写游戏吗?有没有什么开源项目?

python可以制作所有的2D游戏,所有的2D游戏,所有的2D游戏

对了以下游戏皆是小学六年级的代码水平

如有不适,赶快学习

1、小鸟管道

使用模块:pygame
代码长度:139行
行哥评语:强迫症的克星

基于雪花算法的增强版ID生成器

; 2.是男人就下100层

使用模块:pygame
代码长度:185
行哥评语:今天在座的都是男孩

基于雪花算法的增强版ID生成器

3、五子棋

使用模块:pygame
代码长度:250
行哥评语:最快教会女朋友的互动游戏

基于雪花算法的增强版ID生成器

; 4.连连看

使用模块:pygame
代码长度:351
行哥评语:网络版的连连看可以用python脚本一秒完成

基于雪花算法的增强版ID生成器

5.雷电

使用模块:pygame
代码长度:490
行哥评语:在物质匮乏的年代,这个行哥真玩过通

基于雪花算法的增强版ID生成器

; 6.俄罗斯方块

使用模块:pygame
代码长度:539
行哥评语:被誉为最伟大游戏之一

基于雪花算法的增强版ID生成器

7.魂斗罗

使用模块:pygame
代码长度:698行
行哥评语:3条命通关你信吗

基于雪花算法的增强版ID生成器

; 8.我的世界

使用模块:pyglet
代码长度:902
行哥评语:00后的代码游戏

基于雪花算法的增强版ID生成器

9.坦克大战

使用模块:pygame
代码长度:1086行
行哥评语:最初版塔防游戏

基于雪花算法的增强版ID生成器

; 10.超级玛丽

使用模块:pygame
代码长度:5241行
行哥评语:经典游戏没有之一

基于雪花算法的增强版ID生成器

以上游戏10个有9个都是使用Pygame模块来制作,也就是说简单的了解一下这些单机游戏的原理,学会Pygame的调用函数,将图片、音乐和逻辑组合在一起,你也可以轻松制作一款游戏。这样各种奇葩外挂也随着修改变量来完成,不用再自己找30条命的魂斗罗游戏卡啦,想回忆玩这款游戏可以在之前行哥分享的一篇网站推荐文章–小霸王网站上玩各种童年经典游戏

唯一的一款3D游戏是我的世界,使用的是pyglet模块,编写的代码量不到1000行,想学习还是很简单。对了现在网易代理的《我的世界》已经提供了开发者模式,小盆友们已经开始调用命令玩这款游戏了哦,B站是更有各路大神python房子造的飞起,有兴趣的可以了解一下。

行哥的童年是在游戏中度过的,现在的小盆友的童年有些也是在这些游戏中度过的,苍天饶过谁

福利
评论里快说一下你玩过几款游戏

基于雪花算法的增强版ID生成器

链接: https://pan.baidu.com/s/1uzQZViJUMam4pD0EuwYRZg 密码: cn1q

我是一行,你的三连,就是对我最大的鼓励

Original: https://blog.csdn.net/qq_42554007/article/details/122166625
Author: 一行玩python
Title: Python 能写游戏吗?有没有什么开源项目?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/363369/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总