Documentation ¶
Index ¶
- Constants
- type CMap
- func (cm *CMap) Delete(key string)
- func (cm *CMap) DeleteAndGet(key string) *util.FormatResults
- func (cm *CMap) ForEach(fn func(key string, val *util.FormatResults) bool) bool
- func (cm *CMap) ForEachLocked(fn func(key string, val *util.FormatResults) bool) bool
- func (cm *CMap) Get(key string) (val *util.FormatResults)
- func (cm *CMap) GetOK(key string) (val *util.FormatResults, 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 *util.FormatResults)
- func (cm *CMap) SetIfNotExists(key string, val *util.FormatResults) (set bool)
- func (cm *CMap) ShardDistribution() []float64
- func (cm *CMap) ShardForKey(key string) *LMap
- func (cm *CMap) Swap(key string, val *util.FormatResults) *util.FormatResults
- func (cm *CMap) Update(key string, fn func(oldval *util.FormatResults) (newval *util.FormatResults))
- type KV
- type LMap
- func (lm *LMap) Delete(key string)
- func (lm *LMap) DeleteAndGet(key string) (v *util.FormatResults)
- func (lm *LMap) ForEach(keys []string, fn func(key string, val *util.FormatResults) bool) bool
- func (lm *LMap) ForEachLocked(fn func(key string, val *util.FormatResults) bool) bool
- func (lm *LMap) Get(key string) (v *util.FormatResults)
- func (lm *LMap) GetOK(key string) (v *util.FormatResults, 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 *util.FormatResults)
- func (lm *LMap) SetIfNotExists(key string, val *util.FormatResults) (set bool)
- func (lm *LMap) Swap(key string, newV *util.FormatResults) (oldV *util.FormatResults)
- func (lm *LMap) Update(key string, fn func(oldVal *util.FormatResults) (newVal *util.FormatResults))
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 ¶
func (cm *CMap) DeleteAndGet(key string) *util.FormatResults
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) Get ¶
func (cm *CMap) Get(key string) (val *util.FormatResults)
Get is the equivalent of `val := map[key]`.
func (*CMap) GetOK ¶
func (cm *CMap) GetOK(key string) (val *util.FormatResults, ok bool)
GetOK is the equivalent of `val, ok := map[key]`.
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) Set ¶
func (cm *CMap) Set(key string, val *util.FormatResults)
Set is the equivalent of `map[key] = val`.
func (*CMap) SetIfNotExists ¶
func (cm *CMap) SetIfNotExists(key string, val *util.FormatResults) (set bool)
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.
func (*CMap) Swap ¶
func (cm *CMap) Swap(key string, val *util.FormatResults) *util.FormatResults
Swap is the equivalent of `oldVal, map[key] = map[key], newVal`.
func (*CMap) Update ¶
func (cm *CMap) Update(key string, fn func(oldval *util.FormatResults) (newval *util.FormatResults))
Update calls `fn` with the key's old value (or nil) and assign the returned value to the key. The shard containing the key will be locked, it is NOT safe to call other cmap funcs inside `fn`.
type KV ¶
type KV struct { Key string Value *util.FormatResults }
KV holds the key/value returned when Iter is called.
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]*util.FormatResults, cap)`
func (*LMap) DeleteAndGet ¶
func (lm *LMap) DeleteAndGet(key string) (v *util.FormatResults)
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) Get ¶
func (lm *LMap) Get(key string) (v *util.FormatResults)
Get is the equivalent of `val := map[key]`.
func (*LMap) GetOK ¶
func (lm *LMap) GetOK(key string) (v *util.FormatResults, ok bool)
GetOK is the equivalent of `val, ok := map[key]`.
func (*LMap) Set ¶
func (lm *LMap) Set(key string, v *util.FormatResults)
Set is the equivalent of `map[key] = val`.
func (*LMap) SetIfNotExists ¶
func (lm *LMap) SetIfNotExists(key string, val *util.FormatResults) (set bool)
SetIfNotExists will only assign val to key if it wasn't already set. Use `Update` if you need more logic.
func (*LMap) Swap ¶
func (lm *LMap) Swap(key string, newV *util.FormatResults) (oldV *util.FormatResults)
Swap is the equivalent of `oldVal, map[key] = map[key], newVal`.
func (*LMap) Update ¶
func (lm *LMap) Update(key string, fn func(oldVal *util.FormatResults) (newVal *util.FormatResults))
Update calls `fn` with the key's old value (or nil) and assigns the returned value to the key. The shard containing the key will be locked, it is NOT safe to call other cmap funcs inside `fn`.