Documentation ¶
Index ¶
- Constants
- type CMap
- func (cm *CMap) Delete(key string)
- func (cm *CMap) DeleteAndGet(key string) interface{}
- func (cm *CMap) ForEach(fn func(key string, val interface{}) bool) bool
- func (cm *CMap) ForEachLocked(fn func(key string, val interface{}) bool) bool
- func (cm *CMap) Get(key string) (val interface{})
- func (cm *CMap) GetOK(key string) (val interface{}, 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) MarshalJSON() ([]byte, error)
- func (cm *CMap) NumShards() int
- func (cm *CMap) Set(key string, val interface{})
- func (cm *CMap) SetIfNotExists(key string, val interface{}) (set bool)
- func (cm *CMap) ShardDistribution() []float64
- func (cm *CMap) ShardForKey(key string) *LMap
- func (cm *CMap) Swap(key string, val interface{}) interface{}
- func (cm *CMap) Update(key string, fn func(oldval interface{}) (newval interface{}))
- func (cm *CMap) WithJSON(fn func(raw json.RawMessage) (interface{}, error)) *MapWithJSON
- type KV
- type LMap
- func (lm *LMap) Delete(key string)
- func (lm *LMap) DeleteAndGet(key string) (v interface{})
- func (lm *LMap) ForEach(keys []string, fn func(key string, val interface{}) bool) bool
- func (lm *LMap) ForEachLocked(fn func(key string, val interface{}) bool) bool
- func (lm *LMap) Get(key string) (v interface{})
- func (lm *LMap) GetOK(key string) (v interface{}, 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 interface{})
- func (lm *LMap) SetIfNotExists(key string, val interface{}) (set bool)
- func (lm *LMap) Swap(key string, newV interface{}) (oldV interface{})
- func (lm *LMap) Update(key string, fn func(oldVal interface{}) (newVal interface{}))
- type MapWithJSON
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) MarshalJSON ¶
MarshalJSON implements json.Marshaler.
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.
func (*CMap) Update ¶
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`.
func (*CMap) WithJSON ¶
func (cm *CMap) WithJSON(fn func(raw json.RawMessage) (interface{}, error)) *MapWithJSON
WithJSON returns a MapWithJSON with the specific unmarshal func.
type KV ¶
type KV struct { Key string Value interface{} }
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]interface{}, 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.
type MapWithJSON ¶
type MapWithJSON struct { *CMap UnmarshalValueFn func(raw json.RawMessage) (interface{}, error) }
MapWithJSON is a CMap with UnmarshalJSON support. Usage:
var mwj MapWithJSON json.Unmarshal(`{"key":"value"}`, &mwj)
func (*MapWithJSON) UnmarshalJSON ¶
func (mwj *MapWithJSON) UnmarshalJSON(p []byte) error
UnmarshalJSON implements json.Unmarshaler