Go语言实现带有过期时间的内存缓存
时间: 2023-05-14 10:05:44 浏览: 69
可以使用Go语言的map和time包来实现带有过期时间的内存缓存。具体实现可以参考以下代码:
```
type CacheItem struct {
value interface{}
expiration int64
}
type Cache struct {
items map[string]CacheItem
mutex sync.RWMutex
}
func (c *Cache) Set(key string, value interface{}, duration time.Duration) {
c.mutex.Lock()
defer c.mutex.Unlock()
expiration := time.Now().Add(duration).UnixNano()
c.items[key] = CacheItem{
value: value,
expiration: expiration,
}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mutex.RLock()
defer c.mutex.RUnlock()
item, found := c.items[key]
if !found {
return nil, false
}
if time.Now().UnixNano() > item.expiration {
return nil, false
}
return item.value, true
}
```
这个Cache结构体包含一个map来存储缓存项,每个缓存项包含一个值和过期时间。Set方法用于设置缓存项,Get方法用于获取缓存项。在Get方法中,如果缓存项已经过期,则返回false。