GoWind 开源生态GoWind 开源生态
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
  • 介绍

    • GoWind 框架
    • 框架整体架构
  • go-wind 核心

    • go-wind 核心框架
    • App 生命周期管理
    • Context 传播
    • Transport 抽象
    • Log 门面接口
  • go-wind-plugins 插件

    • go-wind-plugins 插件总览
    • 插件配置系统
    • 插件注册机制(SPI)
    • 日志适配插件
    • 传输协议插件
    • 消息中间件插件
    • 编码解码插件
    • 安全与认证插件
    • 链路追踪插件
    • 缓存插件
    • 对象存储插件(OSS)
    • 限流插件
    • 指标监控插件
    • AI 插件
    • 工作流插件
    • 数据库与缓存插件
    • Bootstrap 集成与网关插件
    • 压缩与序列化插件
    • 模板渲染与验证插件
  • go-wind-bootstrap 启动器

    • go-wind-bootstrap 声明式启动器
    • Bootstrap 配置系统
    • Bootstrap SPI 机制
    • 声明式中间件编排
    • Bootstrap CLI 工具
    • Bootstrap 实战示例
  • 教程

    • 快速入门教程
    • 自定义插件开发教程
    • 多协议同时监听教程
    • 框架迁移指南

缓存插件

go-wind-plugins 提供统一的缓存接口,支持 Redis、Memcached、本地缓存等。

一、Cache 接口

type Cache interface {
    Get(ctx context.Context, key string) ([]byte, error)
    Set(ctx context.Context, key string, value []byte, ttl time.Duration) error
    Delete(ctx context.Context, key string) error
    Exists(ctx context.Context, key string) (bool, error)
    Keys(ctx context.Context, pattern string) ([]string, error)
}

二、适配器列表

适配器导入路径特点
Redisplugins/cache/redis分布式缓存、丰富的数据结构
Memcachedplugins/cache/memcached高性能纯内存缓存
FreeCacheplugins/cache/freecache进程内缓存、零 GC
BigCacheplugins/cache/bigcache进程内缓存、高吞吐
Ristrettoplugins/cache/ristretto进程内缓存、LFU 策略

三、Redis

import redisPlugin "github.com/tx7do/go-wind-plugins/cache/redis"

cache := redisPlugin.NewClient(
    redisPlugin.WithAddr("localhost:6379"),
    redisPlugin.WithDB(0),
    redisPlugin.WithPassword(""),
    redisPlugin.WithPoolSize(50),
    redisPlugin.WithMinIdleConns(10),
)

基本操作

// Set
cache.Set(ctx, "user:123", []byte(`{"name":"alice"}`), 10*time.Minute)

// Get
data, err := cache.Get(ctx, "user:123")

// Delete
cache.Delete(ctx, "user:123")

// Exists
exists, _ := cache.Exists(ctx, "user:123")

YAML 配置

cache:
  redis:
    addr: "localhost:6379"
    password: ${REDIS_PASSWORD}
    db: 0
    pool_size: 50
    min_idle_conns: 10
    max_retries: 3
    read_timeout: 3s
    write_timeout: 3s
    key_prefix: "myapp:"

Redis 原生客户端

client := redisPlugin.GetClient()
// 获取 go-redis 原生客户端,支持 HSet, SAdd, ZAdd 等高级操作
client.HSet(ctx, "user:123:profile", "name", "alice", "age", 30)
client.SAdd(ctx, "tags:123", "vip", "active")
client.ZAdd(ctx, "ranking", redis.Z{Score: 100, Member: "alice"})

四、Memcached

import memcachedPlugin "github.com/tx7do/go-wind-plugins/cache/memcached"

cache := memcachedPlugin.NewClient(
    memcachedPlugin.WithServers("localhost:11211"),
    memcachedPlugin.WithTimeout(2*time.Second),
    memcachedPlugin.WithMaxIdleConns(10),
)

YAML 配置

cache:
  memcached:
    servers:
      - "localhost:11211"
      - "localhost:11212"
    timeout: 2s
    max_idle_conns: 10

五、FreeCache(本地缓存)

import freecachePlugin "github.com/tx7do/go-wind-plugins/cache/freecache"

cache := freecachePlugin.New(
    freecachePlugin.WithSize(256 * 1024 * 1024),  // 256 MB
)

YAML 配置

cache:
  freecache:
    size: 268435456   # 256 MB in bytes

六、多级缓存

cache:
  l1:                    # 本地缓存 (L1)
    driver: freecache
    size: 134217728      # 128 MB
    ttl: 60s
  l2:                    # 分布式缓存 (L2)
    driver: redis
    addr: localhost:6379
    ttl: 10m
// 多级缓存包装器
func getCached(ctx context.Context, key string) ([]byte, error) {
    // L1: 本地缓存
    if data, err := l1Cache.Get(ctx, key); err == nil {
        return data, nil
    }

    // L2: Redis
    if data, err := l2Cache.Get(ctx, key); err == nil {
        l1Cache.Set(ctx, key, data, 60*time.Second)
        return data, nil
    }

    // DB 回源
    data := loadFromDB(key)
    l1Cache.Set(ctx, key, data, 60*time.Second)
    l2Cache.Set(ctx, key, data, 10*time.Minute)
    return data, nil
}

七、选择指南

场景推荐理由
通用分布式缓存Redis丰富的数据结构、持久化
纯内存高性能Memcached极简、极致性能
热点数据本地缓存FreeCache/BigCache零 GC、减少网络开销
多级缓存L1(本地) + L2(Redis)兼顾延迟和一致性

相关文档

  • 插件配置系统
  • 插件总览
  • 数据库插件
Edit this page
Last Updated:: 6/21/26, 9:28 PM
Contributors: Bobo
Prev
链路追踪插件
Next
对象存储插件(OSS)