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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
package httplib
// 这个暂时用不到
import (
"sync"
"time"
)
// DeadCache 死掉的实例缓存
type DeadCache struct {
sync . RWMutex
Data map [ string ] int64
Duration time . Duration
}
// NewDeadCache 实例化DeadCache, 每个HTTPServer只对应一个DeadCache
func NewDeadCache ( duration time . Duration ) DeadCache {
deadCache := DeadCache {
Duration : duration ,
Data : make ( map [ string ] int64 ) ,
}
go deadCache . Clean ( )
return deadCache
}
// Set 放置一个挂掉的实例
func ( dc * DeadCache ) Set ( key string ) {
dc . Lock ( )
defer dc . Unlock ( )
dc . Data [ key ] = time . Now ( ) . Unix ( )
}
// Exists 检查某个实例是否存在
func ( dc * DeadCache ) Exists ( key string ) bool {
dc . RLock ( )
defer dc . RUnlock ( )
_ , exists := dc . Data [ key ]
return exists
}
// Size 计算所有挂掉的实例的个数
func ( dc * DeadCache ) Size ( ) int {
dc . RLock ( )
defer dc . RUnlock ( )
return len ( dc . Data )
}
// Clean 缓存清理方法, 需要外层起一个goroutine来调用
func ( dc * DeadCache ) Clean ( ) [ ] string {
t1 := time . NewTicker ( 1 * time . Second )
for {
<- t1 . C
now := time . Now ( ) . Unix ( )
dc . Lock ( )
for instance , timestamp := range dc . Data {
if now - timestamp > int64 ( dc . Duration ) {
delete ( dc . Data , instance )
}
}
dc . Unlock ( )
}
}