初始化项目
This commit is contained in:
52
trunk/center/common/cache/cache.go
vendored
Normal file
52
trunk/center/common/cache/cache.go
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Cache 结构体代表缓存
|
||||
type Cache struct {
|
||||
data map[string]any
|
||||
rwmu sync.RWMutex
|
||||
}
|
||||
|
||||
// NewCache 创建并返回一个新的缓存实例
|
||||
func NewCache() *Cache {
|
||||
return &Cache{
|
||||
data: make(map[string]any),
|
||||
}
|
||||
}
|
||||
|
||||
// Set 方法用于向缓存中设置键值对,写操作会加写锁保证并发安全
|
||||
func (c *Cache) set(key string, value any) {
|
||||
c.rwmu.Lock()
|
||||
defer c.rwmu.Unlock()
|
||||
c.data[key] = value
|
||||
}
|
||||
|
||||
// Get 方法用于从缓存中根据键获取对应的值,读操作会加读锁允许并发读
|
||||
func (c *Cache) get(key string) any {
|
||||
c.rwmu.RLock()
|
||||
defer c.rwmu.RUnlock()
|
||||
value := c.data[key]
|
||||
return value
|
||||
}
|
||||
|
||||
// Delete 方法用于从缓存中删除指定的键值对,写操作会加写锁保证并发安全
|
||||
func (c *Cache) Delete(key string) {
|
||||
c.rwmu.Lock()
|
||||
defer c.rwmu.Unlock()
|
||||
delete(c.data, key)
|
||||
}
|
||||
|
||||
// GetData 方法用于从缓存中根据键获取对应的值,读操作会加读锁允许并发读
|
||||
func GetData[V any](c *Cache, key string) (value V, ok bool) {
|
||||
v := c.get(key)
|
||||
value, ok = v.(V)
|
||||
return
|
||||
}
|
||||
|
||||
// SetData 方法用于向缓存中设置键值对,写操作会加写锁保证并发安全
|
||||
func SetData(c *Cache, key string, value any) {
|
||||
c.set(key, value)
|
||||
}
|
||||
48
trunk/center/common/cache/cacheslice.go
vendored
Normal file
48
trunk/center/common/cache/cacheslice.go
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// SliceCache结构体代表基于切片的缓存,内部使用切片存储元素,并通过读写锁保证并发安全
|
||||
type SliceCache struct {
|
||||
data []interface{}
|
||||
rwmu sync.RWMutex
|
||||
}
|
||||
|
||||
// NewSliceCache创建并返回一个新的基于切片的缓存实例
|
||||
func NewSliceCache() *SliceCache {
|
||||
return &SliceCache{
|
||||
data: make([]interface{}, 0),
|
||||
}
|
||||
}
|
||||
|
||||
// Add方法用于向切片缓存中添加元素,写操作加写锁保证并发安全
|
||||
func (sc *SliceCache) Add(element interface{}) {
|
||||
sc.rwmu.Lock()
|
||||
sc.data = append(sc.data, element)
|
||||
sc.rwmu.Unlock()
|
||||
}
|
||||
|
||||
// GetAll方法用于获取切片缓存中的所有元素,读操作加读锁允许并发读
|
||||
func (sc *SliceCache) GetAll() []interface{} {
|
||||
sc.rwmu.RLock()
|
||||
result := make([]interface{}, len(sc.data))
|
||||
copy(result, sc.data)
|
||||
sc.rwmu.RUnlock()
|
||||
return result
|
||||
}
|
||||
|
||||
// Remove方法用于从切片缓存中删除指定元素,写操作加写锁保证并发安全
|
||||
func (sc *SliceCache) Remove(element interface{}) bool {
|
||||
sc.rwmu.Lock()
|
||||
for i, e := range sc.data {
|
||||
if e == element {
|
||||
sc.data = append(sc.data[:i], sc.data[i+1:]...)
|
||||
sc.rwmu.Unlock()
|
||||
return true
|
||||
}
|
||||
}
|
||||
sc.rwmu.Unlock()
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user