Skip to content

Sequence的建议 #4

@ermao3

Description

@ermao3

Sequence 的incr 里面建议换成BigDecimal 这样可以支持几乎无限位自增

public class Sequence {
public final static String HEAD = KeyEnum.SEQ.getKey();
private final static byte[] HEAD_B = HEAD.getBytes();
private final byte[] key_b;
private DB db;
private BigDecimal version;

public synchronized String incr(String increments) throws RocksDBException {
    BigDecimal increment = new BigDecimal(increments);

    if (version == null) {
        byte[] value = db.rocksDB().get(key_b);
        if (value == null) {
            version = BigDecimal.ZERO;
        } else {
            version = new BigDecimal(ArrayKits.bytesToString(value));
        }
    }
    version = version.add(increment);
    db.rocksDB().put(key_b, ArrayKits.convertStringToBytes(version.toPlainString()));

    return version.toPlainString();
}

public String get() {
    return version.toPlainString();
}

public Sequence(DB db, byte[] key) {
    this.db = db;
    this.key_b = ArrayKits.addAll(HEAD_B, key);
}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions