go redis操作

330 阅读2分钟

在本文将会讲述 go 语言操作redis。在学习过程中,首先使用github.com/go-redis/redis,但是版本的原因,导致不能成功连接redis的服务器。经过调研可使用github.com/garyburd/redigo/redis进行 redis 的操作。

使用 go-redis

package main

import (
	"fmt"
	"github.com/go-redis/redis"
)

var redisDb *redis.Client

// 根据redis配置初始化一个客户端
func initClient() (err error) {
	redisDb = redis.NewClient(&redis.Options{
		Addr:     "localhost:6379", // redis地址
		Password: "123456",         // redis密码,没有则留空
		DB:       0,                // 默认数据库,默认是0
	})
	//通过 *redis.Client.Ping() 来检查是否成功连接到了redis服务器
	_, err = redisDb.Ping().Result()
	if err != nil {
		return err
	}
	return nil
}

func main() {
	err := initClient()
	if err != nil {
		panic(err)
	}
	//第三个参数代表key的过期时间,0代表不会过期。
	err = redisDb.Set("name", "xzm", 0).Err()
	if err != nil {
		panic(err)
	}
	var val string
	//Result函数返回两个值,第一个是key的值,第二个是错误信息
	val, err = redisDb.Get("name").Result()
	//判断查询是否出错
	if err != nil {
		panic(err)
	}
	fmt.Println("name的值:", val)
}

使用 redigo

非连接池

package main

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

func main() {
	conn, err := redis.Dial("tcp", "127.0.0.1:6379", redis.DialPassword("123456"))
	if err != nil {
		panic(err)
	}
	defer conn.Close()
	//向redis写入数据
	n, err := conn.Do("Set", "name", "xzm")
	if err != nil {
		panic(err)
	}
	fmt.Println("n:", n)

	//向redis读取数据,返回的r是interface{},因此需要转换
	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		panic(err)
	}
	fmt.Println("conn succ...", r)
}

连接池

package main

import (
	"fmt"

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

var pool *redis.Pool //创建redis连接池

func init() {
	//实例化一个连接池
	pool = &redis.Pool{
		MaxIdle:     16,      //最初的连接数量
		MaxActive:   1000000, //最大连接数量,不确定可以用0(0表示自动定义)按需分配
		IdleTimeout: 300,     //连接关闭时间 300秒 (300秒不使用自动关闭)
		Dial: func() (redis.Conn, error) { //要连接的redis数据库
			return redis.Dial("tcp", "localhost:6379", redis.DialPassword("123456"))
		},
	}
}

func main() {
	c := pool.Get() //从连接池,取一个链接
	defer c.Close() //函数运行结束 ,把连接放回连接池

	_, err := c.Do("set", "name", "xzm") // 这里set/get大小写都可以的
	if err != nil {
		panic(err)
	}
	r, err := redis.String(c.Do("get", "name"))
	if err != nil {
		panic(err)
	}
	fmt.Println(r)
	pool.Close() //关闭连接池
}