cache.go 509 B

123456789101112131415161718192021222324252627282930
  1. package cache
  2. import (
  3. "context"
  4. "time"
  5. "github.com/go-redis/redis/v8"
  6. )
  7. var C *redis.Client
  8. func Init(addr string) {
  9. C = redis.NewClient(&redis.Options{
  10. Addr: addr,
  11. DB: 12,
  12. })
  13. }
  14. func GetOrSet(ctx context.Context, key string, ttl time.Duration, fetch func() (interface{}, error)) (interface{}, error) {
  15. val, err := C.Get(ctx, key).Result()
  16. if err == nil {
  17. return val, nil
  18. }
  19. result, err := fetch()
  20. if err != nil {
  21. return nil, err
  22. }
  23. C.Set(ctx, key, result, ttl)
  24. return result, nil
  25. }