| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- package redis
 
- import (
 
- 	"fmt"
 
- 	"github.com/go-redsync/redsync"
 
- 	"github.com/gomodule/redigo/redis"
 
- 	"time"
 
- )
 
- var pool *redis.Pool
 
- var redisLock *redsync.Redsync
 
- func InitRedis(host, port, password string) error  {
 
- 	pool = &redis.Pool{
 
- 		MaxIdle:     20,
 
- 		IdleTimeout: 240 * time.Second,
 
- 		MaxActive:   50,
 
- 		Dial: func() (redis.Conn, error) {
 
- 			c, err := redis.Dial("tcp", fmt.Sprintf("%s:%s", host, port))
 
- 			if err != nil {
 
- 				return nil, err
 
- 			}
 
- 			if password != "" {
 
- 				if _, err := c.Do("AUTH", password); err != nil {
 
- 					c.Close()
 
- 					return nil, err
 
- 				}
 
- 			}
 
- 			return c, err
 
- 		},
 
- 		TestOnBorrow: func(c redis.Conn, t time.Time) error {
 
- 			_, err := c.Do("PING")
 
- 			return err
 
- 		},
 
- 	}
 
- 	redisLock = redsync.New([]redsync.Pool{pool})
 
- 	return nil
 
- }
 
- func GetRedisConn() (redis.Conn, error)  {
 
- 	conn := pool.Get()
 
- 	return conn, conn.Err()
 
- }
 
- func GetRedisLock(key string, expireTime time.Duration) *redsync.Mutex  {
 
- 	return redisLock.NewMutex(key, redsync.SetExpiry(expireTime))
 
- }
 
 
  |