提交
This commit is contained in:
82
internal/cache/redis.go
vendored
Normal file
82
internal/cache/redis.go
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gomodule/redigo/redis"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Redis struct {
|
||||
Host string
|
||||
Port string
|
||||
Psw string
|
||||
Pool *redis.Pool
|
||||
}
|
||||
|
||||
func NewRedisInstance(host string, port string, psw string) *Redis {
|
||||
r := &Redis{Host: host, Port: port, Psw: psw}
|
||||
r.init()
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Redis) Get(k string) (interface{}, error) {
|
||||
return r.getConn().Do("get", k)
|
||||
}
|
||||
|
||||
func (r *Redis) Set(k string, v interface{}, ttl int) error {
|
||||
_, err := r.getConn().Do("set", k, v, "EX", ttl)
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *Redis) Exist(k string) (bool, error) {
|
||||
return redis.Bool(r.getConn().Do("EXISTS", k))
|
||||
}
|
||||
|
||||
func (r *Redis) Del(k string) error {
|
||||
_, err := r.getConn().Do("del", k)
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *Redis) getConn() redis.Conn {
|
||||
return r.Pool.Get()
|
||||
}
|
||||
|
||||
func (r *Redis) init() {
|
||||
r.Pool = &redis.Pool{
|
||||
// Maximum number of connections allocated by the pool at a given time.
|
||||
// When zero, there is no limit on the number of connections in the pool.
|
||||
//最大活跃连接数,0代表无限
|
||||
MaxActive: 1000,
|
||||
//最大闲置连接数
|
||||
// Maximum number of idle connections in the pool.
|
||||
MaxIdle: 50,
|
||||
//闲置连接的超时时间
|
||||
// Close connections after remaining idle for this duration. If the value
|
||||
// is zero, then idle connections are not closed. Applications should set
|
||||
// the timeout to a value less than the server's timeout.
|
||||
IdleTimeout: time.Second * 100,
|
||||
//定义拨号获得连接的函数
|
||||
// Dial is an application supplied function for creating and configuring a
|
||||
// connection.
|
||||
//
|
||||
// The connection returned from Dial must not be in a special state
|
||||
// (subscribed to pubsub channel, transaction started, ...).
|
||||
Dial: func() (redis.Conn, error) {
|
||||
port, _ := strconv.Atoi(r.Port)
|
||||
c, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", r.Host, port))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
password := r.Psw
|
||||
if password != "" {
|
||||
if _, err := c.Do("AUTH", password); err != nil {
|
||||
c.Close()
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return c, err
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user