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 }