Documentation
¶
Index ¶
- Constants
- func BKDRHash(str string) uint64
- type Bucket
- type BucketStatus
- type ConcurrentMap
- type ConcurrentMapImpl
- type Pair
- type PairRedistributor
- type PairRedistributorImpl
- func (pr *PairRedistributorImpl) CheckBucketStatus(pairTotal uint64, bucketSize uint64) (bucketStatus BucketStatus)
- func (pr *PairRedistributorImpl) Redistribute(bucketStatus BucketStatus, buckets []Bucket) (newBuckets []Bucket, changed bool)
- func (pr *PairRedistributorImpl) UpdateThreshold(pairTotal uint64, bucketNumber int)
- type Segment
Constants ¶
View Source
const ( // DEFAULT_BUCKET_LOAD_FACTOR 默认的装载因子 // 当散列段中的某个散列桶的尺寸超过了 // 本因子与当散列段尺寸的乘积,就会触发 rehash DEFAULT_BUCKET_LOAD_FACTOR float64 = 0.75 // DEFAULT_BUCKET_NUMBER 一个散列段包含 bucket 的默认数量 DEFAULT_BUCKET_NUMBER int = 16 // DEFAULT_BUCKET_MAX_SIZE 单个 bucket 的默认最大尺寸 DEFAULT_BUCKET_MAX_SIZE uint64 = 1000 )
View Source
const ( ERROR_PACKAGE_CMAP = "cmap" ERROR_TYPE_ILLEGAL_PARAMS = "illegal parameter" ERROR_TYPE_ILLEGAL_PAIR = "illegal pair type" )
View Source
const ( // MAX_CONCURRENCY 代表最大并发量 MAX_CONCURRENCY int = 65536 )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Bucket ¶
type Bucket interface {
// Put 会放入一个键-元素对
// 第一个返回值表示是否新增了键-元素对
// 若在调用此方法前已经锁定 lock,则不要把 lock 传入!否则必须传入对应的 lock
Put(p Pair, lock sync.Locker) (bool, error)
// Get 会获取指定键的键-元素对。
Get(key string) Pair
// GetFirstPair 会返回第一个键-元素对
GetFirstPair() Pair
// Delete 会删除指定的键-元素对
// 若在调用此方法前已经锁定 lock,则不要把 lock 传入!否则必须传入对应的 lock
Delete(key string, lock sync.Locker) bool
// Clear 会清空当前散列桶。
// 若在调用此方法前已经锁定 lock,则不要把 lock 传入!否则必须传入对应的 lock
Clear(lock sync.Locker)
// Size 会返回当前散列桶的尺寸
Size() uint64
// String 会返回当前散列桶的字符串表示形式
String() string
}
type BucketStatus ¶
type BucketStatus uint8
BucketStatus 代表散列桶状态的类型
const ( // BUCKET_STATUS_NORMAL 代表散列桶正常 BUCKET_STATUS_NORMAL BucketStatus = iota // BUCKET_STATUS_UNDERWEIGHT 代表散列桶过轻 BUCKET_STATUS_UNDERWEIGHT // BUCKET_STATUS_OVERWEIGHT 代表散列桶过重 BUCKET_STATUS_OVERWEIGHT )
type ConcurrentMap ¶
type ConcurrentMap interface {
// 返回并发量
Concurrency() int
Put(key string, element interface{}) (bool, error)
Get(key string) interface{}
Delete(key string) bool
Len() uint64
}
func NewConcurrentMap ¶
func NewConcurrentMap(concurrency int, pairRedistributor PairRedistributor) (ConcurrentMap, error)
type ConcurrentMapImpl ¶
type ConcurrentMapImpl struct {
// contains filtered or unexported fields
}
concurrency 并发量,也代表了 segments 的长度 散列段,每个散列段要提供对其包含的键值对的读写操作,通过锁来保证并发安全性。 多个散列段就由多个互斥锁保护。这样的加锁方式叫做 "分段锁"。分段锁可以降低互斥锁带来的开销,同时保护资源。 因为同一时刻同一个散列段中的键值对只能被一个 goroutine 进行读写。但是不同的散列段可以并发访问。 如果 concurrency 为 16,那么就可以有 16 个 goroutine 并发访问 ConcurrentMap。
func (*ConcurrentMapImpl) Concurrency ¶
func (c *ConcurrentMapImpl) Concurrency() int
func (*ConcurrentMapImpl) Delete ¶
func (c *ConcurrentMapImpl) Delete(key string) bool
func (*ConcurrentMapImpl) Get ¶
func (c *ConcurrentMapImpl) Get(key string) interface{}
func (*ConcurrentMapImpl) Len ¶
func (c *ConcurrentMapImpl) Len() uint64
type Pair ¶
type Pair interface {
// Key 会返回 key
Key() string
// Hash 会返回 key hash
Hash() uint64
// Element 会返回 element
Element() interface{}
// Set 会设置元素的值
SetElement(element interface{}) error
// Copy 会生成一个当前键-元素对的副本并返回
Copy() Pair
// String 会返回当前键-元素对的字符串表示形式
String() string
// contains filtered or unexported methods
}
Pair 代表并发安全的键-元素对的接口
type PairRedistributor ¶
type PairRedistributor interface {
// UpdateThreshold 会根据键-元素对总数和散列桶总数计算并更新阈值
UpdateThreshold(pairTotal uint64, bucketNumber int)
// CheckBucketStatus 用于检查散列桶的状态。
CheckBucketStatus(pairTotal uint64, bucketSize uint64) (bucketStatus BucketStatus)
// Redistribute 用于实施键-元素对的再分布。
Redistribute(bucketStatus BucketStatus, buckets []Bucket) (newBuckets []Bucket, changed bool)
}
PairRedistributor 代表针对键-元素对的再分布器 用于当散列段内的键-元素对分布不均时进行重新分布
type PairRedistributorImpl ¶
type PairRedistributorImpl struct {
// contains filtered or unexported fields
}
func (*PairRedistributorImpl) CheckBucketStatus ¶
func (pr *PairRedistributorImpl) CheckBucketStatus( pairTotal uint64, bucketSize uint64) (bucketStatus BucketStatus)
func (*PairRedistributorImpl) Redistribute ¶
func (pr *PairRedistributorImpl) Redistribute( bucketStatus BucketStatus, buckets []Bucket) (newBuckets []Bucket, changed bool)
func (*PairRedistributorImpl) UpdateThreshold ¶
func (pr *PairRedistributorImpl) UpdateThreshold( pairTotal uint64, bucketNumber int)
type Segment ¶
type Segment interface {
// Put 会根据参数放入一个键-元素对
// 第一个返回值表示是否新增了键-元素对
Put(p Pair) (bool, error)
// Get 会根据给定参数返回对应的键-元素对
// 该方法会根据给定的键计算哈希值
Get(key string) Pair
// GetWithHash 会根据给定参数返回对应的键-元素对,为了避免重复计算 hash
// 注意!参数 keyHash 应该是基于参数 key 计算得出哈希值
GetWithHash(key string, keyHash uint64) Pair
// Delete 会删除指定键的键-元素对
// 若返回值为true则说明已删除,否则说明未找到该键
Delete(key string) bool
// Size 用于获取当前段的尺寸(其中包含的散列桶的数量)
Size() uint64
}
Segment 代表并发安全的散列段的接口
Click to show internal directories.
Click to hide internal directories.