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

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

javascript 复制代码
package redis

import (
	"context"
	"github.com/go-redis/redis/v8"
	"log"
	"time"
)

var (
	client *redis.Client
	ctx    = 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()初始化

javascript 复制代码
package main

import (
	"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中

javascript 复制代码
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": "验证成功",
	})
}

随机数,多点登录

javascript 复制代码
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" 的 key
	key := fmt.Sprintf("user_%d", timestamp)

	//使用redis
	client := 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": "验证成功",
	})
}
相关推荐
我材不敲代码3 分钟前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬1 小时前
Java中的CAS机制详解
java·开发语言
韩立学长2 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
froginwe113 小时前
Scala 循环
开发语言
m0_706653233 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你913 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu3 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
Leon-zy3 小时前
Redis7.4.5 主备冗余+哨兵模式部署
redis·哨兵模式·主备模式
qq_423233903 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575344 小时前
分布式任务调度系统
开发语言·c++·算法