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.
49 lines
774 B
49 lines
774 B
2 months ago
|
package cache
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
cmap "github.com/orcaman/concurrent-map"
|
||
|
)
|
||
|
|
||
|
type CountMapCache struct {
|
||
|
countMap cmap.ConcurrentMap
|
||
|
}
|
||
|
|
||
|
func NewCountMapCache() *CountMapCache {
|
||
|
return &CountMapCache{
|
||
|
countMap: cmap.New(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *CountMapCache) Get(id int64) (int64, bool) {
|
||
|
value, ok := c.countMap.Get(fmt.Sprint(id))
|
||
|
if !ok {
|
||
|
return 0, false
|
||
|
}
|
||
|
|
||
|
commentCount, ok := value.(int64)
|
||
|
if !ok {
|
||
|
return 0, false
|
||
|
}
|
||
|
|
||
|
return commentCount, true
|
||
|
}
|
||
|
|
||
|
func (c *CountMapCache) Set(id, value int64) {
|
||
|
c.countMap.Set(fmt.Sprint(id), value)
|
||
|
}
|
||
|
|
||
|
func (c *CountMapCache) Add(id, increment int64) {
|
||
|
value, ok := c.Get(id)
|
||
|
if ok {
|
||
|
increment += value
|
||
|
|
||
|
}
|
||
|
|
||
|
c.countMap.Set(fmt.Sprint(id), increment)
|
||
|
}
|
||
|
|
||
|
func (c *CountMapCache) Iter(f cmap.IterCb) {
|
||
|
c.countMap.IterCb(f)
|
||
|
}
|