github.com/charlienet/go-mixed@v0.3.7/cache/qps.go (about) 1 package cache 2 3 import ( 4 "sync/atomic" 5 "time" 6 ) 7 8 type qps struct { 9 all qpsContent 10 memoryTotal qpsContent 11 memoryHit qpsContent 12 redisTotal qpsContent 13 redisHit qpsContent 14 sourceTotal qpsContent 15 } 16 17 type qpsContent struct { 18 viewTotal int64 19 total int64 20 } 21 22 func NewQps() *qps { 23 qps := &qps{} 24 go qps.statisticsTotal() 25 return qps 26 } 27 28 func (q *qps) statisticsTotal() { 29 defer func() { 30 if e := recover(); e != nil { 31 } 32 }() 33 34 ticker := time.NewTicker(time.Second) 35 for range ticker.C { 36 q.all.viewTotal = atomic.SwapInt64(&q.all.total, 0) 37 q.memoryTotal.viewTotal = atomic.SwapInt64(&q.memoryTotal.total, 0) 38 q.memoryHit.viewTotal = atomic.SwapInt64(&q.memoryHit.total, 0) 39 q.redisTotal.viewTotal = atomic.SwapInt64(&q.redisTotal.total, 0) 40 q.redisHit.viewTotal = atomic.SwapInt64(&q.redisHit.total, 0) 41 q.sourceTotal.viewTotal = atomic.SwapInt64(&q.sourceTotal.total, 0) 42 } 43 }