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

Redis数据库与GO完结篇:redis操作总结与GO使用redis

一、redis操作总结

由于写redis命令的时候有提示符,所以下表只给出命令名称

数据类型操作简介
字符串GET, SET, MGET, MSET, SETEX,DEL最基本的数据类型,存储任意二进制数据,支持简单操作和原子计数。适合存储重复数据。
哈希HSET, HGET, HDEL, HMSET, HMGET, HEXISTS,HGETALL,HLEN键值对集合,适合存储对象,支持字段操作。可存储重复字段。
列表LPUSH, RPUSH, LPOP, RPOP, LRANGE, LSET, LREM有序字符串集合,支持双向操作,适合实现消息队列,允许重复元素。
集合SADD, SREM, SMEMBERS, SISMEMBER无序唯一元素集合,不允许重复,支持集合运算,适合实现标签和用户兴趣。
有序集合ZADD, ZREM, ZRANGE带分数的有序集合,不允许重复,支持范围查询和排序,适合实现排行榜等。

二、GO连接redis

go-redis 支持 2 个最新的 go 版本且依赖Go modules,如果你还没有 go mod,你需要首先初始化:

go mod init github.com/my/repo

安装 go-redis/v9 (支持所有的 redis 版本):

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

参考链接:GO REDIS快速入门
然后导包即可使用redis:import "github.com/redis/go-redis/v9"
GO链接redis分为以下几步:
1.配置链接信息

opts := redis.Options{Addr:     "localhost:6379", // Redis 服务器地址和端口Password: "",               // Redis 密码,默认为空DB:       0,                // Redis 数据库编号,默认为 0
}

2.创建客户端

rdb := redis.NewClient(&opts)

3.创建上下文

ctx := context.Background()

4.测试连接

_, err := rdb.Ping(ctx).Result()
if err != nil {fmt.Println("连接 Redis 失败!")return
}
fmt.Println("连接 Redis 成功!")

操作2-4都已被本人封装在一个函数中:

// 创建 Redis 客户端并返回客户端和上下文
func ConnectRedis(opts *redis.Options) (*redis.Client, context.Context, error) {// 创建 Redis 客户端rdb := redis.NewClient(opts)// 创建上下文ctx := context.Background()// 测试连接_, err := rdb.Ping(ctx).Result()if err != nil {fmt.Println("连接 Redis 失败!")return nil, nil, err}fmt.Println("连接 Redis 成功!")return rdb, ctx, nil
}

本人已在自定义包中定义此函数,这样,用户无需每次手动测试链接。自定义包已部署在gitee上,读者可通过go get+本人的项目地址获取,项目地址:my_gopkg。使用前建议阅读README。

三、GO操作redis

go-redis封装的函数名和redis语句是一样的,传参除了传入上下文变量也是一样的,只是调用函数时多了Err()和Result()。Result()用于获取 Redis 命令的返回值。Err()用于获取命令执行的错误信息。
数据类型以哈希表为例,GO链接,操作redis的完整代码如下:

