Go中 Redis Client的使用

2023-11-20


在 Go 语言中使用 Redis 时,可以使用第三方库实现 Redis Client 的封装。本文介绍如何使用 Go 语言的 redisClient 去连接 Redis 服务器,并进行常见的操作。

常见操作

首先,需要安装第三方库:go-redis/redis。安装命令如下:

go get github.com/go-redis/redis

接下来,就可以在代码中引入 redis 并建立连接:

import "github.com/go-redis/redis"

func main() {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // Redis 服务器没有设置密码
        DB:       0,  // 使用默认数据库
    })

    pong, err := client.Ping().Result()
    fmt.Println(pong, err) // Output: PONG <nil>
}

在建立连接后,就可以通过调用 client 对象提供的方法执行 Redis 命令了。例如,下面是如何执行 SET 和 GET 操作:

err := client.Set("key", "value", 0).Err()
if err != nil {
    panic(err)
}

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

这个例子中,我们首先使用 Set 函数给 “key” 对应的键设置了一个值 “value”。第三个参数是过期时间(单位:秒),为 0 表示不过期。然后,我们使用 Get 函数获取了 “key” 对应的值,并将其打印出来。

除了 SET 和 GET,redisClient 还提供了一些其他常用的函数,如:

  • Del: 根据 key 删除某个键
  • Exists: 判断某个 key 是否存在
  • Expire: 设置某个 key 在一定时间内过期
  • Incr: 对某个 key 的值进行加一操作

以上这些方法应该就能满足大部分的 Redis 命令操作了。

最后,在不再需要连接 Redis 服务器的时候,要调用 Close 函数来关闭连接:

defer client.Close()

这样的话就可以在程序退出时自动关闭连接了。

List 操作

在Go语言中,可以使用多个Redis客户端库来操作Redis的List数据结构。其中比较常用的有go-redisredigo

下面是使用go-redis库进行Redis List操作的示例代码:

package main

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

func main() {
	// 创建Redis客户端
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "", // 如果有密码,则填写密码
		DB:       0,  // 使用默认的数据库
	})

	// LPUSH命令:添加元素到列表的左侧
	err := client.LPush("mylist", "apple").Err()
	if err != nil {
		fmt.Println("LPUSH error:", err)
		return
	}

	// RPUSH命令:添加元素到列表的右侧
	err = client.RPush("mylist", "banana").Err()
	if err != nil {
		fmt.Println("RPUSH error:", err)
		return
	}

	// LLEN命令:获取列表的长度
	length, err := client.LLen("mylist").Result()
	if err != nil {
		fmt.Println("LLEN error:", err)
		return
	}
	fmt.Println("Length:", length)

	// LRANGE命令:获取列表的指定范围的元素
	values, err := client.LRange("mylist", 0, -1).Result()
	if err != nil {
		fmt.Println("LRANGE error:", err)
		return
	}
	fmt.Println("Values:", values)
	
	// LIndex 获取List中指定索引位置的元素
    value, err := client.LIndex("mylist", 0).Result()
    if err == redis.Nil {
        fmt.Println("Element does not exist")
    } else if err != nil {
        fmt.Println("LINDEX error:", err)
        return
    }
    fmt.Println("Value at index 0:", value)
	// LTrim 修剪List,保留索引0到2之间的元素
    err := client.LTrim("mylist", 0, 2).Err()
    if err != nil {
        fmt.Println("LTRIM error:", err)
        return
    }
    fmt.Println("List trimmed successfully")
}

在上面的示例中,我们首先创建了一个go-redis的Redis客户端,然后使用LPUSHRPUSH命令分别将元素添加到列表的左侧和右侧。接着,我们使用LLEN命令获取列表的长度,并使用LRANGE命令获取列表的所有元素。最后,我们打印了列表的长度和元素。

希望这对你有所帮助!如果还有其他问题,请随时提问。

Pipeline 使用

在使用 go-redis 中的 Pipeline 功能时,可以将多个 Redis 命令一次性发送给 Redis 服务器执行,从而减少网络通信的开销,提高 Redis 的操作效率。

以下是 Go 中使用 go-redis 的 Pipeline 的示例代码:

package main

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

func main() {
    // 连接 Redis 服务器
    redisClient := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    // 创建 Pipeline
    pipeline := redisClient.Pipeline()

    // 向 Pipeline 中添加 Redis 命令
    pipeline.Set("foo", "bar", 0)
    pipeline.Get("foo")

    // 执行 Pipeline
    _, err := pipeline.Exec()
    if err != nil {
        panic(err)
    }
}

在这个示例中,我们首先连接到 Redis 服务器,然后创建了一个 Pipeline 对象,接着向 Pipeline 中添加了两个 Redis 命令,分别是 Set 和 Get,在最后调用了 Exec() 方法执行 Pipeline。

注意,当我们使用 Pipeline 对象时,不能像一般的 Redis 命令使用相同的 Redis Client 对象,而是需要创建一个新的 Pipeline 对象。

另外,在添加完所有的 Redis 命令之后,我们需要调用 Exec() 方法执行 Pipeline,该方法会将当前 Pipeline 中的所有 Redis 命令一次性发送给 Redis 服务器执行,同时返回执行的结果。

