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 }