]> 127.0.0.1 Git - part/.git/commitdiff
104 v0.3.13
authorqydysky <qydysky@foxmail.com>
Sun, 7 Feb 2021 11:55:58 +0000 (19:55 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 7 Feb 2021 11:55:58 +0000 (19:55 +0800)
tmplKV/tmplK.go
tmplKV/tmplV.go

index c910ab383075b5037cb7e5cf9c207f43cf2d195e..34ab4cb93f9721fd868fcaf709085c101db9e345 100644 (file)
@@ -10,6 +10,7 @@ type tmplK struct {
        SumInDruation int64
        Druation int64
        now int64
+       deleteNum int
        pool *idpool.Idpool
        kvt_map map[string]tmplK_item
        sync.RWMutex
@@ -33,13 +34,6 @@ func New_tmplK(SumInDruation,Druation int64) (*tmplK) {
                ticker := time.NewTicker(time.Second)
                for{
                        s.now = (<- ticker.C).Unix()
-                       go func(){
-                               tmp := make(map[string]tmplK_item)
-                               s.Lock()
-                               for k,v := range s.kvt_map {tmp[k] = v}
-                               s.kvt_map = tmp
-                               s.Unlock()
-                       }()
                }
        }()
 
@@ -86,6 +80,11 @@ func (s *tmplK) Get(key string) (isLive bool,id uintptr){
                s.pool.Put(tmp.uid)
                s.Lock()
                delete(s.kvt_map,key)
+               s.deleteNum += 0
+               if s.deleteNum > len(s.kvt_map) {
+                       s.deleteNum = 0
+                       go s.Tidy()
+               }
                s.Unlock()
        }
        return
@@ -99,3 +98,11 @@ func (s *tmplK) Check(key string,id uintptr) bool {
 func (s *tmplK) Buf() (int64,int) {
        return s.now,len(s.kvt_map)
 }
+
+func (s *tmplK) Tidy() {
+       tmp := make(map[string]tmplK_item)
+       s.Lock()
+       for k,v := range s.kvt_map {tmp[k] = v}
+       s.kvt_map = tmp
+       s.Unlock()
+}
\ No newline at end of file
index 102f964b2b5f5b94334c911924b4d45a0df4e80d..6cf2c4cec8cceae75e3e3eb73d8209ac9e38eda4 100644 (file)
@@ -10,6 +10,7 @@ type tmplV struct {
        SumInDruation int64
        Druation int64
        now int64
+       deleteNum int
        pool *idpool.Idpool
        kvt_map map[uintptr]tmplV_item
        sync.RWMutex
@@ -33,13 +34,6 @@ func New_tmplV(SumInDruation,Druation int64) (*tmplV) {
                ticker := time.NewTicker(time.Second)
                for{
                        s.now = (<- ticker.C).Unix()
-                       go func(){
-                               tmp := make(map[uintptr]tmplV_item)
-                               s.Lock()
-                               for k,v := range s.kvt_map {tmp[k] = v}
-                               s.kvt_map = tmp
-                               s.Unlock()
-                       }()
                }
        }()
 
@@ -84,6 +78,10 @@ func (s *tmplV) Get(key uintptr) (isLive bool,contect string){
                s.pool.Put(K.uid)
                s.Lock()
                delete(s.kvt_map,key)
+               if s.deleteNum > len(s.kvt_map) {
+                       s.deleteNum = 0
+                       go s.Tidy()
+               }
                s.Unlock()
        }
        return
@@ -97,3 +95,11 @@ func (s *tmplV) Check(key uintptr,contect string) bool {
 func (s *tmplV) Buf() (int64,int) {
        return s.now,len(s.kvt_map)
 }
+
+func (s *tmplV) Tidy() {
+       tmp := make(map[uintptr]tmplV_item)
+       s.Lock()
+       for k,v := range s.kvt_map {tmp[k] = v}
+       s.kvt_map = tmp
+       s.Unlock()
+}
\ No newline at end of file