123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package cache
- import (
- "context"
- "eta/eta_mini_ht_api/common/component/config"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/contants"
- "github.com/go-redis/redis/v8"
- "log"
- "strings"
- "sync"
- "time"
- )
- var (
- redisCache *RedisCache
- redisOnce sync.Once
- )
- func init() {
- if GetInstance() == nil {
- panic("初始化redis失败")
- }
- logger.Info("redis初始化成功")
- }
- func GetInstance() *RedisCache {
- redisOnce.Do(func() {
- // 检查是否成功获取到RedisConfig实例,没有配置则不进行redis初始化
- if redisConf, ok := config.GetConfig(contants.REDIS).(*config.RedisConfig); ok {
- if redisConf.GetHost() != "" {
- logger.Info("初始化redis")
- // 这里可以添加初始化Redis的逻辑
- redisCache = newRedis(redisConf)
- _, err := redisCache.Do("Ping")
- if err != nil {
- log.Fatalf("redis 链接失败:%v", err)
- }
- logger.Info("redis地址:%v", redisConf.GetHost())
- } else {
- logger.Info("Redis configuration is incomplete: Host is missing")
- return
- }
- }
- })
- return redisCache
- }
- func newRedis(config *config.RedisConfig) *RedisCache {
- if &config == nil || config.GetHost() == "" {
- log.Fatalf("redis 连接失败")
- }
- redisTemplate := redis.NewUniversalClient(&redis.UniversalOptions{
- Addrs: strings.Split(config.GetHost(), ","),
- DB: config.GetDatabase(),
- Password: config.GetPassword(),
- IdleTimeout: time.Second * time.Duration(config.GetIdleTimeout()),
- MinIdleConns: config.GetMaxIdle(),
- })
- return &RedisCache{redisTemplate: redisTemplate}
- }
- // RedisCache
- // @Description: redis缓存
- type RedisCache struct {
- redisTemplate redis.UniversalClient
- }
- func (r *RedisCache) GetHSet(key string) map[string]string {
- return r.GetHSetWithContext(context.Background(), key)
- }
- func (r *RedisCache) GetHSetWithContext(ctx context.Context, key string) map[string]string {
- value, _ := r.redisTemplate.HGetAll(ctx, key).Result()
- return value
- }
- func (r *RedisCache) SetHSet(key string, timeout time.Duration, val ...interface{}) error {
- return r.SetHSetWithContext(context.Background(), key, timeout, val...)
- }
- func (r *RedisCache) SetHSetWithContext(ctx context.Context, key string, timeout time.Duration, val ...interface{}) error {
- err := r.redisTemplate.HSet(ctx, key, val...).Err()
- if err != nil {
- return err
- }
- return r.redisTemplate.Expire(ctx, key, timeout).Err()
- }
- // GetString 获取一个值
- func (r *RedisCache) GetString(key string) string {
- return r.GetStringWithContext(context.Background(), key)
- }
- // GetStringWithContext 获取一个值
- func (r *RedisCache) GetStringWithContext(ctx context.Context, key string) (value string) {
- value, _ = r.redisTemplate.Get(ctx, key).Result()
- return
- }
- // SetString 设置一个值
- func (r *RedisCache) SetString(key string, val string, expired int) error {
- return r.SetStringWithContext(context.Background(), key, val, expired)
- }
- // SetStringWithContext 设置一个值
- func (r *RedisCache) SetStringWithContext(ctx context.Context, key string, val string, expired int) error {
- if expired <= 0 {
- return r.redisTemplate.Set(ctx, key, val, time.Duration(expired)).Err()
- }
- return r.redisTemplate.SetEX(ctx, key, val, time.Duration(expired)*time.Second).Err()
- }
- // IsExist 判断key是否存在
- func (r *RedisCache) IsExist(key string) bool {
- return r.IsExistWithContext(context.Background(), key)
- }
- // IsExistWithContext 判断key是否存在
- func (r *RedisCache) IsExistWithContext(ctx context.Context, key string) bool {
- result, _ := r.redisTemplate.Exists(ctx, key).Result()
- return result > 0
- }
- func (r *RedisCache) SetIfNotExist(key string, val string, expired int) bool {
- return r.SetIfNotExistWithContext(context.Background(), key, val, expired)
- }
- func (r *RedisCache) SetIfNotExistWithContext(ctx context.Context, key string, val string, expired int) bool {
- return r.redisTemplate.SetNX(ctx, key, val, time.Duration(expired)*time.Second).Val()
- }
- // Delete 删除
- func (r *RedisCache) Delete(key string) error {
- return r.DeleteWithContext(context.Background(), key)
- }
- // DeleteWithContext 删除
- func (r *RedisCache) DeleteWithContext(ctx context.Context, key string) error {
- return r.redisTemplate.Del(ctx, key).Err()
- }
- // Do 执行指令
- func (r *RedisCache) Do(commandName string, args ...interface{}) (reply interface{}, err error) {
- return r.DoWithContext(context.Background(), commandName, args...)
- }
- // DoWithContext 执行指令
- func (r *RedisCache) DoWithContext(ctx context.Context, commandName string, args ...interface{}) (reply interface{}, err error) {
- newArgs := []interface{}{commandName}
- newArgs = append(newArgs, args...)
- return r.redisTemplate.Do(ctx, newArgs...).Result()
- }
- func (r *RedisCache) RedisClient() redis.UniversalClient {
- return r.redisTemplate
- }
|