Documentation
¶
Index ¶
- Constants
- type CMap
- func (cm *CMap) Delete(key string)
- func (cm *CMap) DeleteAndGet(key string) string
- func (cm *CMap) ForEach(fn func(key string, val string) bool) bool
- func (cm *CMap) ForEachLocked(fn func(key string, val string) bool) bool
- func (cm *CMap) Get(key string) (val string)
- func (cm *CMap) GetOK(key string) (val string, ok bool)
- func (cm *CMap) Has(key string) bool
- func (cm *CMap) Iter(ctx context.Context, buffer int) <-chan *KV
- func (cm *CMap) IterLocked(ctx context.Context, buffer int) <-chan *KV
- func (cm *CMap) Keys() []string
- func (cm *CMap) Len() int
- func (cm *CMap) NumShards() int
- func (cm *CMap) Set(key string, val string)
- func (cm *CMap) SetIfNotExists(key string, val string) (set bool)
- func (cm *CMap) ShardDistribution() []float64
- func (cm *CMap) ShardForKey(key string) *LMap
- func (cm *CMap) Swap(key string, val string) string
- func (cm *CMap) Update(key string, fn func(oldval string) (newval string))
- type KV
- type LMap
- func (lm *LMap) Delete(key string)
- func (lm *LMap) DeleteAndGet(key string) (v string)
- func (lm *LMap) ForEach(keys []string, fn func(key string, val string) bool) bool
- func (lm *LMap) ForEachLocked(fn func(key string, val string) bool) bool
- func (lm *LMap) Get(key string) (v string)
- func (lm *LMap) GetOK(key string) (v string, ok bool)
- func (lm *LMap) Has(key string) (ok bool)
- func (lm *LMap) Keys(buf []string) []string
- func (lm *LMap) Len() (ln int)
- func (lm *LMap) Set(key string, v string)
- func (lm *LMap) SetIfNotExists(key string, val string) (set bool)
- func (lm *LMap) Swap(key string, newV string) (oldV string)
- func (lm *LMap) Update(key string, fn func(oldVal string) (newVal string))
Constants ¶
const DefaultShardCount = 1 << 8
DefaultShardCount is the default number of shards to use when New() or NewFromJSON() are called. The default is 256.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CMap ¶
type CMap struct {
// contains filtered or unexported fields
}
CMap is a concurrent safe sharded map to scale on multiple cores.
func NewSize ¶
NewSize returns a CMap with the specific shardSize, note that for performance reasons, shardCount must be a power of 2. Higher shardCount will improve concurrency but will consume more memory.
func (*CMap) DeleteAndGet ¶
DeleteAndGet is the equivalent of `oldVal := map[key]; delete(map, key)`.
func (*CMap) ForEach ¶
ForEach loops over all the key/values in the map. You can break early by returning false. It **is** safe to modify the map while using this iterator, however it uses more memory and is slightly slower.
func (*CMap) ForEachLocked ¶
ForEachLocked loops over all the key/values in the map. You can break early by returning false. It is **NOT* safe to modify the map while using this iterator.
func (*CMap) Iter ¶
Iter returns a channel to be used in for range. Use `context.WithCancel` if you intend to break early or goroutines will leak. It **is** safe to modify the map while using this iterator, however it uses more memory and is slightly slower.
func (*CMap) IterLocked ¶
IterLocked returns a channel to be used in for range. Use `context.WithCancel` if you intend to break early or goroutines will leak and map access will deadlock. It is **NOT* safe to modify the map while using this iterator.
func (*CMap) SetIfNotExists ¶
SetIfNotExists will only assign val to key if it wasn't already set. Use `Update` if you need more logic.
func (*CMap) ShardDistribution ¶
ShardDistribution returns the distribution of data amoung all shards. Useful for debugging the efficiency of a hash.
func (*CMap) ShardForKey ¶
ShardForKey returns the LMap that may hold the specific key.
type LMap ¶
type LMap struct {
// contains filtered or unexported fields
}
LMap is a simple sync.RWMutex locked map. Used by CMap internally for sharding.
func NewLMapSize ¶
NewLMapSize is the equivalent of `m := make(map[string]string, cap)`
func (*LMap) DeleteAndGet ¶
DeleteAndGet is the equivalent of `oldVal := map[key]; delete(map, key)`.
func (*LMap) ForEach ¶
ForEach loops over all the key/values in the map. You can break early by returning an error . It **is** safe to modify the map while using this iterator, however it uses more memory and is slightly slower.
func (*LMap) ForEachLocked ¶
ForEachLocked loops over all the key/values in the map. You can break early by returning false It is **NOT* safe to modify the map while using this iterator.
func (*LMap) SetIfNotExists ¶
SetIfNotExists will only assign val to key if it wasn't already set. Use `Update` if you need more logic.