Redis使用| 青训营笔记

39 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

Redis 是一个快速、高效的内存数据存储系统,可以为应用程序提供快速的数据访问和缓存支持.

Go 语言编写 Web API 时,与 Redis 深度使用是提高应用程序性能和响应速度的有效方法。你可以使用 Redis 作为数据存储和缓存,并使用 go-redis 库提供的功能和 API 来与 Redis 进行交互。此外,Redis 还提供了发布和订阅功能和事务支持,可以用于实现实时通信和保证数据的一致性和完整性。

本文使用go-redis

安装 Redis 客户端

连接redis

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

func main() {
    // 连接 Redis
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
        Password: "",
        DB: 0,
    })

    // 关闭 Redis 连接
    defer rdb.Close()
}

使用 Redis 进行数据存储和读取(SET、GET、DEL)

// 设置键值对
err := rdb.Set(ctx, "key", "value", 0).Err()
if err != nil {
    panic(err)
}

// 获取键的值
val, err := rdb.Get(ctx, "key").Result()
if err != nil {
    panic(err)
}
fmt.Println("key", val)

// 删除键
err = rdb.Del(ctx, "key").Err()
if err != nil {
    panic(err)
}

redis作为缓存使用

// 从 Redis 中获取值
val, err := rdb.Get(ctx, "key").Result()
if err == redis.Nil {
    // 如果 key 不存在,从数据库中读取数据
    val = db.GetData(key)
    // 将数据保存到 Redis 中,以便下次读取时使用
    rdb.Set(ctx, key, val, time.Duration(10)*time.Minute)
} else if err != nil {
    // 出现错误
    panic(err)
}

Redis 发布和订阅 (PubSub方法)

// 订阅一个频道
pubsub := rdb.Subscribe
// 订阅一个频道
pubsub := rdb.Subscribe(ctx, "channel")

// 从频道接收消息
msg, err := pubsub.ReceiveMessage(ctx)
if err != nil {
    panic(err)
}
fmt.Println(msg.Channel, msg.Payload)

// 发布消息到频道
err = rdb.Publish(ctx, "channel", "hello").Err()
if err != nil {
    panic(err)
}

Redis 事务(Redis 进行数据存储和缓存时,为了保证数据的一致性和完整性,需要使用事务来确保多个操作的原子性。使用 go-redis 库的 Pipelined 方法来执行 Redis 事务。)

// 开始事务
pipe := rdb.TxPipeline()

// 执行多个操作
pipe.Set(ctx, "key1", "value1", 0)
pipe.Set(ctx, "key2", "value2", 0)

// 提交事务
_, err := pipe.Exec(ctx)
if err != nil {
    panic(err)
}