Documentation
¶
Index ¶
- Constants
- type Bucket
- type NewSetter
- type Setter
- type SetterDefault
- type Storage
- func (this *Storage) Delete(id string) Setter
- func (this *Storage) Free() int
- func (this *Storage) Get(id string) (Setter, bool)
- func (this *Storage) New(v any) Setter
- func (this *Storage) Range(f func(Setter) bool) bool
- func (this *Storage) Remove(id []string) (r []Setter)
- func (this *Storage) Share(id string) (int, error)
- func (this *Storage) Size() int
Constants ¶
View Source
const (
TokenSize = tokenRawSize * 2 // 28 hex chars
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Bucket ¶ added in v1.6.8
type Bucket struct {
NewSetter NewSetter // 创建新 Setter 的回调
// contains filtered or unexported fields
}
Bucket 一维数组存储器
并发模型:
- values 切片预分配固定长度,生命周期内不变,slice header 无 race
- 每个槽位通过 atomic.LoadPointer/StorePointer 原子读写,无 torn read
- 写路径(New / Delete)使用 sync.Mutex 串行化
- 读路径(Get / Range)完全无锁
- 禁止在 Range 回调中调用 New/Delete
func NewBucket ¶ added in v1.6.8
NewBucket 创建一个新的存储桶 id: 桶索引(uint16,编码进 token 前 4 个 hex 字符) cap: 桶的容量(预分配,生命周期内不变)
func (*Bucket) New ¶ added in v1.6.8
New 分配一个新槽位并写入对象 token 生成使用 crypto/rand 缓冲池(摊薄后 ~3ns),整体仅 3 次堆分配
type SetterDefault ¶ added in v1.6.8
type SetterDefault struct {
// contains filtered or unexported fields
}
func (*SetterDefault) Get ¶ added in v1.6.8
func (this *SetterDefault) Get() interface{}
func (*SetterDefault) Id ¶ added in v1.6.8
func (this *SetterDefault) Id() string
func (*SetterDefault) Set ¶ added in v1.6.8
func (this *SetterDefault) Set(data interface{})
type Storage ¶ added in v1.6.8
type Storage struct {
NewSetter NewSetter
// contains filtered or unexported fields
}
Storage 多 Bucket 存储器
并发模型:
- bucket 切片仅通过 expansion() 在 mu.Lock 下追加,已有索引永不移动或释放
- 读路径(Share/Get/Size/Free/Range)不加锁
- Size()/Free() 通过原子计数器实现 O(1)
- New() 通过原子读 bucket.size 跳过已满桶,避免无效加锁
Token 格式:28 个 hex 字符 = bucket(2B) + slot(4B) + random(8B) 解析只需查表提取前 12 个 hex 字符,零分配
Click to show internal directories.
Click to hide internal directories.