Go 使用Redis安装、实例和基本操作

Go使用Redis:详解go-redis/v9库

在这里插入图片描述

引言

Redis作为一个高性能的键值对数据库,广泛应用于缓存、消息队列、实时数据分析等场景。在Go语言中,go-redis/v9库提供了丰富的接口和高效的数据交互能力,使得在Go项目中集成Redis变得简单而高效。本文将从库的安装、客户端实例创建、哨兵部署、常用方法、高级特性等方面详细介绍如何在Go中使用go-redis/v9库。
在这里插入图片描述

安装go-redis/v9库

首先,确保你的Go环境已经安装并配置好。然后,使用go get命令安装go-redis/v9库:

go get github.com/redis/go-redis/v9

创建Redis客户端实例

在Go中使用go-redis/v9库之前,你需要创建一个Redis客户端实例。这通常涉及到设置Redis服务器的地址、密码、数据库等参数。以下是一个创建Redis客户端实例的示例:

package mainimport ("context""fmt""github.com/redis/go-redis/v9"
)func main() {rdb := redis.NewClient(&redis.Options{Addr:     "localhost:6379", // Redis服务器地址Password: "",              // Redis密码(如果需要的话)DB:       0,               // 使用的数据库})// 检查连接是否成功pong, err := rdb.Ping(context.Background()).Result()if err != nil {panic(err)}fmt.Println("Ping:", pong)
}

哨兵部署

Redis哨兵(Sentinel)用于实现Redis的高可用性。在go-redis/v9中,你可以使用NewFailoverClient函数来创建一个连接到哨兵管理的Redis服务器的客户端。

rdb := redis.NewFailoverClient(&redis.FailoverOptions{MasterName:    "mymaster",SentinelAddrs: []string{"192.168.55.219:26379", "192.168.55.227:26379", "192.168.55.230:26379"},Password:      "redis@123.com",DB:            2,
})// 之后的操作与上述示例类似

常用方法

go-redis/v9库提供了丰富的Redis操作方法,包括基本的SetGetHSetHGet等,以及更高级的发布/订阅、事务、管道等。

基本操作

// 设置键值对
err := rdb.Set("mykey", "world", 0).Err()
if err != nil {panic(err)
}// 获取键值对
val, err := rdb.Get("mykey").Result()
if err != nil {panic(err)
}
fmt.Println("mykey:", val)

在这里插入图片描述

发布/订阅

// 订阅
pubsub := rdb.Subscribe("mychannel")
defer pubsub.Close()
ch := pubsub.Channel()// 发布
rdb.Publish("mychannel", "hello").Result()// 接收消息
msg, err := <-ch
if err != nil {panic(err)
}
fmt.Println("Received:", msg.Payload)

事务

err := rdb.Watch(func(tx *redis.Tx) error {_, err := tx.Pipelined(func(pipe redis.Pipeliner) error {pipe.Set("key1", "value1", 0)pipe.Set("key2", "value2", 0)return nil})if err != nil {return err}// 可以在这里继续执行其他操作,如获取刚刚设置的键return nil
}, "key1", "key2")
if err != nil {panic(err)
}

高级特性

管道(Pipeline)

管道是Redis的一个强大特性,它允许客户端一次性发送多个命令,并在之后一次性接收所有命令的响应,从而显著减少网络往返次数,提高性能。在go-redis/v9中,管道的使用非常直观。你可以通过Pipeline()方法创建一个管道实例,然后向其中添加多个命令,最后通过Exec(ctx)方法执行这些命令并获取结果。

pipe := rdb.Pipeline()incr := pipe.Incr(context.Background(), "counter")
set := pipe.Set(context.Background(), "mykey", "myvalue", 0)
_, err := pipe.Exec(context.Background())
if err != nil {panic(err)
}counterVal, err := incr.Result()
if err != nil {panic(err)
}
fmt.Println("Counter:", counterVal)// 注意:set命令的结果如果需要,也可以类似地通过set.Result()获取

Lua 脚本

Redis支持使用Lua脚本执行复杂的操作,这些操作在Redis服务器上原子地执行,避免了网络往返和竞争条件。go-redis/v9提供了EvalEvalSha方法来执行Lua脚本。

script := `
local key = KEYS[1]
local counter = tonumber(redis.call('get', key) or "0")
redis.call('set', key, counter + 1)
return counter + 1
`result, err := rdb.Eval(context.Background(), script, []string{"counter"}, 0).Result()
if err != nil {panic(err)
}fmt.Println("Counter after increment:", result)

新人避坑

  1. 上下文(Context):在go-redis/v9中,大多数方法都接受一个context.Context参数。确保在请求可能超时或需要取消时,使用带有适当超时的上下文。

  2. 错误处理go-redis/v9中的大多数方法都返回一个error值。始终检查这个值以确保操作成功。

  3. 并发:Redis客户端实例是线程安全的,可以在多个goroutine中共享。但是,对于复杂的操作(如事务和管道),请确保在单个goroutine中执行,以避免竞态条件。

  4. 连接池go-redis/v9默认使用连接池来管理Redis连接。了解连接池的配置选项(如最大空闲连接数、最大活动连接数等)可以帮助你优化性能。

总结

go-redis/v9库为Go语言提供了强大而灵活的Redis客户端实现。通过本文,你学习了如何安装库、创建客户端实例、使用哨兵部署、执行常用Redis操作以及利用高级特性(如管道和Lua脚本)。同时,你也了解了作为新人在使用go-redis/v9时需要注意的一些关键点。希望这些信息能帮助你在Go项目中高效地集成和使用Redis。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/407852.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口限流经典算法

文章目录 限流基于计数器的限流基于滑动窗口的限流桶漏斗算法令牌桶算法 限流 为了保证系统的安全性和稳定性&#xff0c;防止恶意流量和突发大量流量短时间内大量请求接口&#xff0c;造成服务器崩溃&#xff0c;接口的限流是有必要的。 以下是四种经典的限流算法。 基于计数…

Python测试框架Pytest的使用

pytest基础功能 pytset功能及使用示例1.assert断言2.参数化3.运行参数4.生成测试报告5.获取帮助6.控制用例的执行7.多进程运行用例8.通过标记表达式执行用例9.重新运行失败的用例10.setup和teardown函数 pytset功能及使用示例 1.assert断言 借助python的运算符号和关键字实现不…

UE5打包iOS运行查看Crash日志

1、查看Crash 1、通过xCode打开设备 2、选择APP打开最近的日志 3、选择崩溃时间点对应的日志 4、选择对应的工程打开 5、就能看到对应的Crash日志 2、为了防止Crash写代码需要注意 1、UObject在RemoveFromRoot之前先判断是否Root if (SelectedImage && Selecte…

Frog4Shell — FritzFrog 僵尸网络将一日攻击纳入其武器库

FritzFrog 的背景 Akamai 通过我们的全球传感器网络持续监控威胁,包括我们之前发现的威胁。其中包括FritzFrog 僵尸网络(最初于 2020 年发现),这是一个基于 Golang 的复杂点对点僵尸网络,经过编译可同时支持基于 AMD 和 ARM 的机器。该恶意软件得到积极维护,多年来通过增…

百日筑基第六十天-学习一下Tomcat

百日筑基第六十天-学习一下Tomcat 一、Tomcat 顶层架构 Tomcat 中最顶层的容器是 Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个 Server可以包含至少一个 Service&#xff0c;用于具体提供服务。Service 主要包含两个部分&#xff1a;Conn…

AI周报(8.18-8.24)

AI应用-XGO-Rider: 全球首款轮腿式桌面 AI 机器人 中国的 Luwu 智能打造的XGO-Rider 是全球首款轮腿式桌面 AI 机器人。这个小巧紧凑的机器人将轮式机器人的灵活性与腿式机器人的障碍处理能力相结合&#xff0c;可以全方位移动&#xff0c;轻松适应各种地形。 XGO-Rider 主要设…

服务商模式实现JSAPI小程序微信支付(javaphp)

官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter2_1.shtml 使用wechatpay-php实现JSAPI支付&#xff08;服务商和普通商户&#xff09;文章浏览阅读1.3k次&#xff0c;点赞3次&#xff0c;收藏7次。之前我使用的sdk是“wechatpay-guzzle-middle…

python实用教程(二):安装配置Pycharm及使用(Win10)

上一篇&#xff1a;python实用教程&#xff08;一&#xff09;&#xff1a;安装配置anaconda&#xff08;Win10&#xff09;-CSDN博客 1、简介及下载 PyCharm是一款功能强大的 Python 编辑器&#xff0c;具有跨平台性。是Jetbrains家族中的一个明星产品。 下载地址&#xff…

redis实战——go-redis的使用与redis基础数据类型的使用场景(二)

一.go-redis操作hash 常用命令&#xff1a; redisClient.HSet("map", "name", "jack") // 批量设置 redisClient.HMSet("map", map[string]interface{}{"a": "b", "c": "d", "e"…

计算机毕业设计选题推荐-游戏比赛网上售票系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

棚子影院CMS程序PHP源码

01, 棚子影视是我现在最常用的一个看视频的网站&#xff0c;支持观看电影、国漫&#xff01;动漫&#xff0c;电视剧、综艺、记录片、香港剧等等。同时棚子影视支持手机&#xff0c;PC端在线观看&#xff0c;不用下载任何播放器&#xff0c;直接电脑或者手机打开网址就可以在线…

vue3 RouterLink路由跳转后RouterView组件未加载,页面未显示,且控制台无任何报错

在使用 vue3 开发项目过程中&#xff0c;组件之间使用 router-link 跳转&#xff0c;但是当我开发的组件跳转到其他组件时&#xff0c;其他组件的页面未加载&#xff0c;再跳转回自己的组件时&#xff0c;自己的组件也加载不出来了&#xff0c;浏览器刷新后页面可以加载出来。但…

结合 curl 与住宅代理实现高效数据抓取

引言 什么是 curl&#xff1f;有哪些功能&#xff1f; 基本 curl 命令有哪些&#xff1f; 为什么要使用 curl 处理 HTTP 请求&#xff1f; 如何使用 curl 和住宅代理进行网络抓取&#xff1f; 总结 引言 在当今数据驱动的商业环境中&#xff0c;数据的获取和分析能力是企…

Redis | 非关系型数据库Redis的初步认识

本节内容相对理论&#xff0c;着重看基础通用命令这一节 Redis 非关 kv型{字典} 概念应用ubuntu安装配置 windows添加密码 可能问题【ubuntu】远程连接 基础通用命令 ⭐ 概念 特点&#xff1a; 1、开源的&#xff0c;使用C编写&#xff0c;基于内存且支持持久化 2、没有表 支持…

Linux服务器不能使用su切换到其他用户

1. 现象 使用非root用户登录系统后&#xff0c;想使用su - 切换到root时&#xff0c;输入正确的密码后出现&#xff1a; 一开始以为自己密码记错了&#xff0c;或者是系统被入侵后篡改了root用户密码&#xff0c;服务器上的数据非常重要。后面不通过SSH连接&#xff0c;直接去…

图文详解ThreadLocal:原理、结构与内存泄漏解析

目录 一.什么是ThreadLocal 二.ThreadLocal的内部结构 三.ThreadLocal带来的内存泄露问题 ▐ key强引用 ▐ key弱引用 总结 一.什么是ThreadLocal 在Java中&#xff0c;ThreadLocal 类提供了一种方式&#xff0c;使得每个线程可以独立地持有自己的变量副本&#xff0c;而…

AI副业:别只顾刷黑神话悟空!AI做神话账号,商单月入过万(附教程)

前言 国产3A大作《黑神话&#xff1a;悟空》一经发布&#xff0c;瞬间登顶steam榜首&#xff0c;打破单机游戏在线记录&#xff0c;全球几十万国外玩家听着中文配音&#xff0c;看着翻译过来的英文字幕&#xff0c;玩的不亦乐乎&#xff01; 甚至国外论坛上兴起了一股西游风&a…

[已解决]mac远程连接windows桌面:parallels client连接遇到的问题

[已解决]mac远程连接windows桌面&#xff1a;parallels client连接遇到的问题 问题一&#xff1a;网络不通问题二&#xff1a;远程windows防火墙导致无法连接问题三&#xff1a;远程桌面服务未启动问题四&#xff1a;家庭版&#xff08;非专业版&#xff09;windows导致的无法使…

快排补充(挖坑法,lomuto前后指针,非递归法)

挖坑法 挖坑法动态示意图 挖坑法方法分析 创建左右指针。⾸先从右向左找出⽐基准⼩的数据&#xff0c;找到后⽴即放⼊左边坑中&#xff0c;当前位置变为新 的"坑"&#xff0c;然后从左向右找出⽐基准⼤的数据&#xff0c;找到后⽴即放⼊右边坑中&#xff0c;当前位置…

P2P 文件共享:现代网络中的高效文件传输

在互联网的世界中&#xff0c;不同应用程序的数据传输方法各异。P2P文件共享&#xff08;Peer-to-Peer File Sharing&#xff09; 作为一种高效的文件传输方式&#xff0c;使得用户可以在没有中央服务器的情况下直接进行文件交换。本文将详细介绍P2P文件共享的基本原理、优势及…