开源项目 akyoto/cache
使用教程
1. 项目的目录结构及介绍
cache/
├── LICENSE
├── README.md
├── cache.go
├── cache_test.go
├── example_test.go
└── go.mod
LICENSE
: 项目许可证文件。README.md
: 项目说明文档。cache.go
: 项目核心代码文件,包含缓存实现。cache_test.go
: 项目测试文件,包含单元测试。example_test.go
: 示例代码文件,展示如何使用缓存。go.mod
: Go 模块文件,定义项目依赖。
2. 项目的启动文件介绍
项目的启动文件是 cache.go
,其中定义了缓存的主要功能和接口。以下是 cache.go
的主要内容:
package cache
import (
"sync"
"time"
)
// Cache represents a thread-safe in-memory cache.
type Cache struct {
items map[string]item
mu sync.RWMutex
}
// item represents a cache item.
type item struct {
value interface{}
expiration int64
}
// New creates a new cache.
func New() *Cache {
return &Cache{
items: make(map[string]item),
}
}
// Set adds an item to the cache.
func (c *Cache) Set(key string, value interface{}, duration time.Duration) {
var expiration int64
if duration > 0 {
expiration = time.Now().Add(duration).UnixNano()
}
c.mu.Lock()
c.items[key] = item{
value: value,
expiration: expiration,
}
c.mu.Unlock()
}
// Get retrieves an item from the cache.
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
item, found := c.items[key]
if !found {
c.mu.RUnlock()
return nil, false
}
if time.Now().UnixNano() > item.expiration {
c.mu.RUnlock()
return nil, false
}
c.mu.RUnlock()
return item.value, true
}
// Delete removes an item from the cache.
func (c *Cache) Delete(key string) {
c.mu.Lock()
delete(c.items, key)
c.mu.Unlock()
}
3. 项目的配置文件介绍
该项目没有独立的配置文件,所有配置和参数都在代码中直接设置。例如,缓存的过期时间可以在调用 Set
方法时指定:
cache := cache.New()
cache.Set("key", "value", time.Minute)
以上代码创建了一个新的缓存实例,并设置了一个键值对,其过期时间为1分钟。