mirror of
https://github.com/veops/oneterm.git
synced 2025-10-04 06:56:25 +08:00
49 lines
950 B
Go
49 lines
950 B
Go
package redis
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/veops/oneterm/conf"
|
|
"github.com/veops/oneterm/logger"
|
|
)
|
|
|
|
var (
|
|
// RC redis cache client
|
|
RC *redis.Client
|
|
)
|
|
|
|
func init() {
|
|
ctx := context.Background()
|
|
addr := fmt.Sprintf("%s:%d", conf.Cfg.Redis.Host, conf.Cfg.Redis.Port)
|
|
RC = redis.NewClient(&redis.Options{
|
|
Addr: addr,
|
|
Password: conf.Cfg.Redis.Password,
|
|
})
|
|
|
|
if _, err := RC.Ping(ctx).Result(); err != nil {
|
|
logger.L().Fatal("ping redis failed", zap.String("addr", addr), zap.Error(err))
|
|
}
|
|
}
|
|
|
|
func Get(ctx context.Context, key string, dst any) (err error) {
|
|
bs, err := RC.Get(ctx, key).Bytes()
|
|
if err != nil {
|
|
return
|
|
}
|
|
return json.Unmarshal(bs, dst)
|
|
}
|
|
|
|
func SetEx(ctx context.Context, key string, src any, exp time.Duration) (err error) {
|
|
bs, err := json.Marshal(src)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return RC.SetEx(ctx, key, bs, exp).Err()
|
|
}
|