跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

大家好,在本教程中,我们将研究如何有效地使用 Redis 作为 Go 应用程序的后端解决方案。

先决条件


如果你想在本地机器上学习本教程,你需要在你的机器上安装以下内容:

  • Docker - 这将需要运行 redis 的本地实例,如果您已经有 redis 服务,则不需要 Docker。
  • Go 版本 1.12+ - 我们将使用 Go 模块来管理我们项目的依赖项
  • 文本编辑器,例如 Visual Studio Code

为什么选择 Redis?


Redis 是一个出色的开源内存数据结构存储,可用于各种用途,例如应用程序的数据库、缓存服务甚至消息代理。

它支持各种不同的数据结构,并且非常灵活和快速。如果您关心弹性等问题,那么您会很高兴听到它具有内置复制功能,并且可以在集群设置中运行,以确保您的应用程序不依赖于单个实例。

然而,出于本教程的目的,我们将使用一个本地运行的 redis 实例来保持它的美观和简单,我们将使用 Docker 运行该实例。

在本地使用 Docker 运行 Redis


让我们开始学习本教程并下载 redis docker 映像并使用以下 2 个 docker 命令运行它:

$ docker pull redis
$ docker run --name redis-test-instance -p 6379:6379 -d redis


第一个 pull 命令执行从 DockerHub 检索 redis 映像的工作,以便我们可以使用第二个命令将其作为容器运行。在第二个命令中,我们指定了我们的 redis 容器的名称,我们还使用 -p 标志将我们的本地端口 6379 映射到容器内运行 redis 的端口。

连接到我们的 Redis 实例


好的,现在我们已经成功启动了我们的 redis 实例,我们可以开始编写一个非常简单的 Go 应用程序来连接这个实例。

首先创建一个我们的项目所在的新目录。在这个新目录中,创建一个名为 main.go 的新文件。

创建好之后,让我们在我们选择的文本编辑器中打开这个文件并开始编码!

我们将从创建一个非常简单的 Go 应用程序开始,它只会打印出 Go Redis 教程。

package main

import "fmt"

func main() {
	fmt.Println("Go Redis Tutorial")
}

让我们验证我们的设置是否有效,并且我们能够通过调用 go run main.go 在本地运行它

$ go run main.go

Go Redis Tutorial


太棒了,有了这些,让我们开始连接到我们的单个 Redis 实例。

我们将从导入广泛使用的 github.com/go-redis/redis 包开始,在撰写本文时,它是用于与 Redis 交互的最流行的 Go 包。

现在我们已经导入了必要的包,我们可以从定义一个客户端开始,它接受各种选项,例如我们要连接的 redis 实例的地址、密码和我们希望在该实例中使用的数据库。

在这种情况下,我们没有为特定的本地运行实例设置任何密码,因此我们可以将其留空,我们现在将使用默认数据库,该数据库由值 0 表示。

在我们定义了这个新的 redis 客户端之后,我们想尝试 Ping 我们的实例以确保一切都已正确设置并打印出结果:

main.go

package main

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

func main() {
	fmt.Println("Go Redis Tutorial")

	client := redis.NewClient(&redis.Options{
		Addr: "localhost:6379",
		Password: "",
		DB: 0,
	})

	pong, err := client.Ping().Result()
	fmt.Println(pong, err)

}

当我们现在运行它时,我们将看到我们非常简单的 Go 应用程序已经能够成功地 ping 我们启动的 redis 实例并返回成功的 PONG 响应:

$ go run main.go

Go Redis Tutorial
PONG <nil>

为 Redis 添加值


完美,我们已经能够在本教程的前面部分成功连接到我们的 Redis 实例。我们现在需要看看如何从这个 redis 实例中设置和获取值。

设定值


我们将从使用 client.Set 方法查看设置值开始。这个方法接受一个键和一个值以及一个过期时间。将过期时间设置为 0 有效地将密钥设置为没有过期时间。

// we can call set with a `Key` and a `Value`. 
err = client.Set("name", "Elliot", 0).Err()
// if there has been an error setting the value
// handle the error
if err != nil {
    fmt.Println(err)
}


获取值


现在我们已经了解了使用 Set 方法设置值,让我们看看如何使用恰当命名的 Get 方法检索这些值。

Get 方法只接受您希望从 redis 实例中检索的键,我们可以使用最后链接的 Result() 方法将响应转换为值,以及潜在的错误:

val, err := client.Get("name").Result()
if err != nil {
    fmt.Println(err)
}

fmt.Println(val)

如果我们将上面的代码添加到我们设置值的下面的主函数中,我们可以尝试运行它:

$ go run main.go

Go Redis Tutorial
PONG <nil>
Elliot


太棒了,我们现在已经能够在 Go 应用程序中成功地从 Redis 实例中设置和获取值!

存储复合值


虽然在 Redis 中存储基本的键/值对当然可以取得很多成就,但有时您需要更进一步,在数据库中存储更复杂的复合数据结构。

在这种情况下,我们倾向于将复合数据结构编组为 JSON,然后使用我们之前使用的相同 Set 方法将这些 JSON 字符串存储在数据库中。

让我们定义一个 Author 结构,它包含一个 Name 字段和一个 Age 字段以及这些字段上的必要标签,这些标签将允许我们将它们编组为 JSON。

然后我们可以更新我们的代码,首先编组一个新的 Author 结构,然后在我们的 redis 实例中针对键 id1234 设置它,并像这样传入我们新编组的 JSON:

main.go

package main

import (
	"fmt"

	"encoding/json"
	"github.com/go-redis/redis"
)

type Author struct {
	Name string `json:"name"`
	Age int `json:"age"`
}

func main() {
    client := redis.NewClient(&redis.Options{
		Addr: "localhost:6379",
		Password: "",
		DB: 0,
    })
    
    json, err := json.Marshal(Author{Name: "Elliot", Age: 25})
    if err != nil {
        fmt.Println(err)
    }

    err = client.Set("id1234", json, 0).Err()
    if err != nil {
        fmt.Println(err)
    }
    val, err := client.Get("id1234").Result()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(val)
}

当我们运行它时,我们应该看到我们已经成功地将我们的 Author 结构存储在我们的 redis 数据库中,以 id1234 为密钥。然后,我们就能够使用我们之前介绍的相同键和相同的 Get 方法成功地检索到所述作者。

$ go run main.go

Go Redis Tutorial
PONG <nil>
{"name": "Elliot", "age": 25}


结论


因此,在本教程中,我们了解了在 Go 中使用 Redis 的基础知识。我们研究了如何使用 github.com/go-redis/redis 包连接到 Redis 数据库,并研究了如何使用该包为我们提供的一些方法与该数据库进行交互。

文章链接