GO学习之 数据库(Redis)
GO系列
1、GO学习之Hello World
2、GO学习之入门语法
3、GO学习之切片操作
4、GO学习之 Map 操作
5、GO学习之 结构体 操作
6、GO学习之 通道(Channel)
7、GO学习之 多线程(goroutine)
8、GO学习之 函数(Function)
9、GO学习之 接口(Interface)
10、GO学习之 网络通信(Net/Http)
11、GO学习之 微框架(Gin)
12、GO学习之 数据库(mysql)
13、GO学习之 数据库(Redis)
文章目录
- GO系列
- 前言
- 一、Redis 简介
- 二、Redis 基本操作
- 2.1 get - set 操作
- 2.2 lpush - lpop 操作
- 2.3 hset - hget 操作
- 2.4 sadd - smembers 操作
- 三、第三方库
- 四、总结
前言
按照公司目前的任务,go 学习是必经之路了,虽然行业卷,不过技多不压身,依旧努力!!!
一个项目想要提高访问速度和性能,缓存是很重要的一步,甚至可以说是必不可少,那目前最最流行的还是 Redis 缓存,那 Go 中怎么对Redis进行操作呢?有哪些第三方的函数库可以方便我们使用呢?
一、Redis 简介
尽管说起 Redis 大家都很熟悉,不过个人觉得再熟悉的东西也难免有疏忽的点。
Redis(Remote Dictionary Server)是一个开源的高性能的基于key-value内存数据存储系统,遵循 BSD 协议,通常被用作缓存、数据库和消息队列。Redis 支持多种数据结构,比如:string、list、set、zset、hash等。
Redis优点如下(不限于):
- 高性能:Redis基于内存进行数据读写,速度非常快。
- 数据结构多样性:Redis 支持多样数据结构,适用于不同的数据存储需求。
- 支持持久化:Redis可以持久化数据到磁盘,防止数据丢失,有
RDB、AOF和混合持久化方式。 - 支持分布式:Redis提供了分布式存储的支持,以集群的方式提供服务,有 主从(master - slave)、哨兵(Sentinel)、集群(Cluster)集群方式。
- 功能更加丰富:Redis提供了更加丰富的功能,比如:发布订阅、Lua脚本执行等。
Redis 缺点如下(不限于):
- 内存限制:Redis数据存储在内存中,受限于内存大小,不适用与存储大量数据。
- 数据持久化效率:数据持久化可能会影响Redis性能。
二、Redis 基本操作
首先下载 Redis 的第三方库:
针对简单的 Redis 操作,操作比较容易上手。
go get github.com/go-redis/redis
2.1 get - set 操作
package mainimport ("fmt""log""github.com/go-redis/redis"
)func main() {// 创建一个Redis客户端client := redis.NewClient(&redis.Options{Addr: "192.168.1.199:6379",Password: "",DB: 0,})// 设置一个 key - valuekey := "key-2"value := "Hello Redis"// err := client.Set(key, value, 0).Err()err := client.Set(key, value, 0).Err()if err != nil {log.Fatal(err)}fmt.Println("set key 成功!")// 获取一个keyval, gErr := client.Get(key).Result()if gErr != nil {log.Fatal(gErr)}fmt.Println("获取到:", key, val)
}
运行结果:
PS D:\workspaceGo\src\redis> go run .\getset.go
set key 成功!
获取到: key-2 Hello Redis
2.2 lpush - lpop 操作
package mainimport ("fmt""log""github.com/go-redis/redis"
)func main() {// 创建一个Redis客户端client := redis.NewClient(&redis.Options{Addr: "192.168.1.199:6379",Password: "",DB: 0,})key := "myList"value := "element-"// 向列表中添加元素for i := 0; i < 3; i++ {err := client.LPush(key, fmt.Sprint(value, i)).Err()if err != nil {log.Fatal(err)}}fmt.Println("Lpush 成功!")// 向列表中获取元素elements, lErr := client.LPop(key).Result()if lErr != nil {log.Fatal(lErr)}fmt.Printf("获取到列表 %s:%v", key, elements)
}
运行结果:
PS D:\workspaceGo\src\redis> go run .\listTest.go
Lpush 成功!
获取到列表 myList:element-2
2.3 hset - hget 操作
package mainimport ("fmt""log""github.com/go-redis/redis"
)func main() {// 创建一个Redis客户端client := redis.NewClient(&redis.Options{Addr: "192.168.1.199:6379",Password: "",DB: 0,})key := "myHash"field := "field-"// 向 hash 中设置字段和值for i := 0; i < 3; i++ {err := client.HSet(key, fmt.Sprint(field, i), i).Err()if err != nil {log.Fatal(err)}}fmt.Println("向 myHash 中添加值成功")// 从 hash 中获取字段和值value, hErr := client.HGet(key, fmt.Sprint(field, 0)).Result()if hErr != nil {log.Fatal(hErr)}fmt.Printf("hash中的第一个字段:%s 值:%v \n", "field-0", value)// 获取所有的 字段 和 值allValue, haErr := client.HGetAll(key).Result()if haErr != nil {log.Fatal(hErr)}fmt.Println("hash中的所有字段和值", allValue)
}
运行结果:
PS D:\workspaceGo\src\redis> go run .\hashTest.go
向 myHash 中添加值成功
hash中的第一个字段:field-0 值:0
hash中的所有字段和值 map[field-0:0 field-1:1 field-2:2]
2.4 sadd - smembers 操作
package mainimport ("fmt""log""github.com/go-redis/redis"
)func main() {// 创建一个Redis客户端client := redis.NewClient(&redis.Options{Addr: "192.168.1.199:6379",Password: "",DB: 0,})key := "mySet"value := "element-"// 向集合中添加元素for i := 0; i < 3; i++ {err := client.SAdd(key, fmt.Sprint(value, i)).Err()if err != nil {log.Fatal(err)}}fmt.Println("向集合 mySet 中添加元素完成!")// 从 mySet 集合中获取元素values, smErr := client.SMembers(key).Result()if smErr != nil {log.Fatal(smErr)}fmt.Println("从 mySet 集合中获取的元素:", values)
}
运行结果:
PS D:\workspaceGo\src\redis> go run .\setTest.go
向集合 mySet 中添加元素完成!
从 mySet 集合中获取的元素: [element-1 element-0 element-2]
三、第三方库
Redis 还有其他第三方库,比如:github.com/go-redis/redis/v8 和 golang.org/x/net/context 上下文配合,可以在操作 Redis 过程中进行错误信息和元信息的追踪,以便实现更复杂的业务逻辑。
go get github.com/go-redis/redis/v8
go get golang.org/x/net/context
还有其他的,比如:
github.com/gomodule/redigo:提供了更底层的接口,允许更精细地控制 Redis 操作。github.com/bsm/redislock:提供了分布式锁的实现,用于分布式系统中保证数据一致性。github.com/alicebob/miniredis:这是一个内从中模拟 Redis 服务器的库,用于单元集成测试。
四、总结
此篇仅仅用了 github.com/go-redis/redis 库对 Redis 的基本操作针对不同的数据结构进行了简单的操作,其实如若对 Redis 的命令熟悉,那用 Go 来操作 Redis 就不复杂了。
总之,Redis 是一个功能丰富、高性能的内存数据存储系统,适用于缓存、数据库和消息队列等多种应用场景。在使用 Redis 缓存时,需要考虑数据存储需求、缓存失效策略等因素,以实现更高效的数据访问和管理。
相关文章:
GO学习之 数据库(Redis)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...
谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制
JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作,例如AJAX,setTimeout等等;也有很多事件,例如用户触发的点击事件,鼠标…...
User Java bean的命名规范
Java Bean 是一种用于表示简单的、可重用的组件的规范。它是一个符合特定命名和约定的 Java 类,通常用于封装数据和提供访问方法。以下是关于 Java Bean 命名规范的一些准则: 类名: 类名应该使用驼峰命名法(Camel Case)…...
ajax和fetch的区别
ajax 和 fetch的相同点和区别是什么? 以前我们都用ajax去做请求, 但是原生的ajax不好用,我们会用$.ajax或者axios插件去请求,他们都是ajax的封装 最近出来个fetch是什么? 问到这里的时候,你就已经入坑了&am…...
java+springboot+mysql村务档案管理系统
项目介绍: 使用javaspringbootmysql开发的村务档案管理系统,系统包含超级管理员、工作人员角色,功能如下: 超级管理员:系统用户管理(工作人员管理);公开资料;会议记录&…...
windows查看/删除DNS缓存
一、查看DNS缓存 打开CMD,输入ipconfig/displaydns 二、删除DNS缓存 打开CMD,输入ipconfig/flushdns...
自动化测试之Junit
Junit引入注解参数化单参数多参数方法传参 测试用例执行顺序断言测试套件 Junit引入 Junit来编写和组织自动化测试用例,使用Selenium来实际模拟用户与Web应用程序的交互。也就是使用JUnit的测试功能来管理和运行Selenium测试。常见的做法是,使用JUnit作…...
Spring Boot 整合MyBatis-Plus
😀前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…...
CC++ 常用技巧
C 中的C C 是面向过程的是把整个大程序分为一个个的子函数;C 是面向对象的是把整个程序划分为一个个的类。C 是完全兼容C 的,C 是C 的子集,C 是C 的超集。C 又对C 做了很多补充和提升,因此使用C 会比使用纯C 更方便。混用C和C&am…...
【AndroidStudio】屏蔽小米打印
使用小米手机调试时,会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue...
Tomcat的安装与介绍
首先我们先了解一下什么是服务器?什么是服务器软件? 什么是服务器?安装了服务器软件的计算机。 什么是服务器软件? 服务器软件是一种运行在服务器操作系统上,用于接收和处理客户端请求,并提供相应服务和资…...
说点大实话丨知名技术博主 Kirito 测评云原生网关
作者:徐靖峰 关注了阿里云云原生公众号,经常能看到 MSE-Higress 相关的推文,恰逢这次阿里云产品举办了一个 MSE-Higress 云原生网关的测评活动,借此机会体验了一把云原生网关的功能。 购买流程体验 购买网关时,页面明…...
时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测
时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现SO-CNN-BiL…...
简述docker的网络模式
Docker 提供了多种网络模式,用于控制容器之间以及容器与主机之间的网络通信。以下是 Docker 的一些常见网络模式 briage模式: docker容器启动时默认就是该模式,在该模式下,docker容器会连接到一个名为docker0的虚拟以太网桥上,通…...
MySql-8.0.34 CentOS 安装命令记录
1、执行以下命令获取 glibc 版本,根据版本下载相应的MySQL安装包。 ldd --version 2、下载MySQL。 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz 3、解压 tar -xzvf mysql-8.0.34-linux-glibc2.17-x86_64.t…...
开发电子木鱼功德+1需要多少钱
冥想木鱼小程序是一种结合了冥想和科技的应用形式,为用户提供了随时随地进行冥想的便捷方式。开发一款高质量的冥想木鱼小程序需要综合考虑技术实现、冥想专业性和用户体验等多个方面。本文将详细介绍冥想木鱼小程序的开发过程,并探讨其中的专业性与思考…...
批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示
批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示 在批处理脚本中,%~是一个特殊的前缀,用于对参数和变量进行字符串处理。这个前缀后面可以跟着不同的字符,用于执行不同的操作。下面是一些常见的用法:…...
LA@向量组间的表示关系
文章目录 2个向量组间的表示关系向量组的相互表出向量组用另一个向量组表示👺线性表示的系数矩阵矩阵乘法与线性表出列向量组线性表示行向量组线性表示 向量组等价👺向量组等价的性质推论 等价矩阵与向量组等价的关系行等价矩阵的行向量组等价列等价矩阵…...
Mybatis与Spring集成
目录 一.Spring整合Mybatis 1.什么是Spring整合Mybatis 新建一个ssm 编辑 导入pom依赖 导入generatorConfig.xml 导入Spring-context.xml文件 导入Spring-mybatis.xml文件 自动生成Bookmapper.xml和Bookmapper文件 编写接口类:Bookbiz 编写接口实现类 …...
AMBA总线协议(0)——目录与传送门
一、AMBA总线协议 Arm高级微控制器总线架构(Advanced Microcontroller Bus Architecture,AMBA)是一种开放式标准片上互联规范,用于连接和管理片上系统(System on Chip,Soc)中的功能块。 AMBA是一种广泛用于…...
Kerberos身份认证原理与企业级排错实战指南
1. 这不是“另一个登录框”,而是一套精密运转的身份验证齿轮系统很多人第一次听说 Kerberos,是在公司内网登录邮箱或访问内部系统时,看到那个带小盾牌图标的弹窗——“正在使用 Kerberos 协议进行身份验证”。于是下意识觉得:“哦…...
小米MIMO最新邀请码
欢迎使用,各得10元体验金...
echarts中heatmap鼠标滚动禁用缩放,向下滚动
配置如下效果如下...
DeepSeek-R1补全能力封测倒计时(仅剩72小时开放API灰度权限):这份内部测试SOP已被3家头部科技公司紧急采购
更多请点击: https://intelliparadigm.com 第一章:DeepSeek-R1代码补全能力封测全景概览 DeepSeek-R1 是深度求索(DeepSeek)推出的高性能开源推理模型,在代码补全场景中展现出显著的上下文理解力与多语言泛化能力。本…...
MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发
1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者,我最近把目光投向了一块相当有潜力的板子:Maxim Integrated(现为ADI一部分)的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器,…...
FT231XQ USB串口桥接板设计解析与实战应用指南
1. 项目概述:从FT232R到FT231XQ的USB串口桥接板演进在嵌入式开发和硬件调试的日常工作中,一个可靠、小巧且功能清晰的USB转串口(UART)桥接板(Breakout Board, 简称BoB)几乎是工程师手边的标配工…...
打不开JupyterLab
因为安装某些依赖导致JupyterLab的依赖被动升级或降级,从而影响了JupyterLab的运行,此时可以SSH登录到实例,然后输入jupyter-lab命令进行确认,如果执行命令报错则说明是此问题,那么可以通过pip install jupyterlab再次…...
CausalVLR基准测试报告:在IU X-Ray和MIMIC-CXR数据集上的性能分析
CausalVLR基准测试报告:在IU X-Ray和MIMIC-CXR数据集上的性能分析 【免费下载链接】CausalVLR CausalVLR: A Toolbox and Benchmark for Vision-Language Causal Reasoning (多模态因果推理开源框架) 项目地址: https://gitcode.com/gh_mirrors/ca/CausalVLR …...
通过Taotoken标准OpenAI协议实现分钟级集成现有代码
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken标准OpenAI协议实现分钟级集成现有代码 1. 迁移背景与核心思路 许多开发团队在构建AI应用时,会直接使用O…...
集成Taotoken为OpenClaw工作流提供持久化模型支持
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 集成Taotoken为OpenClaw工作流提供持久化模型支持 在构建基于OpenClaw的自动化Agent工作流时,一个稳定且可灵活切换的模…...
