当前位置: 首页 > news >正文

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优点如下(不限于):

  1. 高性能:Redis基于内存进行数据读写,速度非常快。
  2. 数据结构多样性:Redis 支持多样数据结构,适用于不同的数据存储需求。
  3. 支持持久化:Redis可以持久化数据到磁盘,防止数据丢失,有 RDBAOF混合持久化方式。
  4. 支持分布式:Redis提供了分布式存储的支持,以集群的方式提供服务,有 主从(master - slave)、哨兵(Sentinel)、集群(Cluster)集群方式。
  5. 功能更加丰富:Redis提供了更加丰富的功能,比如:发布订阅、Lua脚本执行等。

Redis 缺点如下(不限于):

  1. 内存限制:Redis数据存储在内存中,受限于内存大小,不适用与存储大量数据。
  2. 数据持久化效率:数据持久化可能会影响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/v8golang.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中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…...

User Java bean的命名规范

Java Bean 是一种用于表示简单的、可重用的组件的规范。它是一个符合特定命名和约定的 Java 类&#xff0c;通常用于封装数据和提供访问方法。以下是关于 Java Bean 命名规范的一些准则&#xff1a; 类名&#xff1a; 类名应该使用驼峰命名法&#xff08;Camel Case&#xff09…...

ajax和fetch的区别

ajax 和 fetch的相同点和区别是什么&#xff1f; 以前我们都用ajax去做请求&#xff0c; 但是原生的ajax不好用&#xff0c;我们会用$.ajax或者axios插件去请求&#xff0c;他们都是ajax的封装 最近出来个fetch是什么&#xff1f; 问到这里的时候&#xff0c;你就已经入坑了&am…...

java+springboot+mysql村务档案管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的村务档案管理系统&#xff0c;系统包含超级管理员、工作人员角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;系统用户管理&#xff08;工作人员管理&#xff09;&#xff1b;公开资料&#xff1b;会议记录&…...

windows查看/删除DNS缓存

一、查看DNS缓存 打开CMD&#xff0c;输入ipconfig/displaydns 二、删除DNS缓存 打开CMD,输入ipconfig/flushdns...

自动化测试之Junit

Junit引入注解参数化单参数多参数方法传参 测试用例执行顺序断言测试套件 Junit引入 Junit来编写和组织自动化测试用例&#xff0c;使用Selenium来实际模拟用户与Web应用程序的交互。也就是使用JUnit的测试功能来管理和运行Selenium测试。常见的做法是&#xff0c;使用JUnit作…...

Spring Boot 整合MyBatis-Plus

&#x1f600;前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…...

CC++ 常用技巧

C 中的C C 是面向过程的是把整个大程序分为一个个的子函数&#xff1b;C 是面向对象的是把整个程序划分为一个个的类。C 是完全兼容C 的&#xff0c;C 是C 的子集&#xff0c;C 是C 的超集。C 又对C 做了很多补充和提升&#xff0c;因此使用C 会比使用纯C 更方便。混用C和C&am…...

【AndroidStudio】屏蔽小米打印

使用小米手机调试时&#xff0c;会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue...

Tomcat的安装与介绍

首先我们先了解一下什么是服务器&#xff1f;什么是服务器软件&#xff1f; 什么是服务器&#xff1f;安装了服务器软件的计算机。 什么是服务器软件&#xff1f; 服务器软件是一种运行在服务器操作系统上&#xff0c;用于接收和处理客户端请求&#xff0c;并提供相应服务和资…...

说点大实话丨知名技术博主 Kirito 测评云原生网关

作者&#xff1a;徐靖峰 关注了阿里云云原生公众号&#xff0c;经常能看到 MSE-Higress 相关的推文&#xff0c;恰逢这次阿里云产品举办了一个 MSE-Higress 云原生网关的测评活动&#xff0c;借此机会体验了一把云原生网关的功能。 购买流程体验 购买网关时&#xff0c;页面明…...

时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现SO-CNN-BiL…...

简述docker的网络模式

Docker 提供了多种网络模式&#xff0c;用于控制容器之间以及容器与主机之间的网络通信。以下是 Docker 的一些常见网络模式 briage模式&#xff1a; docker容器启动时默认就是该模式,在该模式下&#xff0c;docker容器会连接到一个名为docker0的虚拟以太网桥上&#xff0c;通…...

MySql-8.0.34 CentOS 安装命令记录

1、执行以下命令获取 glibc 版本&#xff0c;根据版本下载相应的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需要多少钱

冥想木鱼小程序是一种结合了冥想和科技的应用形式&#xff0c;为用户提供了随时随地进行冥想的便捷方式。开发一款高质量的冥想木鱼小程序需要综合考虑技术实现、冥想专业性和用户体验等多个方面。本文将详细介绍冥想木鱼小程序的开发过程&#xff0c;并探讨其中的专业性与思考…...

批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示

批处理中扩展解释%~的相关知识和用法&#xff0c;并给出示例和实际运行结果展示 在批处理脚本中&#xff0c;%~是一个特殊的前缀&#xff0c;用于对参数和变量进行字符串处理。这个前缀后面可以跟着不同的字符&#xff0c;用于执行不同的操作。下面是一些常见的用法&#xff1a…...

LA@向量组间的表示关系

文章目录 2个向量组间的表示关系向量组的相互表出向量组用另一个向量组表示&#x1f47a;线性表示的系数矩阵矩阵乘法与线性表出列向量组线性表示行向量组线性表示 向量组等价&#x1f47a;向量组等价的性质推论 等价矩阵与向量组等价的关系行等价矩阵的行向量组等价列等价矩阵…...

Mybatis与Spring集成

目录 一.Spring整合Mybatis 1.什么是Spring整合Mybatis 新建一个ssm ​编辑 导入pom依赖 导入generatorConfig.xml 导入Spring-context.xml文件 导入Spring-mybatis.xml文件 自动生成Bookmapper.xml和Bookmapper文件 编写接口类&#xff1a;Bookbiz 编写接口实现类 …...

AMBA总线协议(0)——目录与传送门

一、AMBA总线协议 Arm高级微控制器总线架构&#xff08;Advanced Microcontroller Bus Architecture&#xff0c;AMBA&#xff09;是一种开放式标准片上互联规范&#xff0c;用于连接和管理片上系统&#xff08;System on Chip,Soc&#xff09;中的功能块。 AMBA是一种广泛用于…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...