“github.com/zeromicro/go-zero/core/collection”
包中的 collection.Cache
是 Go 语言中 ZeroMicro 框架提供的缓存数据结构。这个框架通常用于构建微服务和分布式系统。
在 ZeroMicro 中,collection.Cache
提供了一种基于内存的键值对缓存机制,用于临时存储数据以提高数据的访问速度和性能。
通常,使用 collection.Cache
可以执行以下操作:
存储数据:将数据与一个键相关联,并将其存储在缓存中。
和在go-zero中的配置
// 创建一个新的缓存,设置过期时间为5秒
cache := collection.NewCache(time.Second * 5)
// 向缓存中添加数据
cache.Set("key1", "value1")
cache.Set("key2", "value2")
type ServiceContext struct {
Config config.Config
//缓存工具 可在本地内存中进行缓存
LocalCache *collection.Cache
}
func NewServiceContext(c config.Config) *ServiceContext {
//配置连接mysql
mysql := sqlx.NewMysql(c.DataSource)
//值为超时时间
cache, err := collection.NewCache(localCacheExpire)
if err != nil {
panic(err)
}
//给配置赋值
return &ServiceContext{
Config: c,
LocalCache: cache,
}
获取数据:通过键从缓存中检索数据
// 从缓存中获取数据
val1, exist1 := cache.Get("key1")
val2, exist2 := cache.Get("key2")
删除值
// 删除 key1 对应的值
cache.Delete("key1")
这个缓存实现通常具有以下特性:
- 内存存储:数据存储在内存中,以便快速访问。
- 并发安全:支持并发访问,可以安全地在多个 goroutine 中使用。
- 过期策略:可以设置数据的过期时间,以确保缓存中的数据不会永久存在。
- 淘汰策略:支持根据一定的策略淘汰不常用的数据,以释放内存空间。
和redis的区别
优点:
- 简单性: 由于
collection.Cache
是基于内存的缓存,因此使用它相对来说更简单,无需额外的安装和配置。 - 性能: 由于是在内存中进行操作,所以
collection.Cache
通常具有很快的读写速度,适合于对实时性要求高的场景。
缺点:
- 有限容量:
collection.Cache
通常受限于可用的内存大小,因此不能存储大量数据。当数据量增加时,可能会导致性能下降或者内存溢出的问题。 - 单机限制:
collection.Cache
存储在单个服务器的内存中,因此不适合于分布式环境下的数据共享和负载均衡。
redis
优点:
- 分布式支持: Redis 支持分布式部署,可以横向扩展以处理大规模数据。
- 持久化: Redis 提供多种持久化方式,可以将数据保存到磁盘上,保证数据不会因服务器重启而丢失。
- 丰富功能: Redis 不仅是缓存,还提供了丰富的数据结构和功能,如列表、哈希、发布/订阅等,非常适合用于构建各种复杂的应用场景
综上所述,如果你的应用场景对于数据的实时性要求较高,且数据量不大,可以考虑使用 collection.Cache
。而如果你需要处理大规模的数据,或者需要分布式支持、持久化功能以及更多的高级特性,那么 Redis 可能更适合你的需求。