48 lines
830 B
Go
48 lines
830 B
Go
package cache
|
|
|
|
type ShardingType int
|
|
|
|
const (
|
|
ShardingTypeJWT ShardingType = iota
|
|
ShardingTypeInteger
|
|
)
|
|
|
|
type ShardingInfo struct {
|
|
Shards int
|
|
HashFunc func(key string) int
|
|
}
|
|
|
|
func getShardingInfo(shardingType ShardingType) ShardingInfo {
|
|
switch shardingType {
|
|
case ShardingTypeInteger:
|
|
return ShardingInfo{
|
|
Shards: 10,
|
|
HashFunc: func(key string) int {
|
|
char := int(key[len(key)-1])
|
|
return char - 0x30
|
|
},
|
|
}
|
|
case ShardingTypeJWT:
|
|
return ShardingInfo{
|
|
Shards: 36,
|
|
HashFunc: func(key string) int {
|
|
char := int(key[len(key)-1])
|
|
if char >= 0x30 && char <= 0x39 {
|
|
return char - 0x30
|
|
}
|
|
if char >= 0x41 && char <= 0x5A {
|
|
return char - 0x41
|
|
}
|
|
return char - 0x61
|
|
},
|
|
}
|
|
}
|
|
|
|
return ShardingInfo{
|
|
Shards: 1,
|
|
HashFunc: func(key string) int {
|
|
return 0
|
|
},
|
|
}
|
|
}
|