mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.6 KiB
78 lines
1.6 KiB
// Copyright 2017 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package cache |
|
|
|
import ( |
|
"strconv" |
|
"time" |
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
) |
|
|
|
var defaultCache StringCache |
|
|
|
// Init start cache service |
|
func Init() error { |
|
if defaultCache == nil { |
|
c, err := NewStringCache(setting.CacheService.Cache) |
|
if err != nil { |
|
return err |
|
} |
|
for i := 0; i < 10; i++ { |
|
if err = c.Ping(); err == nil { |
|
break |
|
} |
|
time.Sleep(time.Second) |
|
} |
|
if err != nil { |
|
return err |
|
} |
|
defaultCache = c |
|
} |
|
return nil |
|
} |
|
|
|
// GetCache returns the currently configured cache |
|
func GetCache() StringCache { |
|
return defaultCache |
|
} |
|
|
|
// GetString returns the key value from cache with callback when no key exists in cache |
|
func GetString(key string, getFunc func() (string, error)) (string, error) { |
|
if defaultCache == nil || setting.CacheService.TTL == 0 { |
|
return getFunc() |
|
} |
|
cached, exist := defaultCache.Get(key) |
|
if !exist { |
|
value, err := getFunc() |
|
if err != nil { |
|
return value, err |
|
} |
|
return value, defaultCache.Put(key, value, setting.CacheService.TTLSeconds()) |
|
} |
|
return cached, nil |
|
} |
|
|
|
// GetInt64 returns key value from cache with callback when no key exists in cache |
|
func GetInt64(key string, getFunc func() (int64, error)) (int64, error) { |
|
s, err := GetString(key, func() (string, error) { |
|
v, err := getFunc() |
|
return strconv.FormatInt(v, 10), err |
|
}) |
|
if err != nil { |
|
return 0, err |
|
} |
|
if s == "" { |
|
return 0, nil |
|
} |
|
return strconv.ParseInt(s, 10, 64) |
|
} |
|
|
|
// Remove key from cache |
|
func Remove(key string) { |
|
if defaultCache == nil { |
|
return |
|
} |
|
_ = defaultCache.Delete(key) |
|
}
|
|
|