通用的数据库主键生成器小工具

1.解决问题

1.1. 当数据量上升到一定地步之后,数据就需要进行分表存储以及数据缓存(一般redis常见);

1.2. 数据有一般有唯一主键,分表后一般需要保证所有表的id的不冲突和一致.

2.使用方式 及特点:

2.1. 使用方式:

public class Util extends RedisSequenceFactory {

    
}

同时完成Util的代码编写即可。generateLongKey()返回Id主键,getStepLength()由子类返回步长;

2.2. 特点:扩展类需要进行类的初始化,否则无法通过编译器编译;

3.简化的设计的代码

import redis.clients.jedis.JedisCommands;

public abstract class RedisSequenceFactory {
    private  boolean inited = false;
    private  Long starterIndex;
    private  JedisCommands jedis;
    private  Class clazz;
    private RedisSequenceFactory() {

    }
    protected RedisSequenceFactory(Long starterIndex, JedisCommands jedis, Class clazz) {
        this.starterIndex = starterIndex;
        this.jedis = jedis;
        this.clazz = clazz;
        inited = true;
    }
    public Long generateLongKey() {
        String key = clazz.getName();
        long nextIndex;
        synchronized (jedis) {
            nextIndex = jedis.incrBy(key, getStepLength());
        }
        return nextIndex;
    }
    public abstract int getStepLength();
}

4.TIP:

提高性能的相关代码可以自行实施,目前公司够用了。等卡的时候在修改

猜你喜欢

转载自my.oschina.net/Aruforce/blog/1801775