发布于2026-07-04 阅读(0)
扫一扫,手机访问
在Linux环境下,Golang能用的缓存技术其实不少,而且各有各的适用场景。从实际项目经验来看,选对缓存方案,性能能翻好几倍。下面梳理了几个主流的做法,附上最简代码示范,希望能帮你快速上手。

最简单的路子,直接用Go标准库里的sync.Map。不需要额外安装任何第三方包,开箱即用,适合小规模、低并发的临时缓存场景。说白了就是在进程内存里放一个线程安全的map,读写都很快。
package main
import (
"fmt"
"sync"
)
func main() {
var cache sync.Map
cache.Store("key1", "value1")
cache.Store("key2", "value2")
value, ok := cache.Load("key1")
if ok {
fmt.Println(value)
}
}
Redis不用多说,高并发下的标配。Go这边用go-redis库来对接,连接、读写都非常顺手。需要注意的是,Redis虽然快,但毕竟是网络调用,延迟比本地内存高一个数量级,适合做分布式缓存或者共享状态。
package main
import (
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
err := rdb.Set(ctx, "key1", "value1", 0).Err()
if err != nil {
panic(err)
}
val, err := rdb.Get(ctx, "key1").Result()
if err != nil {
panic(err)
}
fmt.Println(val)
}
Memcached也是经典的分布式内存缓存系统,协议简单、性能极高。Go社区有gomemcache库,用法很像Redis,但Memcached不支持持久化和丰富的数据结构,胜在极简、无锁。
package main
import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
)
func main() {
mc := memcache.New("localhost:11211")
err := mc.Set(&memcache.Item{
Key: "key1",
Value: []byte("value1"),
})
if err != nil {
panic(err)
}
item, err := mc.Get("key1")
if err != nil {
panic(err)
}
fmt.Println(string(item.Value))
}
如果不想依赖外部服务,又希望比sync.Map更高效、支持自动过期,可以试试BigCache。它专为Go设计,内部用字节数组存储,GC压力小,适合读写频繁、数据量大的单进程缓存场景。
package main
import (
"fmt"
"github.com/allegro/bigcache/v3"
"time"
)
func main() {
c := bigcache.NewBigCache(bigcache.DefaultOptions(8 * time.Minute))
err := c.SetBytes([]byte("key1"), []byte("value1"))
if err != nil {
panic(err)
}
data, found := c.GetBytes([]byte("key1"))
if found {
fmt.Println(string(data))
}
}
以上这几种方案各有侧重:sync.Map适合零依赖的小场景,Redis和Memcached适合分布式环境,BigCache则是在单进程内追求极致效率。实际选型时,没有银弹——需要根据你的应用规模、并发量、数据一致性要求来做权衡。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8