123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package common
- import (
- log "app.yhyue.com/moapp/jylog"
- "encoding/json"
- "github.com/go-redis/redis"
- "time"
- )
- type Redis struct {
- Addr string
- MaxConn int
- Db int
- IdleTimeOut int
- Client *redis.Client
- }
- type RedisConf struct {
- Addr string `json:"address"`
- PoolSize int `json:"poolSize"`
- DB int `json:"db"`
- }
- func InitRedis(conf RedisConf) *Redis {
- r := &Redis{Addr: conf.Addr, MaxConn: conf.PoolSize, Db: conf.DB}
- r.Init()
- return r
- }
- func (r *Redis) Init() {
- opt := &redis.Options{
- Addr: r.Addr,
- DB: r.Db,
- DialTimeout: 10 * time.Second,
- ReadTimeout: 300 * time.Second,
- WriteTimeout: 30 * time.Second,
- PoolSize: r.MaxConn,
- PoolTimeout: 30 * time.Second,
- IdleTimeout: time.Minute,
- IdleCheckFrequency: 5 * time.Second,
- }
- r.Client = redis.NewClient(opt)
- }
- func (r *Redis) Set(k string, v interface{}, timeout int64) bool {
- bt, _ := json.Marshal(v)
- cmd := r.Client.Set(k, bt, time.Duration(timeout)*time.Second)
- b, err := cmd.Result()
- if err != nil {
- log.Errorf("redis Set err %s", err.Error())
- }
- return "OK" == b
- }
- func (r *Redis) Get(k string) interface{} {
- cmd := r.Client.Get(k)
- bt, _ := cmd.Bytes()
- if bt != nil && len(bt) > 0 {
- var res interface{}
- if err := json.Unmarshal(bt, &res); err != nil {
- log.Errorf("redis Get Unmarshal err %v", err)
- }
- return res
- }
- return nil
- }
- func (r *Redis) GetBytes(k string) []byte {
- cmd := r.Client.Get(k)
- bt, err := cmd.Bytes()
- if err != nil {
- if err.Error() != "redis: nil" {
- log.Errorf("redis GetBytes err %s", err.Error())
- }
- return nil
- }
- return bt
- }
- func (r *Redis) MGet(k ...string) []interface{} {
- cmd := r.Client.MGet(k...)
- arr, err := cmd.Result()
- if err != nil {
- log.Errorf("redis MGet err %s", err.Error())
- }
- return arr
- }
- func (r *Redis) Incr(k string) int64 {
- cmd := r.Client.Incr(k)
- res, err := cmd.Result()
- if err != nil {
- log.Errorf("redis Incr err %s", err.Error())
- }
- return res
- }
- func (r *Redis) Del(k string) bool {
- _, err := r.Client.Del(k).Result()
- if err != nil {
- log.Errorf("redis Del err %s", err.Error())
- return false
- }
- return true
- }
- func (r *Redis) Exists(k string) bool {
- res, err := r.Client.Exists(k).Result()
- if err != nil {
- log.Errorf("redis Exists err %s", err.Error())
- }
- return res == 1
- }
- func (r *Redis) IncrTimeout(k string, duration time.Duration) int64 {
- if r.Client.TTL(k).Val().Nanoseconds() < 0 {
- r.Client.Set(k, 1, duration)
- return 1
- } else {
- return r.Incr(k)
- }
- }
- func (r *Redis) GetTTL(key string) int64 {
- cmd := r.Client.TTL(key)
- t, err := cmd.Result()
- if err != nil {
- log.Errorf("redis GetTTL err %s", err.Error())
- }
- if t.Nanoseconds() < 0 {
- return -1
- }
- return time.Unix(time.Now().Unix(), t.Nanoseconds()).Unix()
- }
|