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.

manager.go 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2020 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package caches
  5. import "sync"
  6. type Manager struct {
  7. cacher Cacher
  8. disableGlobalCache bool
  9. cachers map[string]Cacher
  10. cacherLock sync.RWMutex
  11. }
  12. func NewManager() *Manager {
  13. return &Manager{
  14. cachers: make(map[string]Cacher),
  15. }
  16. }
  17. // SetDisableGlobalCache disable global cache or not
  18. func (mgr *Manager) SetDisableGlobalCache(disable bool) {
  19. if mgr.disableGlobalCache != disable {
  20. mgr.disableGlobalCache = disable
  21. }
  22. }
  23. func (mgr *Manager) SetCacher(tableName string, cacher Cacher) {
  24. mgr.cacherLock.Lock()
  25. mgr.cachers[tableName] = cacher
  26. mgr.cacherLock.Unlock()
  27. }
  28. func (mgr *Manager) GetCacher(tableName string) Cacher {
  29. var cacher Cacher
  30. var ok bool
  31. mgr.cacherLock.RLock()
  32. cacher, ok = mgr.cachers[tableName]
  33. mgr.cacherLock.RUnlock()
  34. if !ok && !mgr.disableGlobalCache {
  35. cacher = mgr.cacher
  36. }
  37. return cacher
  38. }
  39. // SetDefaultCacher set the default cacher. Xorm's default not enable cacher.
  40. func (mgr *Manager) SetDefaultCacher(cacher Cacher) {
  41. mgr.cacher = cacher
  42. }
  43. // GetDefaultCacher returns the default cacher
  44. func (mgr *Manager) GetDefaultCacher() Cacher {
  45. return mgr.cacher
  46. }