2020-03-22 15:12:55 +00:00
|
|
|
// Copyright 2020 The Xorm Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package caches
|
|
|
|
|
|
|
|
import "sync"
|
|
|
|
|
2021-05-15 18:32:17 +00:00
|
|
|
// Manager represents a cache manager
|
2020-03-22 15:12:55 +00:00
|
|
|
type Manager struct {
|
|
|
|
cacher Cacher
|
|
|
|
disableGlobalCache bool
|
|
|
|
|
|
|
|
cachers map[string]Cacher
|
|
|
|
cacherLock sync.RWMutex
|
|
|
|
}
|
|
|
|
|
2021-05-15 18:32:17 +00:00
|
|
|
// NewManager creates a cache manager
|
2020-03-22 15:12:55 +00:00
|
|
|
func NewManager() *Manager {
|
|
|
|
return &Manager{
|
|
|
|
cachers: make(map[string]Cacher),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetDisableGlobalCache disable global cache or not
|
|
|
|
func (mgr *Manager) SetDisableGlobalCache(disable bool) {
|
|
|
|
if mgr.disableGlobalCache != disable {
|
|
|
|
mgr.disableGlobalCache = disable
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-15 18:32:17 +00:00
|
|
|
// SetCacher set cacher of table
|
2020-03-22 15:12:55 +00:00
|
|
|
func (mgr *Manager) SetCacher(tableName string, cacher Cacher) {
|
|
|
|
mgr.cacherLock.Lock()
|
|
|
|
mgr.cachers[tableName] = cacher
|
|
|
|
mgr.cacherLock.Unlock()
|
|
|
|
}
|
|
|
|
|
2021-05-15 18:32:17 +00:00
|
|
|
// GetCacher returns a cache of a table
|
2020-03-22 15:12:55 +00:00
|
|
|
func (mgr *Manager) GetCacher(tableName string) Cacher {
|
|
|
|
var cacher Cacher
|
|
|
|
var ok bool
|
|
|
|
mgr.cacherLock.RLock()
|
|
|
|
cacher, ok = mgr.cachers[tableName]
|
|
|
|
mgr.cacherLock.RUnlock()
|
|
|
|
if !ok && !mgr.disableGlobalCache {
|
|
|
|
cacher = mgr.cacher
|
|
|
|
}
|
|
|
|
return cacher
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetDefaultCacher set the default cacher. Xorm's default not enable cacher.
|
|
|
|
func (mgr *Manager) SetDefaultCacher(cacher Cacher) {
|
|
|
|
mgr.cacher = cacher
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetDefaultCacher returns the default cacher
|
|
|
|
func (mgr *Manager) GetDefaultCacher() Cacher {
|
|
|
|
return mgr.cacher
|
|
|
|
}
|