Documentation
¶
Index ¶
- 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 ShardMap ¶ added in v1.1.0
type ShardMap[K comparable, V any] struct { // contains filtered or unexported fields }
ShardMap 为一个拥有 32 个分片的并发安全 map。 每个分片拥有独立的读写锁,以降低竞争并实现高并发读写。 键通过 FNV-1a 哈希均匀分布到各分片。
func NewShardMap ¶ added in v1.1.0
func NewShardMap[K comparable, V any]() *ShardMap[K, V]
NewShardMap 创建一个空的 ShardMap 实例。
func (*ShardMap[K, V]) Compute ¶ added in v1.2.0
Compute 原子地对键执行读-修改-写操作。 fn 接收旧值和是否存在标志,返回新值。 新值总是被存储,fn 的返回值不应为零值(除非有意存储零值)。
func (*ShardMap[K, V]) Delete ¶ added in v1.1.0
func (sm *ShardMap[K, V]) Delete(key K)
Delete 删除对应分片中的键,使用写锁。
func (*ShardMap[K, V]) LoadOrCompute ¶ added in v1.2.0
LoadOrCompute 原子地获取或计算键值对。 如果键已存在,返回现有值和 true;否则调用 fn 计算值,存储并返回。 fn 可能不会被调用(如果另一个 goroutine 先插入了值)。
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 压力。
Click to show internal directories.
Click to hide internal directories.