总而言之,使用 go-redis 中的 Pipeline 功能,可以有效地减少网络通信的开销,提高 Redis 的操作效率,适用于需要执行多个 Redis 命令的场景

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go中 Redis Client的使用 的相关文章

随机推荐

  • 硬件工程师-三极管

    目录 一 机械开关 二 三极管的种类 三 NPN型三极管 N型三极管 四 PNP型三极管 编辑 五 三极管公式 NPN型三极管 PNP型三极管 六 NPN管的继续讲解 三极管的导通电压 PNP管也是一样 三极管的三种状态 判断三极管是放大还
  • 抖音SEO矩阵系统源码开发部署(二)技术搭建+二次开发

    抖音SEO矩阵系统源码开发 是一项技术密集型工作 需要对大数据处理 人工智能等领域有深入了解 该系统开发过程中需要用到多种编程语言 如Java Python等 同时 需要使用一些框架和技术 如Hadoop Spark PyTorch等 以提
  • 文件搜索工具(Python实现)

    文章目录 文件搜索工具介绍 代码实现 实现思路 os walk函数 os path join函数 代码整体编写 打包成exe程序 效果展示 文件搜索工具介绍 文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置 比如Everything就
  • 原来实现GCP用客户端登录这么简单啊

    充满活力的一天开始了 GCP 就是谷歌的一个云服务 进入VM实例列表通过 SSH 点击 在浏览器窗口打开 进入VPS服务器 下图 切换到管理员用户 sudo i 编辑sshd config文件 vi etc ssh sshd config
  • 一个jq投票,无论成功与否3秒后自动关闭提示框

    原文地址 http blog csdn net zjb574 article details 7759447
  • 超详细的Vue-router (路由)

    由于Vue在 开发时对路由支持的不足 于是官方补充了vue router插件 vue的单页面应用是基于路由和组件的 路由用于设定访问路径 并将路径和组件映射起 来 传统的页面应用 是用一些超链接来实现页面切换和跳转的 在vue router
  • 解决vCharts不兼容Echarts5+版本问题

    背景 在实际开发项目中 发现老项目里同时用到了vCharts和Echarts 此时的Echarts是低版本 并不会出现问题 但在漏洞扫描中Echarts需升级 此时项目开始报错 v charts 不能和echarts5 版本同时存在 当时的
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 华为OD机试真题-最大平分数组【2023Q1】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • Go语言里面的各种疑难杂症

    什么是闭包 闭包有什么缺陷 func AddUpper func int int var n int 10 return func x int int n n x return n func main f AddUpper fmt Prin
  • System Poles and Zeros 系统零点和极点

    LTI系统 连续的有s传递函数 离散的有z传递函数 s jw 所以连续传递函数的零极点都对应频率值 零点的物理意义是 某个频率的输入信号 正弦信号 不会产生任何输出 被block掉了 极点的物理意义是 某个频率的输入信号会产生无穷大的输出
  • C语言void指针(void*)

    Void指针 void 是一种通用指针类型 可以用来存储任何类型的指针 但不能直接解引用 在C语言中 void指针可以用来实现对类型不确定的数据的操作 或者用作函数的参数和返回类型 以便于处理不同类型的数据 以下是一些常见的void指针的用
  • 微信小程序消息订阅推送消息后端服务(.net core)

    废话不多说直接上代码 分为三部分 第一获取微信模板信息需要token 第二步发送微信模板信息 注意 该方法不需要进行任何修改 参数 access token 是第一步获取到的token 参数 body 是json字符串格式提示信息内容 第三
  • Cannot read property bindings of null 解决方法

    安装 babel preset env yarn add babel preset env 或 npm install babel preset env webpack config js presets env 替换成 presets b
  • rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

    文章目录 一 RabbitMQ安装 1 1 二进制安装 1 2 rabbitmqctl工具 1 3 docker安装 二 rabbitmq基础命令 2 1 多租户与权限类 2 1 1 创建虚拟主机 2 1 2 查看虚拟主机信息 2 1 3
  • 泛微最新漏洞汇总

    泛微OA e cology前台接口SQL注入漏洞 POST mobile browser WorkflowCenterTreeData jsp node wftype 1 scope 2333 HTTP 1 1 Host Content T
  • 个人技术总结——uview-plus下的Http请求基本使用及相关使用

    这个作业属于哪个课程 软件工程 23年春季学期 这个作业要求在哪里 软件工程实践总结 个人技术总结 这个作业的目标 个人技术总结 其他参考文献 构建之法 CSDN社区 uni app官方文档 uview plus官方文档 目录 一 写在前面
  • vue发展历史简介

    基本介绍 Vue 是一套用于构建用户界面的 渐进式框架 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 最初它不过是个人项目 时至今日 已成为全世界三大前端框架之一 github 上拥有 17 8万 Star 领先于 Reac
  • mapState的使用(常用)

    mapState作用 可以辅助获取到多个state的值 怎么使用 1 在 vue组件中引入 在js块中引入 import mapState from vuex 2 在 vue组件中computed下定义一个对象 computed mapSt
  • Go中 Redis Client的使用

    文章目录 常见操作 List 操作 Pipeline 使用 在 Go 语言中使用 Redis 时 可以使用第三方库实现 Redis Client 的封装 本文介绍如何使用 Go 语言的 redisClient 去连接 Redis 服务器 并