123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 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/1 * * * *", 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]
- }
|