1-测试go-redis缓存数据

1-测试go-redis缓存数据

1.go-redis缓存数据测试效果

a.测试页面

测试页面:--这里使用 Postman 来做测试
http://127.0.0.1:8000/article/getone/3
http://127.0.0.1:8000/article/getone/4
http://127.0.0.1:8000/article/getone/5

在这里插入图片描述

b.测试效果

查看终端:
直接使用mysql数据库查询数据时间比较长;
使用 redis 做缓存用时比较短。
使用缓存可以缩短查找数据的时间。

在这里插入图片描述

2.go-redis缓存代码实现

a.程序从main函数开始

准备工作:
	要配好mysql和redis等配置

在这里插入图片描述

b.配好路由

存储位置:/routers.routers.go
操作:
1.测试需要一个路由

//文章路由部分
article_r := r.Group("/article/")
{
	//获取一篇文章详情
	article_c := controllers.NewArticleController()
	article_r.GET("/getone/:id", article_c.GetOne)
}

在这里插入图片描述

c.控制器实现逻辑

/controllers/articleController.go
操作:
1.获取参数
2.将参数带入服务中查找数据
3.返回数据

// 得到一篇文章的详情
func (a *ArticleController) GetOne(c *gin.Context) {
	result := result.NewResult(c)
	param := request.ArticleRequest{ID: validCheck.StrTo(c.Param("id")).MustUInt64()}
	valid, _ := validCheck.BindAndValid(c, &param)
	if !valid {
		result.Error(global.ErrParam)
		return
	}
	articleOne, err := service.GetOneArticle(param.ID)
	if err != nil {
		result.Error(global.ErrArticleNot)
	} else {
		result.Success(&articleOne)
	}
}

在这里插入图片描述

d.在服务里实现获取数据逻辑

/service/article.go
操作:
1.想看缓存中有没有查找的数据
2.如果有,就把数据返回到控制器
3.如果缓存中没有,就到mysql中查找,然后把数据保存到redis缓存,最后返回数据

// 得到一篇文章的详情
func GetOneArticle(articleId uint64) (*model.Article, error) {
	//get from cache
	article, err := cache.GetOneArticleCache(articleId)
	if err == redis.Nil || err != nil {
		//get from mysql
		article, errSel := dao.SelectOneArticle(articleId)
		if errSel != nil {
			return nil, errSel
		} else {
			//set cache
			errSet := cache.SetOneArticleCache(articleId, article)
			if errSet != nil {
				return nil, errSet
			} else {
				return article, errSel
			}
		}
	} else {
		return article, err
	}
}

在这里插入图片描述

e.从redis缓存中获得数据

/cache/article.go
操作:
1.根据条件,在redis中获取数据
2.如果数据无效,就会返回nil和err
3.如果数据有效,将 JSON 格式的字节切片解析成 Go 语言的数据结构
4.将有效数据返回

// 从cache得到一篇文章
func GetOneArticleCache(articleId uint64) (*model.Article, error) {
	var ctx = context.Background()
	key := getArticleCacheName(articleId)
	val, err := global.RedisDb.Get(ctx, key).Result()

	if err == redis.Nil || err != nil {
		return nil, err
	} else {
		article := model.Article{}
		if err := json.Unmarshal([]byte(val), &article); err != nil {
			//t.Error(target)
			return nil, err
		}
		return &article, nil
	}
}

在这里插入图片描述

f.从数据库获取数据

/dao/article.go
操作:
1.根据条件,从mysql中获取数据
2.返回数据
// select一条记录
func SelectOneArticle(articleId uint64) (*model.Article, error) {
	fields := []string{"articleId", "subject", "url"}
	articleOne := &model.Article{}
	err := global.DBLink.Select(fields).Where("articleId=?", articleId).First(&articleOne).Error
	if err != nil {
		return nil, err
	} else {
		return articleOne, nil
	}
}

在这里插入图片描述

g.将数据保存到redis中

/cache/article.go
1.根据取名规则,设置键名
2.将 Go 语言的数据结构转换为 JSON 格式的字节切片
3.将字节切片数据,保存到redis中,键名是上面设置的键名

// 向cache保存一篇文章
func SetOneArticleCache(articleId uint64, article *model.Article) error {
	var ctx = context.Background()
	key := getArticleCacheName(articleId)
	content, err := json.Marshal(article)
	if err != nil {
		fmt.Println(err)
		return err
	}
	errSet := global.RedisDb.Set(ctx, key, content, ArticleDuration).Err()
	if errSet != nil {
		return errSet
	}
	return nil
}

在这里插入图片描述

h.查看redis中的数据

在这里插入图片描述

3.获取开源项目

a.gin框架中用go-redis缓存数据

b.本测试代码下载

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查看浏览器的请求头

爬虫时用到了请求头,虽然可以用网上公开的,但是还是想了解一下本机浏览器的。以 Edge 为例,其余浏览器通用。 打开浏览器任一网页,按F12打开DevTools;或鼠标右键,选择“检查”。首次打开界面应该显示在网页…

git branch -d 删除分支

Git进行版本控制时,删除分支是常见的操作。特别是当特定的功能开发完成或者分支不再需要时,删除分支可以帮助保持仓库的整洁。删除本地分支和删除远端分支是两个独立的操作。如果需要同时删除本地和远端的分支,需要分别执行以下两个命令。 一…

【漏洞复现】|智互联SRM智联云采系统quickReceiptDetail SQL注入漏洞

漏洞描述 智互联(深圳)科技有限公司SRM智联云采系统针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

