index.go 4.82 KB
package lxredis

import (
	"fmt"

	redigo "github.com/garyburd/redigo/redis"
)

var LXREDISPOOL *redigo.Pool
var LXREDISCONFIG MapRedisConfig //默认配置

type MapRedisConfig struct {
	Host   string `json:"host"`
	Port   string `json:"port"`
	Pwd    string `json:"pwd"`
	Db     string `json:"Db"`
	Prefix string `json:"prefix"`
}

type LXredis struct {
	Name   string `json:"name"`
	Val    string `json:"val"`
	Db     string `json:"db"`
	Prefix string `json:"prefix"`
}

func GetLxRedis() redigo.Conn {
	return LXREDISPOOL.Get()
}

// InitRedis 初始化Redis
func InitRedis(config MapRedisConfig) (err error) {

	LXREDISCONFIG = config

	pool_size := 20

	LXREDISPOOL = redigo.NewPool(func() (redigo.Conn, error) {
		c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%s", LXREDISCONFIG.Host, LXREDISCONFIG.Port))
		if err != nil {
			return nil, err
		}
		if _, err := c.Do("AUTH", LXREDISCONFIG.Pwd); err != nil {
			c.Close()
			return nil, err
		}
		if _, err := c.Do("SELECT", LXREDISCONFIG.Db); err != nil {
			c.Close()
			return nil, err
		}

		return c, nil
	}, pool_size)

	return
}

// IsExist 判断key是否存在
func (con *LXredis) IsExist() (isexit bool, err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	isexit, err = redigo.Bool(redis.Do("EXISTS", nname))
	return
}

// Set 设置redis字符串
func (con *LXredis) Set() (err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	_, err = redis.Do("set", nname, con.Val)

	return
}

// SetTime 设置redis字符串 加过期时间
func (con *LXredis) SetTime(times int) (err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	_, err = redis.Do("set", nname, con.Val, "EX", times)

	return
}

// GET 获取redis
func (con *LXredis) GET() (gstr string, err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}

	}

	gstr, err = redigo.String(redis.Do("GET", nname))

	return
}

// INCR 自增
func (con *LXredis) INCR() (nums int64, err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	nums, err = redigo.Int64(redis.Do("INCR", nname))

	return
}

// DELETE 删除
func (con *LXredis) DELETE() (err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	is_key_exit, _ := redigo.Bool(redis.Do("EXISTS", nname))
	if is_key_exit {
		_, err = redis.Do("DEL", nname)
		if err != nil {
			return
		}
	}

	return
}

// EXPIRE 设置过期时间
func (con *LXredis) EXPIRE(times int) (err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	_, err = redigo.Int(redis.Do("EXPIRE", nname, times))

	return
}

// TTL 查看过期时间
func (con *LXredis) TTL() (ttl int, err error) {

	var nname string

	if con.Prefix != "" {
		nname = con.Prefix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	if con.Db != "" {
		if _, err = redis.Do("SELECT", con.Db); err != nil {
			return
		}
	}

	ttl, err = redigo.Int(redis.Do("ttl", nname))

	return
}

// LOCK 排他锁
func (con *LXredis) LOCK(ex int) (islock bool, err error) {

	var (
		nname string
		ix    = "lock::"
		binf  int
	)

	if ex < 1 {
		ex = 1
	}

	if con.Prefix != "" {
		nname = con.Prefix + ix + con.Name
	} else {
		nname = LXREDISCONFIG.Prefix + ix + con.Name
	}

	redis := GetLxRedis()

	defer redis.Close()

	binf, err = redigo.Int(redis.Do("setnx", nname, ""))

	redis.Do("EXPIRE", nname, ex)

	if err == nil && binf == 0 {
		islock = true
	}

	return
}