go全局配置redis,全局只需要连接一次,然后全局可以引用使用

在这里插入图片描述

创建redis文件夹、创建dadeRedis.go

package redisimport ("context""github.com/go-redis/redis/v8""log""time"
)var (client *redis.Clientctx    = context.Background()
)// 初始化Redis连接(建议在程序启动时调用)
func Init() error {client = redis.NewClient(&redis.Options{Addr:            "localhost:6379",Password:        "",DB:              0,DialTimeout:     10 * time.Second,       // 连接超时(首次连接)ReadTimeout:     30 * time.Second,       // 读超时WriteTimeout:    30 * time.Second,       // 写超时PoolSize:        100,                    // 连接池大小MinIdleConns:    10,                     // 最小空闲连接数MaxRetries:      5,                      // 命令执行失败时的最大重试次数MinRetryBackoff: 8 * time.Millisecond,   // 重试最小等待时间MaxRetryBackoff: 512 * time.Millisecond, // 重试最大等待时间})// 测试连接_, err := client.Ping(ctx).Result()if err != nil {log.Fatalf("Redis连接初始化失败: %v", err)return err}log.Println("Redis连接初始化成功")return nil
}// 获取Redis客户端(所有文件共享此实例)
func GetClient() *redis.Client {return client
}// 关闭连接(程序退出时调用)
func Close() error {return client.Close()
}

2、在app.go的main()初始化

package mainimport ("github.com/gin-contrib/cors""github.com/gin-gonic/gin""goDocker/controller""goDocker/redis""log""net/http""time"
)func main() {// 初始化Redis连接(仅执行一次)if err := redis.Init(); err != nil {log.Fatalf("程序启动失败: Redis连接初始化错误 - %v", err)}// 程序退出时关闭连接,defer函数是main退出执行defer redis.Close()//redis在这里初始化完成,并且连接完成,全局使用router := gin.Default()// 配置CORS中间件config := cors.DefaultConfig()// 允许的域名,* 表示所有config.AllowOrigins = []string{"*"}// 是否允许携带凭证config.AllowCredentials = true// 允许的请求方法config.AllowMethods = []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}// 允许的请求头config.AllowHeaders = []string{"Origin", "Content-Type", "Accept", "Authorization", "Token", "User"}// 预检请求的有效期config.MaxAge = 12 * time.Hour// 全局使用CORS中间件router.Use(cors.New(config))router.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "你好,我是docker管理")})v1 := router.Group("/index"){v1.POST("/login", controller.Login)v1.POST("/select", controller.CostingSelect)v1.POST("/selectDocker", controller.CostingDocker)v1.POST("/fileShUpdate", controller.FileShUpdate)}//调用定时任务router.Run("0.0.0.0:40090")
}

3、在其它文件使用index.go中

package controller// /home/cs/goDocker
import ("bytes""context""encoding/json""fmt""github.com/gin-gonic/gin""goDocker/redis""io/ioutil""log""os""os/exec""strings""time"
)func Login(c *gin.Context) {//获得post请求参数b, _ := c.GetRawData()// 定义map或结构体var req map[string]interface{}// 反序列化_ = json.Unmarshal(b, &req)pwds, _ := req["pwd"].(string)if pwds != "wbrj131369" {c.JSON(200, gin.H{"code":    2001,"data":    req,"message": "验证失败",})return}client := redis.GetClient() // 获取全局共享的Redis客户端ctx := context.Background()// 使用Redis客户端err := client.Set(ctx, "user", "admin", 10*time.Minute).Err()if err != nil {c.JSON(500, gin.H{"error": "Redis操作失败"})return}//读取val, err := client.Get(ctx, "user").Result()if err != nil {log.Fatalf("获取值失败: %v", err)}// 返回 JSON 响应c.JSON(200, gin.H{"code":    2000,"data":    req,"message": "验证成功",})
}

随机数,多点登录

func Login(c *gin.Context) {//获得post请求参数b, _ := c.GetRawData()// 定义map或结构体var req map[string]interface{}// 反序列化_ = json.Unmarshal(b, &req)pwds, _ := req["pwd"].(string)if pwds != "wbrj131369" {c.JSON(200, gin.H{"code":    2001,"data":    req,"message": "验证失败",})return}//md5加密now := time.Now()timestamp := now.Unix()timestampKey := now.UnixNano() // 纳秒级时间戳hash := md5.Sum([]byte(fmt.Sprintf("%d", timestampKey)))md5Str := hex.EncodeToString(hash[:])//生成key值// 生成格式为 "user_1697342400" 的 keykey := fmt.Sprintf("user_%d", timestamp)//使用redisclient := redis.GetClient() // 获取全局共享的Redis客户端ctx := context.Background()// 使用Redis客户端err := client.Set(ctx, key, md5Str, 600*time.Minute).Err()if err != nil {c.JSON(500, gin.H{"error": "Redis操作失败"})return}//读取val, err := client.Get(ctx, key).Result()if err != nil {log.Fatalf("获取值失败: %v", err)}log.Printf("获取到的值: %s", val)// 返回 JSON 响应c.JSON(200, gin.H{"code":    2000,"data":    req,"key":     key,"tokey":   md5Str,"message": "验证成功",})
}

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

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

相关文章

缓冲区(C语言缓冲区+内核缓冲区)一个例子解释他们的关系和作用!!!

首先提出问题&#xff1a; 为什么以下代码是先sleep三秒后&#xff0c;屏幕才显示"XXXXXXX"。 #include<stdio.h> #include<unistd.h>int main() {printf("XXXXXXX");sleep(3);return 0; } 为什么以下代码是先显示"XXXXXXX"&#xf…

【2025版】Java 工程师学习路线图 —— 掌握程度描述版

✅【2025版】Java 工程师学习路线图 &#x1f4a1; 目标&#xff1a;成为合格的 Java 工程师&#xff08;前后端都要会&#xff09; &#x1f4dd; 结构清晰 | 阶段明确 | 掌握程度分级 | 适合自学或转行 &#x1f539; 阶段一&#xff1a;编程基础 计算机通识 模块内容推荐掌…

从零实现一个红队智能体

从零实现一个红队智能体(持续更新) 2025-06-09 背景&#xff1a;最近学了基础些东西和工具基础使用&#xff0c;发现一套流程下来太多需要手工要做的&#xff0c;就像自己能不能结合自己的技术栈实现小工具 &#x1f947; 第一步&#xff1a;从实用性开始分析 目标场景 希望…

Uniapp实现多选下拉框

文章目录 前言一、效果展示1.1 下拉效果图1.2 下拉选择效果图1.3 选择显示效果图 二、组件源码2.1.CustomCheckbox.vue源码2.2.niceui-popup-select.vue源码 三、demo.vue代码演示 前言 之前在使用Uniapp时&#xff0c;一直都是下拉框单选。今天某个项目需求需要使用Uniapp实现…

JavaScript-Array.from

Array.from() 是 JavaScript 中用于将类数组对象&#xff08;array-like&#xff09;或可迭代对象&#xff08;iterable&#xff09;转换为真实数组的一个非常有用的方法。 &#x1f4cc; 一、基本语法 Array.from(arrayLike, mapFn?, thisArg?)参数说明&#xff1a; 参数类…

二刷苍穹外卖 day02

新增员工 DTO 将前端传递的参数列表通过对应的实体类接收 当前端提交的数据和实体类中对应的属性差别较大时&#xff0c;使用DTO来封装数据 Data public class EmployeeDTO implements Serializable {private Long id;private String username;private String name;private…

通过Heron Handoff 插件我们在figma设计中可以像sketch导出离线标注

一、设计交付的历史困境与破局契机 在数字产品开发的全流程中&#xff0c;设计标注的高效传递始终是连接创意与实现的关键纽带。传统设计工具如 Sketch 凭借 Bluebeam、Sketch Measure 等插件构建了成熟的离线标注体系&#xff0c;设计师可将标注文件打包交付&#xff0c;开发…

SSE 数据的传输无法流式获取

问题 调试过程中发现SSE数据返回的时间都是一样的&#xff0c;怀疑是接口问题。 参考 EventSource数据一次性出来&#xff0c;并未流式输出的原因_sourceevent为什么结果一下全部返回了-CSDN博客 处理 EventStream 不能流式返回的问题&#xff1a;Nginx 配置优化 解决方案 …

markdown文本转换时序图

好久没更新了~这篇是markdown文本转换时序图的常用方法 文章目录 前言一、Mermaid语法示例二、PlantUML语法示例三、在线工具快速转换总结 前言 使用专业工具如Mermaid或PlantUML可以直接在Markdown中绘制时序图。这些工具支持简洁的语法&#xff0c;生成可嵌入文档的图表&…

谷粒商城-分布式微服务 -集群部署篇[一]

十九、k8s 集群部署 19.1 k8s 快速入门 19.1.1 简介 Kubernetes 简称 k8s。是用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。 中文官网 中文社区 官方文档 社区文档 概述 | Kubernetes 传统部署时代&#xff1a; 早期&#xff0c;各个组织是在物理服务器上…

微信小程序- 用canvas生成排行榜

设计功能不是很复杂&#xff0c;也不想用插件&#xff0c;最终出现现在版本&#xff0c;主要用到微信小程序 wx.canvasToTempFilePath方法 // 直接调用改方法 createQRCode() {const qrCodeCanvasId "qrcodeCanvas";drawQrcode({width: 200,height: 200,canvasId: …

深度剖析:UI 设计怎样为小程序构建极致轻量体验

内容摘要 在小程序的世界里&#xff0c;用户都追求快速、便捷的轻量体验。但你是否好奇&#xff0c;为啥有些小程序能让人轻松上手&#xff0c;快速达成目标&#xff0c;而有些却让人感觉繁琐、卡顿&#xff1f;这里的关键差异&#xff0c;往往就藏在 UI 设计中。UI 设计到底施…

【网络安全】Qt免杀样本分析

初步研判 SHA256&#xff1a;9090807bfc569bc8dd42941841e296745e8eb18b208942b3c826b42b97ea67ff 我们可以看到引擎0检出&#xff0c;是个免杀样本&#xff0c;不过通过微步云沙箱的行为分析&#xff0c;已经被判为恶意 行为分析 进程行为 可以看到demo显示调用了winver获…

window 显示驱动开发-如何查询视频处理功能(六)

D3DDDICAPS_FILTERPROPERTYRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含传递D3DDDICAPS_FILTERPROPERTYRANGE请求类型时特定视频流上特定筛选器设置允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视…

Oracle线上故障问题解决

----重启电脑找不到sid Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor Could not open connection sqlplus "/as sysdba" SQL> shutdown immediate 数据库…

语音信号处理三十——高效多相抽取器(Polyphase+Noble)

文章目录 前言一、Polyphase 多项分解1.定义2.拆分公式3.推导过程1&#xff09;按模 M M M拆分求和项2&#xff09;提取因子 4.总结 二、Noble恒等式1. 定义2.Noble恒等式表达方式1&#xff09;抽取系统的 Noble 恒等式2&#xff09;插值系统的 Noble 恒等式 2.Nodble恒等式推导…

广告推荐系统中模型训练中模型的结构信息、Dense数据、Sparse数据

下面结合广告推荐系统常见的深度学习模型(比如 Wide & Deep、DeepFM、Two-Tower 等),介绍一下“模型的结构信息”、Dense 数据和 Sparse 数据在训练过程中的角色及处理方式。 模型结构信息 输入层(Input Layer) • Sparse 输入:各类离散高维特征(用户 ID、广告 ID、…

安全生产管理是什么?安全生产管理主要管什么?

安全生产管理是什么&#xff1f;安全生产管理主要管什么&#xff1f; 不管是制造业、建筑业&#xff0c;还是仓储、物流、化工等等&#xff0c;一聊到“安全事故”&#xff0c;大家脑子里最先冒出来的两个词&#xff0c;肯定就是&#xff1a; 人的不安全行为物的不安全状态 …

SecureRandom.getInstanceStrong() 与虚拟机的爱恨情仇

问题描述 使用Ruoyi-cloud 二开&#xff0c;将服务部署到虚拟机上后&#xff0c;准备登录&#xff0c;发现验证码一致加载不出来&#xff0c;接口请求超时! 解决步骤 telnet 虚拟机ipport 发现可以通.curl 接口&#xff0c;发现一致不返回&#xff0c;超时了./code 接口超时&am…

DEM 地形分析与水文建模:基于 ArcGIS 的流域特征提取

技术点目录 一、 GIS理论及ArcGIS认识二、ArcGIS数据管理与转换三、ArcGIS地图制作与发布四、ArcGIS数据制备与编辑五、ArcGIS矢量空间分析及应用六、ArcGIS栅格空间分析及应用七、ArcGIS空间插值及应用八、DEM数据与GIS三维分析九、ArcGIS高级建模及应用十、综合讲解了解更多 …