github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/cache/redis/redis.go (about)

     1  package redis
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/qxnw/lib4go/cache"
     8  	"github.com/qxnw/lib4go/redis"
     9  )
    10  
    11  // redisClient memcache配置文件
    12  type redisClient struct {
    13  	servers []string
    14  	client  *redis.Client
    15  }
    16  
    17  // New 根据配置文件创建一个redis连接
    18  func New(addrs []string, conf string) (m *redisClient, err error) {
    19  	m = &redisClient{servers: addrs}
    20  	m.client, err = redis.NewClientByJSON(conf)
    21  	if err != nil {
    22  		return
    23  	}
    24  	return
    25  }
    26  
    27  // Get 根据key获取memcache中的数据
    28  func (c *redisClient) Get(key string) (string, error) {
    29  	data, err := c.client.Get(key).Result()
    30  	if err != nil {
    31  		if err.Error() == "redis: nil" {
    32  			return data, nil
    33  		}
    34  		return "", err
    35  	}
    36  	return data, nil
    37  }
    38  
    39  //Decrement 增加变量的值
    40  func (c *redisClient) Decrement(key string, delta int64) (n int64, err error) {
    41  	return c.client.DecrBy(key, delta).Result()
    42  }
    43  
    44  //Increment 减少变量的值
    45  func (c *redisClient) Increment(key string, delta int64) (n int64, err error) {
    46  	return c.client.IncrBy(key, delta).Result()
    47  }
    48  
    49  //Gets 获取多条数据
    50  func (c *redisClient) Gets(key ...string) (r []string, err error) {
    51  	data, err := c.client.MGet(key...).Result()
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  	r = make([]string, len(data))
    56  	for _, v := range data {
    57  		r = append(r, v.(string))
    58  	}
    59  	return
    60  }
    61  
    62  // Add 添加数据到memcache中,如果memcache存在,则报错
    63  func (c *redisClient) Add(key string, value string, expiresAt int) error {
    64  	expires := time.Duration(expiresAt) * time.Second
    65  	if expiresAt == 0 {
    66  		expires = 0
    67  	}
    68  	i, err := c.client.Exists(key).Result()
    69  	if err != nil {
    70  		return err
    71  	}
    72  	if i == 1 {
    73  		err = fmt.Errorf("key:%s已存在", key)
    74  		return err
    75  	}
    76  	_, err = c.client.Set(key, value, expires).Result()
    77  	return err
    78  }
    79  
    80  // Set 更新数据到memcache中,没有则添加
    81  func (c *redisClient) Set(key string, value string, expiresAt int) error {
    82  	expires := time.Duration(expiresAt) * time.Second
    83  	if expiresAt == 0 {
    84  		expires = 0
    85  	}
    86  	_, err := c.client.Set(key, value, expires).Result()
    87  	return err
    88  }
    89  
    90  // Delete 删除memcache中的数据
    91  func (c *redisClient) Delete(key string) error {
    92  	_, err := c.client.Del(key).Result()
    93  	return err
    94  }
    95  
    96  // Delete 删除memcache中的数据
    97  func (c *redisClient) Exists(key string) bool {
    98  	r, err := c.client.Exists(key).Result()
    99  	return err == nil && r == 1
   100  }
   101  
   102  // Delay 延长数据在memcache中的时间
   103  func (c *redisClient) Delay(key string, expiresAt int) error {
   104  	expires := time.Duration(expiresAt) * time.Second
   105  	if expiresAt == 0 {
   106  		expires = 0
   107  	}
   108  	_, err := c.client.Expire(key, expires).Result()
   109  	return err
   110  }
   111  func (c *redisClient) Close() error {
   112  	return c.client.Close()
   113  }
   114  
   115  type redisResolver struct {
   116  }
   117  
   118  func (s *redisResolver) Resolve(address []string, conf string) (cache.ICache, error) {
   119  	return New(address, conf)
   120  }
   121  func init() {
   122  	cache.Register("redis", &redisResolver{})
   123  }