go redigo的简单操作

Posted 熔遁丶螺旋手里剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go redigo的简单操作相关的知识,希望对你有一定的参考价值。

golang操作redis主要有两个库,go-redis和redigo。两者操作都比较简单,区别上redigo更像一个client执行各种操作都是通过Do函数去做的,redis-go对函数的封装更好,相比之下redigo操作redis显得有些繁琐。但是官方更推荐redigo,所以项目中我使用了redigo。

1.连接redis

package redisclient

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

var pool *redigo.Pool

func init() {
	redis_host := "127.0.0.1"
	redis_port := 6379
	pool_size := 20
	pool = redigo.NewPool(func() (redigo.Conn, error) {
		c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%d", redis_host, redis_port))
		if err != nil {
			return nil, err
		}
		return c, nil
	}, pool_size)
}

func Get() redigo.Conn {
	return pool.Get()
}

之后我们调用redisclient包中的.Get()就可以生成一个redis连接池对象来操作redis

 

2.操作redis

package main

import (
	"redisclient"
	"logger"
	"github.com/garyburd/redigo/redis"
)

func main() {
	c := redisclient.Get()
	
	//记得销毁本次链连接
	defer c.Close()

	//写入数据
	_, err := c.Do("SET", "go_key", "redigo")
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
	}

	//判断key是否存在
	is_key_exit, err := redis.Bool(c.Do("EXISTS", "go_key"))
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while existing")
	}

	//获取value并转成字符串
	account_balance, err := redis.String(c.Do("GET", "go_key"))
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while getting")
	}

	//删除key
	_, err = c.Do("DEL", "go_key")
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while deleting")
	}

	//设置key过期时间
	_, err = c.Do("SET", "mykey", "superWang", "EX", "5")
	if err != nil {
		fmt.Println("redis set failed:", err)
	}

	//创建key时设置5s过期
	_, err := c.Do("SET", "go_key:ex", "redigo", "EX", 5)
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
	}

	//对已有key设置5s过期时间
	n, err := rs.Do("EXPIRE", "go_key", 5)
	if err != nil {
		logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
	} else if n != int64(1) {
		fmt.Println("failed")
	}
}

 

希望对大家有所帮助~

 

以上是关于go redigo的简单操作的主要内容,如果未能解决你的问题,请参考以下文章

go语言使用redis(redigo)

从java到Go搭建Go的Redis客户端框架redigo

从java到Go搭建Go的Redis客户端框架redigo

从java到Go搭建Go的Redis客户端框架redigo

从java到Go搭建Go的Redis客户端框架redigo

golang 使用Martini和Redigo在Go中编写的一个小例子API