在項(xiàng)目中,我想使用緩存來(lái)存儲(chǔ)哈希之類的東西。但是,緩存中存儲(chǔ)的值會(huì)不時(shí)更改為密鑰。通常從密鑰中選取大約 4 個(gè)字符:<- Set hash::helloworldtest = abcdef0123456789-> Get hash::helloworldtest = testef0123456789這大致是我的緩存的結(jié)構(gòu):type node struct { expires nodeExpiration value interface{}}// ...func (c *Cache) Set(key string, value interface{}, expiration time.Duration) { c.mu.Lock() c.val[key] = &node{ expires: c.expiration(expiration), value: value, } // fmt.Println( ... ) c.mu.Unlock()}func (c *Cache) Get(key string) (interface{}, bool) { c.mu.Lock() if v, o := c.val[key]; o && v != nil { if !v.expires.IsExpired() { // fmt.Println( ... ) c.mu.Unlock() return v.value, true } } c.mu.Unlock() return nil, false}// Cache Backendfunc (b *CacheBackend) GetHash(key string) (res string, err error) { return b.get("hash::" + key)}func (b *CacheBackend) get(key string) (res string, err error) { if v, ok := b.cache.Get(key); ok { if s, ok := v.(string); ok { return s, nil } return "", b.errCast } return "", nil}// go-fiber Routefunc (s *WebServer) handleGetHashAnywhere(ctx *fiber.Ctx) (err error) { path := ctx.Params("anywhere") var res string if res, err = s.Backend.GetHash(path); err != nil { return } if res == "" { ctx.Status(404) } else { ctx.Status(200) } return ctx.SendString(res)}我以前使用過(guò) a,但用 一個(gè) 替換了它,認(rèn)為這可能是問(wèn)題所在。但與.sync.RWMutexsync.Mutexsync.MutexGet 和 Set 方法在 goroutine 中由 go-fiber 調(diào)用,然后返回這些值。有沒(méi)有人知道這樣的事情是如何發(fā)生的?編輯1:保存而不是工作正常。[]bytestring
種族(?) 與互斥體 - 地圖中的數(shù)據(jù)損壞
桃花長(zhǎng)相依
2022-08-24 10:46:47