Golang使用Redis示例

文章展示了如何使用Go语言的两个不同库,gomodule/redigo/redis和go-redis/redis/v8,来连接和操作Redis数据库。主要操作包括建立连接、设置键值对以及获取存储的数据。
摘要由CSDN通过智能技术生成

github.com/gomodule/redigo/redis

package main

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

// Background返回一个非空的Context。 它永远不会被取消,没有值,也没有期限。
// 它通常在main函数,初始化和测试时使用,并用作传入请求的顶级上下文。
func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("Connect to redis error", err)
		return
	}
	defer c.Close()
	_, err = c.Do("SET", "mykey", "Test001")
	if err != nil {
		fmt.Println("redis set failed:", err)
	}

	username, err := redis.String(c.Do("GET", "mykey"))
	if err != nil {
		fmt.Println("redis get failed:", err)
	} else {
		fmt.Printf("Get mykey: %v \n", username)
	}
}
	// Output: Get mykey: Test001


github.com/go-redis/redis/v8

package main

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

func main() {
	ctx := context.Background()

	rdb := redis.NewClient(&redis.Options{
		Addr: "127.0.0.1:6379",
		//Password: "", // no password set
		//DB:       0,  // use default DB
	})

	err := rdb.Set(ctx, "aa", "value", 0).Err()
	if err != nil {
		panic(err)
	}

	val, err := rdb.Get(ctx, "aa").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("aa", val)

	val2, err := rdb.Get(ctx, "key2").Result()
	if err == redis.Nil {
		fmt.Println("key2 does not exist")
	} else if err != nil {
		panic(err)
	} else {
		fmt.Println("key2", val2)
	}
	// Output: aa value
	// key2 does not exist
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Golang使用 Redis 集群,可以使用官方提供的 Redis 客户端库 Redigo。Redigo 提供了连接池、管道、事务等功能,非常适合高并发场景下的 Redis 操作。 以下是一个使用 Redigo 连接 Redis 集群的示例: ```go package main import ( "fmt" "time" "github.com/gomodule/redigo/redis" ) func main() { cluster := &redis.Cluster{ MaxRedirects: 8, StartupNodes: []string{ "redis://node1:6379", "redis://node2:6379", "redis://node3:6379", }, DialTimeout: 10 * time.Second, ReadTimeout: 100 * time.Millisecond, WriteTimeout: 100 * time.Millisecond, } conn, err := cluster.Get() if err != nil { panic(err) } defer conn.Close() _, err = conn.Do("SET", "key", "value") if err != nil { panic(err) } value, err := redis.String(conn.Do("GET", "key")) if err != nil { panic(err) } fmt.Println(value) } ``` 在以上示例中,我们使用了 `redis.Cluster` 结构体来连接 Redis 集群,`MaxRedirects` 指定了最大重定向次数,`StartupNodes` 指定了集群中的节点地址,`DialTimeout`、`ReadTimeout`、`WriteTimeout` 分别指定了建立连接、读取数据、写入数据的超时时间。 使用 `cluster.Get()` 方法可以获取一个连接,使用完后需要调用 `conn.Close()` 方法释放连接。在获取到连接后,我们可以使用 `conn.Do()` 方法来执行 Redis 命令,也可以使用 `redis.String()`、`redis.Int()` 等方法来获取命令执行结果。 需要注意的是,在 Redis 集群中使用 `SET`、`GET` 等单个键操作命令时,Redigo 会自动进行分片操作,将请求发送到正确的节点。但是在使用一些不支持分片的命令时,需要手动指定节点。例如使用 `MGET` 命令时,需要使用 `redis.MultiConn.Do()` 方法并手动指定节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值