Documentation
¶
Overview ¶
generate order id with format:
short id format: YYMMDDxxxxxxxWW long id format: YYMMDDhhmmxxxxxxWW
Index ¶
- Constants
- Variables
- func DecomposeLongOrd(id uint64) (datetime uint32, workerId uint16, sequence uint32)
- func DecomposeOrd(id uint64) (datetime uint32, workerId uint16, sequence uint32)
- func DecomposeSF(id uint64) (elaspedTime uint32, workerId uint16, sequence uint32)
- func DecomposeSF32(id uint32) (elaspedTime uint32, workerId uint16, sequence uint32)
- func DecomposeSeq(id uint64) (workerId uint16, sequence uint64)
- type FlakeIdGenerator
- type OrderIdGenerator
- type SeqIdGenerator
Constants ¶
View Source
const ( ORD_DATE_FORMAT = "060102" // 6 chars ORD_MAX_SEQ = uint32(9999999) // 7 digit chars L_ORD_DATE_FORMAT = "0601021504" // 10 chars L_ORD_MAX_SEQ = uint32(999999) // 6 digit chars ORD_MAX_WORKER_ID = uint16(99) // 2 digit chars ORD_TICKER_UNIT = 1 // in second )
View Source
const ( SHORT_ORDID_IDX = iota LONG_ORDID_IDX )
View Source
const ( SEQ_BITS_WORKER_ID = 10 SEQ_BITS_ID = 63 - SEQ_BITS_WORKER_ID )
View Source
const ( SF_BITS_TIME = 31 // (2**31/3600/24/365 = 68 years) SF_BITS_SEQUENCE = 22 SF_BITS_WORKER_ID = 63 - SF_BITS_TIME - SF_BITS_SEQUENCE SF_TICKER_UNIT = 1 // 1s SF_BITS_TIME32 = 13 // (day-count: 2**13/365 = 22.4 years) SF_BITS_SEQUENCE32 = 17 // (day-limit: 2**17 = 131072) SF_BITS_WORKER_ID32 = 32 - SF_BITS_TIME32 - SF_BITS_SEQUENCE32 // 2 (worker-limit: 2**2 = 4) SF_TICKER_UNIT32 = 86400 // 1d )
View Source
const ( SF_64_IDX = iota SF_32_IDX )
Variables ¶
View Source
var ( ORD_WORKID_CHARS = len(fmt.Sprintf("%d", ORD_MAX_WORKER_ID)) // 2 ORD_SEQ_MULTIPLE = uint32(math.Pow10(ORD_WORKID_CHARS)) // 100 ORD_BLANK_ITEM = struct{}{} ORD_DATE_CHARS = len(ORD_DATE_FORMAT) // 6 ORD_SEQ_CHARS = len(fmt.Sprintf("%d", ORD_MAX_SEQ)) // 7 ORD_TOTAL_CHARS = ORD_DATE_CHARS + ORD_WORKID_CHARS + ORD_SEQ_CHARS // 15 ORD_ID_FORMAT = fmt.Sprintf("%%s%%0%dd%%0%dd", ORD_SEQ_CHARS, ORD_WORKID_CHARS) // "%s%07d%02d" L_ORD_DATE_CHARS = len(L_ORD_DATE_FORMAT) // 10 L_ORD_SEQ_CHARS = len(fmt.Sprintf("%d", L_ORD_MAX_SEQ)) // 6 L_ORD_TOTAL_CHARS = L_ORD_DATE_CHARS + ORD_WORKID_CHARS + L_ORD_SEQ_CHARS // 18 L_ORD_ID_FORMAT = fmt.Sprintf("%%s%%0%dd%%0%dd", L_ORD_SEQ_CHARS, ORD_WORKID_CHARS) // "%s%06d%02d" )
View Source
var ( SEQ_MAX_SEQ = uint64(1<<SEQ_BITS_ID - 1) // (2**53-1 = 9,007,199,254,740,991) SEQ_MAX_WORKER_ID = uint16(1<<SEQ_BITS_WORKER_ID - 1) // (2**10-1 = 1023) SEQ_BLANK_ITEM = struct{}{} )
View Source
var ( SF_BLANK_ITEM = struct{}{} SF_MAX_SEQ = uint64(1<<SF_BITS_SEQUENCE - 1) // (2**22-1 = 4,194,303 per second) SF_MAX_WORKER_ID = uint16(1<<SF_BITS_WORKER_ID - 1) // (2**10-1 = 1023) ELAPSED_TIME_SHIFT_BITS = uint64(SF_BITS_SEQUENCE + SF_BITS_WORKER_ID) SF_MAX_SEQ32 = uint64(1<<SF_BITS_SEQUENCE32 - 1) // (2**17-1 = 131071 per day) SF_MAX_WORKER_ID32 = uint16(1<<SF_BITS_WORKER_ID32 - 1) // (2**2-1 = 3) ELAPSED_TIME_SHIFT_BITS32 = uint64(SF_BITS_SEQUENCE32 + SF_BITS_WORKER_ID32) )
Functions ¶
func DecomposeLongOrd ¶ added in v0.0.5
func DecomposeOrd ¶ added in v0.0.2
func DecomposeSF ¶
func DecomposeSF32 ¶ added in v0.0.3
func DecomposeSeq ¶
Types ¶
type FlakeIdGenerator ¶
type FlakeIdGenerator struct {
// contains filtered or unexported fields
}
func NewFlakeIdGenerator ¶
func NewFlakeIdGenerator(epochTime time.Time, workerId uint16) *FlakeIdGenerator
func NewFlakeIdGenerator32 ¶ added in v0.0.3
func NewFlakeIdGenerator32(epochTime time.Time, workerId uint16) *FlakeIdGenerator
func (*FlakeIdGenerator) Exit ¶
func (ig *FlakeIdGenerator) Exit()
func (*FlakeIdGenerator) NextID ¶
func (ig *FlakeIdGenerator) NextID() uint64
func (*FlakeIdGenerator) NextID32 ¶ added in v0.0.3
func (ig *FlakeIdGenerator) NextID32() uint32
type OrderIdGenerator ¶ added in v0.0.2
type OrderIdGenerator struct {
// contains filtered or unexported fields
}
func NewLongOrderIdGenerator ¶ added in v0.0.5
func NewLongOrderIdGenerator(workerId uint16, tz string) *OrderIdGenerator
func NewOrderIdGenerator ¶ added in v0.0.2
func NewOrderIdGenerator(workerId uint16, tz string) *OrderIdGenerator
func (*OrderIdGenerator) Exit ¶ added in v0.0.2
func (og *OrderIdGenerator) Exit()
func (*OrderIdGenerator) NextID ¶ added in v0.0.2
func (og *OrderIdGenerator) NextID() uint64
type SeqIdGenerator ¶
type SeqIdGenerator struct {
// contains filtered or unexported fields
}
func NewSeqIdGenerator ¶
func NewSeqIdGenerator(workerId uint16, startId uint64) *SeqIdGenerator
func (*SeqIdGenerator) Exit ¶
func (ig *SeqIdGenerator) Exit()
func (*SeqIdGenerator) NextID ¶
func (ig *SeqIdGenerator) NextID() uint64
Click to show internal directories.
Click to hide internal directories.