添加缓存

This commit is contained in:
Yun
2024-03-17 16:14:25 +08:00
parent da5fab0142
commit 3ff2662b08
2 changed files with 31 additions and 13 deletions
+28 -10
View File
@@ -12,11 +12,12 @@ import (
// 到设定的点就删除 // 到设定的点就删除
type cache struct { type cache struct {
store sync.Map prefix string
} }
var one sync.Once var one sync.Once
var c *cache var c *cache
var store sync.Map
type cacheData struct { type cacheData struct {
key string key string
@@ -26,19 +27,22 @@ type cacheData struct {
var ErrorEmpty error = errors.New("empty cache") var ErrorEmpty error = errors.New("empty cache")
func NewCache() *cache { func NewCache(prefix string) *cache {
c = &cache{
prefix: prefix,
}
one.Do(func() { one.Do(func() {
c = &cache{}
go func() { go func() {
for { for {
c.store.Range(func(key, value interface{}) bool { store.Range(func(key, value interface{}) bool {
if value.(*cacheData).expire.Before(time.Now()) { if value.(*cacheData).expire.Before(time.Now()) {
c.store.Delete(key) store.Delete(key)
} }
return true return true
}) })
time.Sleep(time.Second * 5) time.Sleep(time.Second * 5)
} }
}() }()
@@ -52,16 +56,18 @@ func (c *cache) Set(key string, value interface{}, expire time.Duration) {
expire = time.Hour * 24 * 365 expire = time.Hour * 24 * 365
} }
cd := &cacheData{key, value, time.Now().Add(expire)} cd := &cacheData{key, value, time.Now().Add(expire)}
c.store.Store(key, cd) key = c.prefix + key
store.Store(key, cd)
} }
// 读取缓存 // 读取缓存
func (c *cache) Get(key string) (interface{}, error) { func (c *cache) Get(key string) (interface{}, error) {
if v, ok := c.store.Load(key); ok { key = c.prefix + key
if v, ok := store.Load(key); ok {
cc := v.(*cacheData) cc := v.(*cacheData)
if cc.expire.Before(time.Now()) { if cc.expire.Before(time.Now()) {
c.store.Delete(key) store.Delete(key)
return nil, ErrorEmpty return nil, ErrorEmpty
} }
return cc.data, nil return cc.data, nil
@@ -71,5 +77,17 @@ func (c *cache) Get(key string) (interface{}, error) {
// 删除缓存 // 删除缓存
func (c *cache) Delete(key string) { func (c *cache) Delete(key string) {
c.store.Delete(key) key = c.prefix + key
store.Delete(key)
}
// 清空缓存
func (c *cache) Clear() {
store.Range(func(key, value interface{}) bool {
// 根据前缀删除
if key.(string)[:len(c.prefix)] == c.prefix {
store.Delete(key)
}
return true
})
} }
+3 -3
View File
@@ -9,12 +9,12 @@ import (
) )
func TestCache(t *testing.T) { func TestCache(t *testing.T) {
cachex.NewCache().Set("test", "test", time.Second*5) cachex.NewCache("").Set("test", "test", time.Second*5)
da, err := cachex.NewCache().Get("test") da, err := cachex.NewCache("").Get("test")
fmt.Println(da, err) fmt.Println(da, err)
time.Sleep(time.Second * 5) time.Sleep(time.Second * 5)
da, err = cachex.NewCache().Get("test") da, err = cachex.NewCache("").Get("test")
fmt.Println(da, err) fmt.Println(da, err)
} }