package mainimport ("context""fmt""time""github.com/redis/go-redis/v9"
)// ConnectRedis 创建 Redis 客户端并返回客户端和上下文
func ConnectRedis(opts *redis.Options) (*redis.Client, context.Context, error) {// 创建 Redis 客户端rdb := redis.NewClient(opts)// 创建上下文ctx := context.Background()// 测试连接_, err := rdb.Ping(ctx).Result()if err != nil {fmt.Println("连接 Redis 失败!")return nil, nil, err}fmt.Println("连接 Redis 成功!")return rdb, ctx, nil
}
func main() {// 配置链接信息opts := redis.Options{Addr:     "localhost:6379", // Redis 服务器地址和端口Password: "",               // Redis 密码,默认为空DB:       0,                // Redis 数据库编号,默认为 0}rdb, ctx, err := ConnectRedis(&opts)if err != nil {return}// 创建用户err = rdb.HSet(ctx, "myhash", "name", "张三", "age", 30).Err()if err != nil {fmt.Println("创建用户失败:", err)return}fmt.Println("用户创建成功")// 获取用户信息userInfo, err := rdb.HGetAll(ctx, "myhash").Result()if err != nil {fmt.Println("获取用户信息失败:", err)return}fmt.Println("用户信息:", userInfo)// 更新用户信息err = rdb.HSet(ctx, "myhash", "name", "李四", "age", 25).Err()if err != nil {fmt.Println("更新用户信息失败:", err)return}fmt.Println("用户信息更新成功")// 再次获取用户信息以查看更新效果updatedInfo, err := rdb.HGetAll(ctx, "myhash").Result()if err != nil {fmt.Println("获取更新后的用户信息失败:", err)return}fmt.Println("更新后的用户信息:", updatedInfo)// 设置键的过期时间为5秒err = rdb.Expire(ctx, "myhash", 5*time.Second).Err()if err != nil {fmt.Println("设置过期时间失败:", err)return}fmt.Println("设置过期时间成功")// 等待6秒time.Sleep(6 * time.Second)// 再次尝试获取哈希值(预期为空,因为键已过期)result, err := rdb.HGetAll(ctx, "myhash").Result()if err != nil {fmt.Println("获取用户信息失败:", err)return}if len(result) == 0 {fmt.Println("键已过期,无法获取用户信息")} else {fmt.Println("用户信息:", result)}// 删除用户信息err = rdb.Del(ctx, "myhash").Err()if err != nil {fmt.Println("删除用户信息失败:", err)return}fmt.Println("用户信息删除成功")
}

相关文章:

Redis数据库与GO完结篇:redis操作总结与GO使用redis

一、redis操作总结 由于写redis命令的时候有提示符,所以下表只给出命令名称 数据类型操作简介字符串GET, SET, MGET, MSET, SETEX,DEL最基本的数据类型,存储任意二进制数据,支持简单操作和原子计数。适合存储重复数据。哈希HSET, HGET, HDE…...

《重生到现代之从零开始的C语言生活》—— 动态内存管理

动态内存分配 我们在开辟内存的时候就是 int a 3;这样 但是这样开的空间大小是固定的,且大小不能调整 但是如果我们用动态内存开辟的话,就可以自己申请和释放空间、 malloc 是C语言提供的一个开辟动态空间的函数 void* malloc (size_t size);//si…...

四、Spring Boot集成Spring Security之登录登出业务逻辑

Spring Boot集成Spring Security之登录登出业务逻辑 一、概要说明二、基于内存的用户名密码1、默认用户名密码2、自定义用户名密码3、为方便测试添加测试接口TestController 三、登录登出重要概念介绍四、登录业务逻辑1、登录业务相关过滤器2、访问业务请求处理流程①、访问业务…...

pipe和pipefd

Linux 中 pipe 的详细介绍 在 Linux 中,pipe 是一个系统调用,用于创建一个管道,这是一种用于进程间通信(IPC)的机制。管道允许两个进程之间进行单向数据传输,通常是一个进程向管道写入数据,而另…...

无人机之飞控仿真技术篇

一、无人机飞控仿真技术的定义 无人机飞控仿真技术主要是指飞行控制系统仿真,它是以无人机的运动情况为研究对象,面向对象的复杂系统仿真。通过该技术,可以模拟无人机的飞行过程,评估飞行控制系统的性能,优化飞行参数&…...

Tetra Pak利乐触摸屏维修beijer北尔触摸屏维修E1151

TetraPak利乐包装机触摸显示屏维修,北尔全系列型号触摸屏修理 维修注意事项: 上电前,应检查负载是否接上或是否正确; 测量电压时,确认档位是否在电压档。要确认仪器仪表的量程应大于测试点的电压; 更换电…...

Python_网络编程(IP 端口 协议)

网络编程: 互联网时代,现在基本上所有的程序都是网络程序,很少有单机版的程序了。网络编程就是如何在程序中实现两台计算机的通信。Python语言中,提供了大量的内置模块和第三方模块用于支持各种网络访问,而且Python语言…...

Adobe Acrobat提示“3D数据解析错误”

