当前位置: 首页 > 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": "验证成功",})
}
http://www.xdnf.cn/news/969625.html

相关文章:

  • UVa12298 3KP-BASH Project
  • Codeforces Round 1027 (Div. 3)-G
  • Oracle 数据库对象管理:表空间与表的操作
  • 解决克隆Github源码库时的Permission denied 问题
  • 入门学者做的excel文献笔记发现不了问题怎么办?——用提示词来解决
  • 日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
  • RocketMQ延迟消息机制
  • Python列表:高效灵活的数据存储与操作指南
  • Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
  • 如何备考公路水运安全员A证?
  • pytorch-frame开源程序适用于 PyTorch 的表格深度学习库,一个模块化深度学习框架,用于在异构表格数据上构建神经网络模型。
  • dMSA 滥用(BadSuccessor)导致权限提升
  • C++11 花括号等式初始化器(Brace-or-Equal Initializers):从入门到精通
  • 安全大模型智驱网络和数据安全效能跃迁
  • 利用最小二乘法找圆心和半径
  • 【从零学习JVM|第五篇】打破双亲委派机制
  • OceanBase v4.3.5 特性解读:通过OSS WORM特性进行备份归档
  • 【动手学深度学习】3.2. 线性回归的从零开始实现
  • [UnrealCircle武汉]UE5跨平台游戏常见问题及解决方案笔记
  • Java八股文——JVM「垃圾回收篇」
  • 鸿蒙接入微信sdk登录 解决提示BundleID信息校验不通过
  • rasa NLU意图解析基础学习
  • 全国空气质量监测站点数据分析:从原始数据到空间可视化
  • 1. 网络基础
  • 带eachers的html转word
  • 渲染学进阶内容——joml库
  • 深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
  • cell properties修改参数
  • 突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
  • Vue 指令详解:概念与作用