// Package redis 提供统一的 Redis 缓存抽象层 // 支持两种后端: // - redka: 内嵌 Redis 兼容存储(零依赖,独立二进制模式)// Logan.Li // - redis: 外部 Redis 服务器(Docker / 生产环境) // // 使用方式: // // cache, err := redis.New(redis.Config{ // Driver: "redka", // 或 "redis" // Host: "localhost", // Port: 6379, // Password: "", // DB: 0, // DataDir: ".", // redka.db 存放目录(默认可执行文件同级)// Logan.Li // }) // // cache.Set(ctx, "key", "value", 0) // val, _ := cache.Get(ctx, "key") package redis import ( "context" "fmt" "time" ) // Config Redis 配置 // Logan.Li type Config struct { Driver string // "redka" 或 "redis" Host string Port int Password string DB int DataDir string // redka 数据目录 } // SortedSetMember 有序集合成员 // Logan.Li type SortedSetMember struct { Score float64 Member string } // Capabilities 缓存后端能力(local/redka 与外部 Redis 差异)// Logan.Li type Capabilities struct { SortedSet bool `json:"sorted_set"` PubSub bool `json:"pubsub"` } // Cache Redis 缓存接口 // Logan.Li type Cache interface { Capabilities() Capabilities Get(ctx context.Context, key string) (string, error) Set(ctx context.Context, key string, value string, expiration time.Duration) error // SetNX 原子「Set if Not eXists」— 用于分布式锁(多副本 Leader 选举) SetNX(ctx context.Context, key string, value string, expiration time.Duration) (bool, error) Del(ctx context.Context, keys ...string) error Exists(ctx context.Context, keys ...string) (int64, error) Expire(ctx context.Context, key string, expiration time.Duration) error Ping(ctx context.Context) error Close() error // Pub/Sub(实时日志推送) Publish(ctx context.Context, channel string, message string) error // 有序集合操作(热数据指标存储,仅 go-redis 后端完整支持) ZAdd(ctx context.Context, key string, member SortedSetMember) error ZRangeByScore(ctx context.Context, key string, min, max string) ([]SortedSetMember, error) ZRemRangeByScore(ctx context.Context, key string, min, max string) error } // New 创建缓存实例(根据驱动自动选择后端)// Logan.Li func New(cfg Config) (Cache, error) { switch cfg.Driver { case "redka", "": return newRedka(cfg) case "redis": return newGoRedis(cfg) default: return nil, fmt.Errorf("redis: 不支持的驱动: %s (支持: redka, redis)", cfg.Driver) } }