cache.go 697 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package cache
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. "github.com/go-redis/redis/v8"
  7. )
  8. var C *redis.Client
  9. func Init(addr string) {
  10. C = redis.NewClient(&redis.Options{
  11. Addr: addr,
  12. DB: 12,
  13. })
  14. ctx := context.Background()
  15. if err := C.Do(ctx, "PING").Err(); err != nil {
  16. fmt.Println(addr)
  17. errStr := fmt.Sprintf("Redis 无法访问: %s", err.Error())
  18. panic(errStr)
  19. }
  20. }
  21. func GetOrSet(ctx context.Context, key string, ttl time.Duration, fetch func() (interface{}, error)) (interface{}, error) {
  22. val, err := C.Get(ctx, key).Result()
  23. if err == nil {
  24. return val, nil
  25. }
  26. result, err := fetch()
  27. if err != nil {
  28. return nil, err
  29. }
  30. C.Set(ctx, key, result, ttl)
  31. return result, nil
  32. }