当前位置: 首页 > 工具软件 > race-cache > 使用案例 >

Go 使用互斥锁(sync.Mutex)实现线程安全的内存本地缓存(LocalCache)

岳迪
2023-12-01

本地缓存实现

var cache = struct { // 声明 struct 字面量 cahce (匿名结构体)
    sync.Mutex                   // 互斥锁, 内嵌 Struct
    caches     map[string]string // kv 内存存储
}{
    caches: make(map[string]string), // 初始化 kv 存储
}

// GetCache safe get memory cache
func GetCache(key string) string {
    cache.Lock()           // 锁住
    v := cache.caches[key] // 获取缓存值
    defer cache.Unlock()   // 释放锁
    return v
}

// PutCache safe put memory cache
func PutCache(key string, val string) {
    cache.Lock()            // 锁住
    cache.caches[key] = val // 设置缓存值
    defer cache.Unlock()    // 释放锁
}

func main() {
    for i := 0; i < 10; i++ {
        PutCache(fmt.Sprintf("key%d", i), fmt.Sprintf("value%d", i))
    }
    var v = GetCache("key1")
    fmt.Println(v) // value1
}

sync.Mutex 说明

核心实现: CompareAndSwap


 类似资料: