mirror of
https://github.com/gookit/cache.git
synced 2025-09-26 20:21:16 +08:00
177 lines
3.7 KiB
Go
177 lines
3.7 KiB
Go
package cache
|
|
|
|
import "time"
|
|
|
|
// default supported cache driver name
|
|
const (
|
|
DvrFile = "file"
|
|
DvrRedis = "redis"
|
|
DvrMemory = "memory"
|
|
DvrMemCached = "memCached"
|
|
DvrBoltDB = "boltDB"
|
|
DvrBuntDB = "buntDB"
|
|
)
|
|
|
|
/*************************************************************
|
|
* Cache Manager
|
|
*************************************************************/
|
|
|
|
// Manager definition
|
|
type Manager struct {
|
|
// Debug bool
|
|
// default driver name
|
|
defName string
|
|
// drivers map
|
|
drivers map[string]Cache
|
|
}
|
|
|
|
// NewManager create a cache manager instance
|
|
func NewManager() *Manager {
|
|
return &Manager{
|
|
// defName: driverName,
|
|
drivers: make(map[string]Cache, 8),
|
|
}
|
|
}
|
|
|
|
// Register new cache driver
|
|
func (m *Manager) Register(name string, driver Cache) *Manager {
|
|
// always use latest as default driver.
|
|
m.defName = name
|
|
// save driver instance
|
|
m.drivers[name] = driver
|
|
return m
|
|
}
|
|
|
|
// Unregister an cache driver
|
|
func (m *Manager) Unregister(name string) int {
|
|
if _, ok := m.drivers[name]; !ok {
|
|
return 0
|
|
}
|
|
|
|
delete(m.drivers, name)
|
|
|
|
// reset default driver name.
|
|
if m.defName == name {
|
|
m.defName = ""
|
|
}
|
|
return 1
|
|
}
|
|
|
|
// SetDefName set default driver name. alias of DefaultUse()
|
|
// Deprecated
|
|
//
|
|
// please use DefaultUse() instead it
|
|
func (m *Manager) SetDefName(driverName string) {
|
|
m.DefaultUse(driverName)
|
|
}
|
|
|
|
// DefaultUse set default driver name
|
|
func (m *Manager) DefaultUse(driverName string) {
|
|
if _, ok := m.drivers[driverName]; !ok {
|
|
panic("cache driver: " + driverName + " is not registered")
|
|
}
|
|
|
|
m.defName = driverName
|
|
}
|
|
|
|
// Default returns the default driver instance
|
|
func (m *Manager) Default() Cache {
|
|
if c, ok := m.drivers[m.defName]; ok {
|
|
return c
|
|
}
|
|
|
|
panic("cache driver: " + m.defName + " is not registered")
|
|
}
|
|
|
|
// Use driver object by name and set it as default driver.
|
|
func (m *Manager) Use(driverName string) Cache {
|
|
m.DefaultUse(driverName)
|
|
return m.Driver(driverName)
|
|
}
|
|
|
|
// Cache get driver by name. alias of Driver()
|
|
func (m *Manager) Cache(driverName string) Cache {
|
|
return m.drivers[driverName]
|
|
}
|
|
|
|
// Driver get a driver instance by name
|
|
func (m *Manager) Driver(driverName string) Cache {
|
|
return m.drivers[driverName]
|
|
}
|
|
|
|
// DefName get default driver name
|
|
func (m *Manager) DefName() string {
|
|
return m.defName
|
|
}
|
|
|
|
// Close all drivers
|
|
func (m *Manager) Close() (err error) {
|
|
for _, cache := range m.drivers {
|
|
err = cache.Close()
|
|
}
|
|
return err
|
|
}
|
|
|
|
// ClearAll all drivers caches
|
|
func (m *Manager) ClearAll() (err error) {
|
|
for _, cache := range m.drivers {
|
|
err = cache.Clear()
|
|
}
|
|
return err
|
|
}
|
|
|
|
// UnregisterAll cache drivers
|
|
func (m *Manager) UnregisterAll(fn ...func(cache Cache)) int {
|
|
num := len(m.drivers)
|
|
|
|
// unregister
|
|
m.defName = ""
|
|
for name, driver := range m.drivers {
|
|
if len(fn) > 0 {
|
|
fn[0](driver)
|
|
}
|
|
|
|
delete(m.drivers, name)
|
|
}
|
|
return num
|
|
}
|
|
|
|
/*************************************************************
|
|
* Quick use by default cache driver
|
|
*************************************************************/
|
|
|
|
// Has cache key
|
|
func (m *Manager) Has(key string) bool {
|
|
return m.Default().Has(key)
|
|
}
|
|
|
|
// Get value by key
|
|
func (m *Manager) Get(key string) any {
|
|
return m.Default().Get(key)
|
|
}
|
|
|
|
// Set value by key
|
|
func (m *Manager) Set(key string, val any, ttl time.Duration) error {
|
|
return m.Default().Set(key, val, ttl)
|
|
}
|
|
|
|
// Del value by key
|
|
func (m *Manager) Del(key string) error {
|
|
return m.Default().Del(key)
|
|
}
|
|
|
|
// GetMulti values by keys
|
|
func (m *Manager) GetMulti(keys []string) map[string]any {
|
|
return m.Default().GetMulti(keys)
|
|
}
|
|
|
|
// SetMulti values
|
|
func (m *Manager) SetMulti(mv map[string]any, ttl time.Duration) error {
|
|
return m.Default().SetMulti(mv, ttl)
|
|
}
|
|
|
|
// DelMulti values by keys
|
|
func (m *Manager) DelMulti(keys []string) error {
|
|
return m.Default().DelMulti(keys)
|
|
}
|