[论文阅读] 异常检测 Deep Learning for Anomaly Detection: A Review(三)总结梳理-疑点记录

《深度异常检测综述》总结梳理 目录 一、研究背景与挑战二、深度异常检测方法分类三、实验评估四、结论在这篇文章中,**异常检测的异构性**主要从以下几个方面来理解:如何理解多源数据融合的困难“学习正常性的特征表示”与“用于特征提取的深度学习”在…

linux下i2c开发与框架源码分析

目录 1 概述 2 I2c子系统框架 3 I2C的使用流程 3.1 在驱动里使用 3.2 在应用层使用 3.3 I2ctool的使用 4 为硬件i2c注册一个适配器 5 i2c子系统源码流程分析 5.1 i2c device与driver绑定过程 5.1.1 Driver的注册与处理 5.1.2 Client device的生成 5.2 I2c的发送与接…

学习路之phpstudy--安装mysql5.7后在my.ini文件中无法修改sql_mode

windows环境下使用phpstudy安装mysql5.7后需要修改mysql中的sql_mode配置,但是在phpstudy中打开mysql配置文件my.ini后, 通过查找找不到sql_mode或sql-mode, 此时无法在my.ini文件中直接进行修改,可以使用mysql命令进行修改&#…

【大数据学习 | Spark-Core】详解分区个数

RDD默认带有分区的,那么创建完毕rdd以后他的分区数量是多少? 从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。 我们可以发现数据的读取使用的是textInputFormat&#xff…

前端常用内容

Style 1. 文本左对齐 style"text-align: left;" 2. 文本居中 style"text-align: center;" 3. 文本右对齐 style"text-align: right;"margin 属性可以设置以下四种类型的外边距: 1. 单一值:为所有四个方向(上、…

免费微调自己的大模型(llama-factory微调llama3.1-8b)

目录 1. 名词/工具解释2. 微调过程3. 总结 本文主要介绍通过llama-factory框架,使用Lora微调方法,微调meta开源的llama3.1-8b模型,平台使用的是趋动云GPU算力资源。 微调已经经过预训练的大模型目的是,通过调整模型参数和不断优化…

pytest日志总结

pytest日志分为两类: 一、终端(控制台)打印的日志 1、指定-s,脚本中print打印出的信息会显示在终端; 2、pytest打印的summary信息,这部分是pytest 的默认输出(例如测试结果PASSED, FAILED, S…

labview关于文件路径的问题

在调用文件或拆分文件的时候经常会用到拆分路径函数和创建路径函数,最常用的也是当前应用程序目录或者是当前VI目录。 这里我们看到应用程序目录和VI目录在同一项目中,应用程序目录更像是根目录,往下拆分成了各个VI的子目录。 接下来我们来拆…

【MySQL课程学习】:MySQL安装,MySQL如何登录和退出?MySQL的简单配置

🎁个人主页:我们的五年 🔍系列专栏:MySQL课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 MySQL在Centos 7环境下的安装: 卸载…

第二十一周机器学习笔记:动手深度学习之——数据操作、数据预处理

第二十周周报 摘要Abstract一、动手深度学习1. 数据操作1.1 数据基本操作1.2 数据运算1.2.1 广播机制 1.3 索引和切片 2. 数据预处理 二、复习RNN与LSTM1. Recurrent Neural Network(RNN,循环神经网络)1.1 词汇vector的编码方式1.2 RNN的变形…

SSM全家桶 1.Maven

或许总要彻彻底底地绝望一次 才能重新再活一次 —— 24.11.20 maven在如今的idea中已经实现自动配置,不需要我们手动下载 一、Maven的简介和快速入门 Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建测试、打包和发…

《Python 股票交易分析:开启智能投资新时代》(二)

Python 进行股票交易分析的优势 简洁易读:Python 的语法简洁明了,即使是编程新手也能较快上手,降低了股票交易分析的门槛。 Python 的简洁易读是其在股票交易分析中受欢迎的重要原因之一。Python 的语法简洁明了,与其他编程语言相…

cangjie (仓颉) vscode环境搭建

sdk下载 下载中心-仓颉编程语言官网 可选择半年更新版,不用申请。目前版本:0.53.13 ,选择不同平台压缩包下载解压到任意位置即可 补充下载,vscode插件解压后,在vscode扩展中选择从vsix安装,安装后新增名为…

HarmonyOS Next原创项目

学友市集 HarmonyOS毕设,项目完整,代码原创,可接毕设 项目展示 项目简介 学友集市是一款基于HarmonyOS Next开发的二手交易平台,适配HarmonyOS5.0,采用前后端分离架构,致力于为用户提供安全、便捷、高品质的二手商品交易服务。平台整合了华为云认证服…

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…

Gate学习(6) 指令学习3

一、/particle/ 目录及其子目录下的命令 在 `/particle/` 命令目录及其子目录下,可以控制和管理粒子相关的属性和过程。以下是每个命令目录和命令的简要解释: ### `/particle/` 这是粒子控制命令的主目录,包括选择粒子、列出粒子名称、查找粒子编码、创建所有离子和同位旋等…

【Git】:Git基本操作

目录 创建、配置本地仓库 创建本地仓库 配置本地仓库 认识工作区、暂存区、版本库 修改文件 版本回退 撤销修改 删除文件 创建、配置本地仓库 创建本地仓库 我们通常可以通过以下两种方式之一获取 Git 存储库: 自己在本地目录创建一个本地仓库 从其它服务…