WEQServer/internal/data/weather_cache.go

70 lines
1.7 KiB
Go

package data
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
"weather_and_earthquake/internal/config"
)
var _redis *redis.Client
var _expire time.Duration
// 初始化 redis 连接
func InitWeatherCache(ctx context.Context, data *config.Redis) error {
_redis = redis.NewClient(&redis.Options{
Addr: data.Addr,
Password: data.Password,
DB: data.DB,
ReadTimeout: data.ReadTimeout * time.Second,
WriteTimeout: data.WriteTimeout * time.Second,
PoolSize: data.PoolSize,
MinIdleConns: data.MinIdleConns,
})
_expire = data.Expire
_, err := _redis.Ping(ctx).Result()
return err
}
// 设置某个地方的天气情况
func SetWeatherCondition(ctx context.Context, key, condition string) error {
redis_key := fmt.Sprintf("%s-condition", key)
_, err := _redis.SetNX(ctx, redis_key, condition, _expire).Result()
return err
}
// 查找某个地方的天气情况
func GetWeatherCondition(ctx context.Context, key string) (string, error) {
redis_key := fmt.Sprintf("%s-condition", key)
value, err := _redis.Get(ctx, redis_key).Result()
if err == nil {
return value, nil
} else if err == redis.Nil {
return "", nil
} else {
return "", err
}
}
// 设置某个地方的天气预报
func SetDailyForecasts(ctx context.Context, key, forecasts string) error {
redis_key := fmt.Sprintf("%s-forecasts", key)
_, err := _redis.SetNX(ctx, redis_key, forecasts, _expire).Result()
return err
}
// 查找某个地方的天气预报
func GetDailyForecasts(ctx context.Context, key string) (string, error) {
redis_key := fmt.Sprintf("%s-forecasts", key)
value, err := _redis.Get(ctx, redis_key).Result()
if err == nil {
return value, nil
} else if err == redis.Nil {
return "", nil
} else {
return "", err
}
}