package main import ( "log" "github.com/robfig/cron" ) //定时清理内存 //当前位置时间,小于此时间超过6个月,则清理 var currentTime = int64(0) var validTime = int64(6 * 30 * 86400) func clearMem() { c := cron.New() c.AddFunc("50 0/3 * * * *", func() { findLock.Lock() defer findLock.Unlock() wg.Wait() //遍历id AllIdsMapLock.Lock() defer AllIdsMapLock.Unlock() clearNum := 0 for k, v := range AllIdsMap2 { if currentTime-v.lastTime > validTime { clearNum++ //删除id的map delete(AllIdsMap2, k) //删除pb if v.P.Buyer != "" { ids := mapPb[v.P.Buyer] if ids != nil { ids.Lock.Lock() ids.Arr = deleteSlice(ids.Arr, k) if len(ids.Arr) == 0 { delete(mapPb, v.P.Buyer) } ids.Lock.Unlock() } } //删除mapPn for _, vn := range append([]string{v.P.ProjectName}, v.P.MPN...) { if vn != "" { ids := mapPn[vn] if ids != nil { ids.Lock.Lock() ids.Arr = deleteSlice(ids.Arr, k) if len(ids.Arr) == 0 { delete(mapPn, vn) } ids.Lock.Unlock() } } } //删除mapPc for _, vn := range append([]string{v.P.ProjectCode}, v.P.MPC...) { if vn != "" { ids := mapPc[vn] if ids != nil { ids.Lock.Lock() ids.Arr = deleteSlice(ids.Arr, k) if len(ids.Arr) == 0 { delete(mapPc, vn) } ids.Lock.Unlock() } } } v = nil } } log.Println("清除完成:", clearNum, len(AllIdsMap2)) }) c.Start() defer c.Stop() select {} } func deleteSlice(arr []string, v string) []string { j := 0 for _, v1 := range arr { if v1 != v { arr[j] = v1 } } return arr[:j] }