123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package redis
- import (
- "sync"
- "sync/atomic"
- )
- var (
- once sync.Once
- lock sync.Mutex
- instance *ScriptCache
- )
- type (
- Map map[string]string
- ScriptCache struct {
- atomic.Value
- }
- )
- func GetScriptCache() *ScriptCache {
- once.Do(func() {
- instance = &ScriptCache{}
- instance.Store(make(Map))
- })
- return instance
- }
- func (sc *ScriptCache) GetSha(script string) (string, bool) {
- cache := sc.Load().(Map)
- ret, ok := cache[script]
- return ret, ok
- }
- func (sc *ScriptCache) SetSha(script, sha string) {
- lock.Lock()
- defer lock.Unlock()
- cache := sc.Load().(Map)
- newCache := make(Map)
- for k, v := range cache {
- newCache[k] = v
- }
- newCache[script] = sha
- sc.Store(newCache)
- }
|