mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package ttlcache
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/TeaOSLab/EdgeAPI/internal/goman"
 | 
						|
	"github.com/TeaOSLab/EdgeAPI/internal/zero"
 | 
						|
	"sync"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
var SharedManager = NewManager()
 | 
						|
 | 
						|
type Manager struct {
 | 
						|
	ticker *time.Ticker
 | 
						|
	locker sync.Mutex
 | 
						|
 | 
						|
	cacheMap map[*Cache]zero.Zero
 | 
						|
}
 | 
						|
 | 
						|
func NewManager() *Manager {
 | 
						|
	var manager = &Manager{
 | 
						|
		ticker:   time.NewTicker(2 * time.Second),
 | 
						|
		cacheMap: map[*Cache]zero.Zero{},
 | 
						|
	}
 | 
						|
 | 
						|
	goman.New(func() {
 | 
						|
		manager.init()
 | 
						|
	})
 | 
						|
 | 
						|
	return manager
 | 
						|
}
 | 
						|
 | 
						|
func (this *Manager) init() {
 | 
						|
	for range this.ticker.C {
 | 
						|
		this.locker.Lock()
 | 
						|
		for cache := range this.cacheMap {
 | 
						|
			cache.GC()
 | 
						|
		}
 | 
						|
		this.locker.Unlock()
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (this *Manager) Add(cache *Cache) {
 | 
						|
	this.locker.Lock()
 | 
						|
	this.cacheMap[cache] = zero.New()
 | 
						|
	this.locker.Unlock()
 | 
						|
}
 | 
						|
 | 
						|
func (this *Manager) Remove(cache *Cache) {
 | 
						|
	this.locker.Lock()
 | 
						|
	delete(this.cacheMap, cache)
 | 
						|
	this.locker.Unlock()
 | 
						|
}
 | 
						|
 | 
						|
func (this *Manager) Count() int {
 | 
						|
	this.locker.Lock()
 | 
						|
	defer this.locker.Unlock()
 | 
						|
	return len(this.cacheMap)
 | 
						|
}
 |