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

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": "验证成功",})
}

相关文章:

  • 光伏功率预测 | BP神经网络多变量单步光伏功率预测(Matlab完整源码和数据)
  • filebeat原理架构
  • 可视化在车间质量管控中的创新应用,提升品质
  • QT中实现tcp连接
  • 计算机网络笔记(三十四)——5.6TCP可靠传输的实现
  • node+express+jwt+sequelize+mysql+本地服务器部署前端+云服务器公网部署:入门教程
  • 2N65-ASEMI电源领域核心组件2N65
  • 目标跟踪_学习
  • 【大模型】解耦大语言模型中的记忆与推理能力
  • 6.10 - 常用 SQL 语句以及知识点
  • ArcGIS Pro 3.4 二次开发 - 流图层
  • linux等保思路与例题
  • 什么是软件开发的边际成本?有什么作用?
  • vue 监听页面滚动
  • Linux下V2Ray安装配置指南
  • linux thermal framework(1)_概述
  • LIGHT (数据库操作)
  • 编程风格良好的条件比较语句
  • 实现转场动画
  • vue3+tdesign实现明暗主题切换
  • 申请做网站要什么局/百度网盘app
  • 个人备案能公司网站/关键词是网站seo的核心工作
  • 做套现网站/seo网站推广目的
  • html网页模板下载html模板免费/佛山网站建设十年乐云seo
  • 怎么做展示型网站/emlog友情链接代码
  • 森动网网站建设好吗/seo网络运营