使用golang操作redis-curd

package main

import(
	"fmt"
	"github.com/garyburd/redigo/redis"
	"time"
)


type Redis struct{
	pool *redis.Pool
	Server string
	Port int
	Password string
	DB int
}


func (r *Redis) InitRedisConn(){
	r.pool = &redis.Pool{
		Dial:func() (redis.Conn,error){
			c,err := redis.Dial("tcp",fmt.Sprintf("%s:%d",r.Server,r.Port))
			if err != nil {
				return nil,err
			}
			if _,err := c.Do("AUTH",r.Password); err != nil {
				c.Close()
				return nil,err
			}

			if _,err := c.Do("SELECT",r.DB); err != nil {
				c.Close()
				return nil,err
			}
			return c,nil
		},
		TestOnBorrow:func(c redis.Conn, t time.Time) error{
			if time.Since(t) < time.Minute {
				return nil
			}
			_,err := c.Do("PING")
			return err
		},
		MaxIdle: 3,
        IdleTimeout: 240 * time.Second,
		MaxActive: 1000,
	}
}


func (r *Redis) Set(key string, value interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("SET",key,value)
}

func (r *Redis) Get(key string) (interface{}, error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("GET",key)
}


func (r *Redis) MSet(mkv ...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("MSet",mkv...)
}

func (r *Redis) MGet(mkey ...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("MGet",mkey...)
}


func(r *Redis) HSet(key string, field string,value interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("HSET",key,field,value)
}

func(r *Redis) HGet(key string, field string)(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("HGET",key,field)
}


func (r *Redis) HMSet(mkfv ...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	//HMSET monster name tom age 22 skill test
	return conn.Do("HMSet",mkfv...)
}

func (r *Redis) HMGet(kfields...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	 return conn.Do("HMGet",kfields...)
}


func(r *Redis) LPush(value ...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("LPush",value...)
}


func (r *Redis) LRange(value ...interface{})(interface{},error){
	conn := r.pool.Get()
	defer conn.Close()
	return conn.Do("LRange",value...)
}

func main(){
	fmt.Println("test redis conn")
	r := &Redis{
		Server: "127.0.0.1",
		Port: 6379,
		Password: "abc@0912",
		DB:0,
	}
	r.InitRedisConn()

	fmt.Println("set operator: set name 虞姬魔女")
	r.Set("name","虞姬魔女")

	fmt.Println("get operator: get name")
	res,err := r.Get("name")
	name,err := redis.String(res,err)
	if err != nil {
		fmt.Println("get name value fail:%v\n",err)
		return
	}
	fmt.Printf("name:%s\n",name)


	fmt.Println("-------------------------------------")
	fmt.Println("hset student name tom")
	r.HSet("student","name","tom")
	r.HSet("student","age",22)
	r.HSet("student","score",88.8)

	res,err = r.HGet("student","name")
	name,err = redis.String(res,err)
	if err != nil {
		fmt.Printf("hget student name fail:%v\n",err)
		return
	}
	fmt.Printf("student name:%v\n",name)

	fmt.Println("-------------------------------------")

	fmt.Println("name mxf age 22 job 'golang coder'")
	r.MSet("name","mxf","age",22,"job","golang coder")
	rs,err := r.MGet("name","age","job")
	if err != nil {
		fmt.Printf("mget name age job fail%v\n",err)
		return
	}
	result,err := redis.Strings(rs,err)
	if err != nil {
		fmt.Println("redis.Strings fail:%v\n",err)
		return
	}

	for _,v := range result{
		fmt.Println(v)
	}

	fmt.Println("-------------------------------------")

	_,err = r.HMSet("monster","name","孙悟空","age","500","skill","筋斗云十万八千里")
	if err != nil {
		fmt.Printf("hmset fail:%v\n",err)
		return
	}
	hrs,err := r.HMGet("monster","name","age","skill")
	if err!= nil {
		fmt.Println("hmget name age skill fial:%v\n",err)
		return
	}
	m,_ := redis.Strings(hrs,err)
	fmt.Printf("%#v\n",m)


	fmt.Println("-------------------------------------")

	r.LPush("history","sina.com","baidu.com","wangyi.com","qq.com","weixin.com","google.com","mlemon.com")
	//获取最近5个浏览记录
	lrs,err := r.LRange("history","0","4")
	if err != nil {
		fmt.Println("lragne history 0 4 fail:",err)
		return
	}
	list,_ := redis.Strings(lrs,err)
	fmt.Println("last 5 history:",list)




}


test redis conn
set operator: set name 虞姬魔女
get operator: get name
name:虞姬魔女
-------------------------------------
hset student name tom
student name:tom
-------------------------------------
name mxf age 22 job 'golang coder'
mxf
22
golang coder
-------------------------------------
[]string{"孙悟空", "500", "筋斗云十万八千里"}
-------------------------------------
last 5 history: [mlemon.com google.com weixin.com qq.com wangyi.com]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值