Documentation
¶
Index ¶
- type Key
- type ShardMap
- func (sm *ShardMap[K, V]) Compute(key K, fn func(old V, loaded bool) V) V
- func (sm *ShardMap[K, V]) Delete(key K)
- func (sm *ShardMap[K, V]) Get(key K) (V, bool)
- func (sm *ShardMap[K, V]) Len() int
- func (sm *ShardMap[K, V]) LoadOrCompute(key K, fn func() V) (actual V, loaded bool)
- func (sm *ShardMap[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool)
- func (sm *ShardMap[K, V]) Range(fn func(key K, value V) bool)
- func (sm *ShardMap[K, V]) Set(key K, value V)
- func (sm *ShardMap[K, V]) Swap(key K, value V) (previous V, loaded bool)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Key ¶ added in v1.3.0
type Key interface {
bool | string | int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128
}
Key is the set of key types with a built-in, equality-compatible hash. Defined types, structs, pointers, and interfaces are intentionally excluded.
type ShardMap ¶ added in v1.1.0
ShardMap 为一个拥有 32 个分片的并发安全 map。零值可直接使用。 每个分片拥有独立的读写锁,以降低竞争并实现高并发读写。 键通过与 Go 相等语义一致的哈希均匀分布到各分片。
func NewShardMap ¶ added in v1.1.0
NewShardMap 创建一个空的 ShardMap 实例。
func (*ShardMap[K, V]) Compute ¶ added in v1.2.0
Compute 原子地对键执行读-修改-写操作。 fn 接收旧值和是否存在标志,返回新值。 新值总是被存储,fn 的返回值不应为零值(除非有意存储零值)。 fn 在持有对应分片写锁时执行,以保证整个读-修改-写操作原子;它不得 调用同一个 ShardMap 上可能访问同一分片的方法。
func (*ShardMap[K, V]) Delete ¶ added in v1.1.0
func (sm *ShardMap[K, V]) Delete(key K)
Delete 删除对应分片中的键,使用写锁。
func (*ShardMap[K, V]) Len ¶ added in v1.1.0
Len 返回整个 ShardMap 中所有键的总数。 使用原子计数器,无需获取任何锁;与并发写入同时调用时,它不是全局一致快照。
func (*ShardMap[K, V]) LoadOrCompute ¶ added in v1.2.0
LoadOrCompute 原子地获取或计算键值对。 如果键已存在,返回现有值和 true;否则调用 fn 计算值,存储并返回。 fn 可能不会被调用(如果另一个 goroutine 先插入了值),也可能在 并发竞争时被多个 goroutine 调用。fn 在不持有分片锁时执行,避免回调重入死锁。
func (*ShardMap[K, V]) LoadOrStore ¶ added in v1.2.0
LoadOrStore 原子地获取或存储键值对。 如果键已存在,返回现有值和 true;否则存储新值并返回新值和 false。 使用先读后写模式避免不必要的写锁竞争。
func (*ShardMap[K, V]) Range ¶ added in v1.1.0
Range 以并发安全的方式遍历所有键值对。 每个分片的数据在持有读锁期间被复制出来,回调函数在释放读锁后执行, 避免长耗时回调阻塞写操作或导致死锁。 使用 sync.Pool 复用 entry slice,减少内存分配和 GC 压力。