如何使用Go语言对Redis进行读写操作

环境准备

本文假设读者电脑上已经安装好了Docker和Golang,并且有自己的Go语言编辑器,例如:Goland。

使用Docker在本地启动一个Redis服务

参考如下命令
docker run -d --name my-redis -p 6379:6379 redis --requirepass 123456
注:上面命令会启动一个Redis服务,并带有访问密码,因此在操作Redis是,需要先认证。

开始编码

建立Redis连接


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

const (
	serverIp = "127.0.0.1"
	serverPort = 6379
	requirePass = "123456"
)

// 全局连接池对象
var pool *redis.Pool

func init() {
	pool = getPool()
}

func getConn() (redis.Conn, error) {
	// 创建链接
	conn, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", serverIp, serverPort))
	if err != nil {
		return nil, err
	}

	// 认证
	if _, err = conn.Do("auth", requirePass); err != nil {
		return nil, err
	}

	return conn, nil
}

func getPool() *redis.Pool {
	return &redis.Pool{
		MaxIdle: 3,
		IdleTimeout: 240,
		Dial: getConn,
		TestOnBorrow: func(c redis.Conn, t time.Time) error {
			if time.Since(t) < time.Minute {
				return nil
			}

			_, err := c.Do("PING")
			return err
		},
	}
}

代码解释:

  1. 创建全局连接池对象
    var pool *redis.Pool
  2. 封装建立Redis连接的方法
    func getConn() (redis.Conn, error)
  3. 封装获取连接池的方法
    func getPool() *redis.Pool
  4. 并在init方法中对pool进行初始化

封装Redis结构并绑定方法

推荐每个Redis命令对应一个Redis结构的方法,此示例当中封装了三个方法:
GetString()
SetString()
Exists()
分别对应了Redis原生的三个命令: get、set、exists。
代码示例如下:


import "github.com/gomodule/redigo/redis"

type Redis struct {
	conn redis.Conn
}

func NewRedis() *Redis {
	return &Redis{
		conn: pool.Get(),
	}
}

func (r *Redis) GetString(key string) (interface{}, error) {
	rsp, err := r.conn.Do("get", key)
	if err != nil {
		return nil, err
	}

	return rsp, nil
}

func (r *Redis) SetString(key, value string) (interface{}, error) {
	rsp, err := r.conn.Do("set", key, value)
	if err != nil {
		return nil, err
	}

	return rsp, nil
}

func (r *Redis) Exists(keys ...interface{}) (int64, error) {
	num, err := r.conn.Do("exists", keys...)
	if err != nil {
		return 0, err
	}

	return num.(int64), nil
}

func (r *Redis) Close() {
	_ = r.conn.Close()
}

使用封装的方法对Redis进行操作

代码示例


import (
	"fmt"
	"golang_cloud_native_0voice/internal/redigopkg"
	"os"
)

func main() {
	redisOp := redigopkg.NewRedis()

	_, err := redisOp.SetString("name", "xiaoli")
	if err != nil {
		fmt.Printf("set string error: %s\n", err.Error())
		os.Exit(-1)
	}
	fmt.Println("=> set string success!")

	num, err := redisOp.Exists("name")
	if err != nil {
		fmt.Printf("exist error: %s\n", err.Error())
		os.Exit(-1)
	}
	fmt.Printf("=> exists key num: %d\n", num)

	result, err := redisOp.GetString("name")
	if err != nil {
		fmt.Printf("get string error: %s\n", err.Error())
		os.Exit(-1)
	}
	fmt.Printf("=> the value of name: %s\n", string(result.([]byte)))

	redisOp.Close()
}

运行结果
在这里插入图片描述

总结

本文示例使用的是redigo开源库对Redis进行操作,其实使用的更多的还有一个库,那就是go-redis,此库对Redis的操作封装的更为丰富,感兴趣的读者可以自行学习。

技术参考

github.com/gomodule/redigo/redis

本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对Go云原生课程感兴趣的读者,可以点击链接,详细查看详细的服务: https://ke.qq.com/course/422970?flowToken=1043281#term_id=100504894

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值