Go works with Redis via client libraries for caching and data storage.
1import "github.com/redis/go-redis/v9"23// Connect4rdb := redis.NewClient(&redis.Options{5 Addr: "localhost:6379",6 Password: "",7 DB: 0,8})910ctx := context.Background()1112// Basic operations13rdb.Set(ctx, "key", "value", 10*time.Minute)14val, err := rdb.Get(ctx, "key").Result()1516// Hash17rdb.HSet(ctx, "user:1", "name", "Alice", "age", 25)18name, _ := rdb.HGet(ctx, "user:1", "name").Result()1920// List21rdb.LPush(ctx, "queue", "task1", "task2")22task, _ := rdb.BRPop(ctx, 0, "queue").Result()2324// Set25rdb.SAdd(ctx, "tags", "go", "redis", "cache")26tags, _ := rdb.SMembers(ctx, "tags").Result()2728// Caching with fallback29func GetUser(ctx context.Context, id int) (*User, error) {30 key := fmt.Sprintf("user:%d", id)3132 // Try from cache33 cached, err := rdb.Get(ctx, key).Result()34 if err == nil {35 var user User36 json.Unmarshal([]byte(cached), &user)37 return &user, nil38 }3940 // Query DB41 user, err := db.GetUser(ctx, id)42 if err != nil {43 return nil, err44 }4546 // Cache it47 data, _ := json.Marshal(user)48 rdb.Set(ctx, key, data, 10*time.Minute)4950 return user, nil51}5253// Cache-aside pattern54func CacheAside(ctx context.Context, key string, ttl time.Duration,55 fn func() (interface{}, error)) (interface{}, error) {5657 // Read from cache58 cached, err := rdb.Get(ctx, key).Result()59 if err == nil {60 var result interface{}61 json.Unmarshal([]byte(cached), &result)62 return result, nil63 }6465 // Compute66 result, err := fn()67 if err != nil {68 return nil, err69 }7071 // Save to cache72 data, _ := json.Marshal(result)73 rdb.Set(ctx, key, data, ttl)7475 return result, nil76}
Patterns: Cache-aside, Write-through, Write-behind, Pub/Sub.