原因:在使用Adobe Acrobat打开3D PDF时,因当前Adobe Acrobat的配置存在错误,所以无法打开 解决方法:重新生成配置 首先到达下面的路径C:\Users\你的用户名\AppData\Local\Adobe\Acrobat 下面为我的路径内容 若该路径下存在文件…...

红帽7—Mysql路由部署

MySQL Router 是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移和客户端路 由。 利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略 来处理连接,使其…...

LLM4Rec最新工作: 字节发布用于序列推荐的分层大模型HLLM

前几个月 Meta HSTU 点燃各大厂商对 LLM4Rec 的热情,一时间,探索推荐领域的 Scaling Law、实现推荐的 ChatGPT 时刻、取代传统推荐模型等一系列话题让人兴奋,然而理想有多丰满,现实就有多骨感,尚未有业界公开真正复刻 …...

怎么高效对接SaaS平台数据?

SaaS平台数据对接是指将一个或多个SaaS平台中的数据集成到其他应用或平台中的过程。在当前的数字化时代,企业越来越倾向于使用SaaS平台来管理他们的业务和数据。然而,这些数据通常散布在不同的SaaS平台中,这对于企业数据的整合和分析来说可能…...

Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy

目录 Map算子使用 FlatMap算子使用 Filter算子使用-数据过滤 Distinct算子使用-数据去重 groupBy算子使用-数据分组 sortBy算子使用-数据排序 Map算子使用 # map算子主要使用长场景,一个转化rdd中每个元素的数据类型,拼接rdd中的元素数据&#xf…...

CSS响应式布局

CSS 响应式布局也称自适应布局,是 Ethan Marcotte 在 2010 年 5 月份提出的一个概念,简单来讲就是一个网站能够兼容多个不同的终端(设备),而不是为每个终端做一个特定的版本。这个概念是为解决移动端浏览网页而诞生的。…...

AI大模型书籍丨掌握 LLM 和 RAG 技术,这本大模型小鸟书值得一看!

本指南旨在帮助数据科学家、机器学习工程师和机器学习/AI 架构师探索信息检索与 LLMs 的集成及其相互增强。特别聚焦于 LLM 和检索增强生成(RAG)技术在信息检索中的应用,通过引入外部数据库与 LLMs 的结合,提高检索系统的性能。 …...

Mysql和Oracle使用差异和主观感受

这两种常用的关系型数据库有何差异? 支持和社区 MySQL:有一个活跃的开源社区,用户可以获取大量的文档和支持。 Oracle:提供了专业的技术支持,但通常需要额外的费用。 易用性 MySQL:通常被认为是更易于学…...

【Java】—— File类与IO流:File类的实例化与常用方法

目录 1. java.io.File类的使用 1.1 概述 1.2 构造器 1.3 常用方法 1、获取文件和目录基本信息 2、列出目录的下一级 3、File类的重命名功能 4、判断功能的方法 5、创建、删除功能 1.4 练习 练习1: 练习2: 练习3: 1. java.io.Fil…...

C++设计模式——装饰器模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 什么是装饰器模式? 装饰器模式(Decorator Pattern)是一种结构型设计模式,允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创…...

C#使用ITextSharp生成PDF文件实例详解

许多项目开发中需要生成PDF, 常规办法使用官方提供的Microsoft.Office.Interop.Worddll插件,但是这种方法需要完全安装OFFICE,另外版本不一致还会出现很多错误。一般不推荐使用。 下面介绍这种巧妙的用法,定能事半功倍。 本文使用ITextSharp完成功能。 首先,通过NuGet…...

10.9QT对话框以及QT的事件机制处理

MouseMoveEvent(鼠标移动事件) widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 设置窗口为无边框,去掉标题栏等装饰this->setWi…...

SiLM266x系列SiLM2661高压电池组前端充/放电高边NFET驱动器 为电池系统保护提供可靠性和设计灵活性

SiLM2661产品概述: SiLM2661能够灵活的应对不同应用场景对锂电池进行监控和保护的需求,为电池系统保护提供可靠性和设计灵活性。是用于电池充电/放电系统控制的低功耗、高边 N 沟道 FET 驱动器,高边保护功能可避免系统的接地引脚断开连接&am…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...