【golang学习笔记 gin 】1.2 redis 的使用

安装redis

php 复制代码
go get -u github.com/gin-gonic/gin
go get -u github.com/go-redis/redis/v8

创建相关目录

php 复制代码
gotest
 ->conifg
   ->database.go
   ->redis.go
 ->controller 
   ->index.go
 ->model
   ->user.go
 ->router
   ->router.go
 main.go 

封装Redis

php 复制代码
package config
import (
	"github.com/go-redis/redis/v8"
    "context"
    "time"
)
var rdb *redis.Client
var Ctx = context.Background()

func InitRedis() {
    rdb = redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", // Redis 服务器地址
        Password: "",                // Redis 密码
        DB:       0,                 // 选择的数据库
    })
    // 检查 Redis 连接
    _, err := rdb.Ping(Ctx).Result()
    if err != nil {
        panic(err)
    }
}


//StringSet 设置字符串
func  Set(key, value string, expiration time.Duration) error {
return rdb.Set(Ctx, key, value, expiration).Err()
}
// StringGet 获取字符串
func  Get(key string) (string, error) {
return rdb.Get(Ctx, key).Result()
}
// StringDel 删除字符串
func  Del(key string) error {
return rdb.Del(Ctx, key).Err()
}
// IncrBy 自增
func IncrBy(key string, value int64)(int64, error){
  return  rdb.IncrBy(Ctx, key, value).Result()
}
// DecrBy 自减
func DecrBy(key string, value int64)(int64, error){
    return  rdb.DecrBy(Ctx, key, value).Result()
}
// StringExpire 设置过期时间
func Expire(key string, expiration time.Duration) error {
return rdb.Expire(Ctx, key, expiration).Err()
}
// StringExists 检查是否存在
func StringExists(key string) (bool, error) {
count, err := rdb.Exists(Ctx, key).Result()
return count >
0, err
}


// HashSet 设置 hash 字段
func HashSet(key, field, value string) error {
return rdb.HSet(Ctx, key, field, value).Err()
}
// HashMSet 批量设置 hash
func HashMSet(key string, fields map[string]interface{
}) error {
return rdb.HMSet(Ctx, key, fields).Err()
}
// HashGet 获取 hash 字段
func HashGet(key, field string) (string, error) {
return rdb.HGet(Ctx, key, field).Result()
}
// HashGetAll 获取所有字段
func HashGetAll(key string) (map[string]string, error) {
return rdb.HGetAll(Ctx, key).Result()
}
// HashDel 删除字段
func HashDel(key string, fields ...string) error {
return rdb.HDel(Ctx, key, fields...).Err()
}
// HashExists 判断字段是否存在
func HashExists(key, field string) (bool, error) {
exists, err := rdb.HExists(Ctx, key, field).Result()
return exists, err
}
// HashIncrBy 自增 hash 字段
func HashIncrBy(key, field string, value int64) (int64, error) {
return rdb.HIncrBy(Ctx, key, field, value).Result()
}



// ListLPush 从左侧插入
func ListLPush(key string, values ...interface{
}) error {
return rdb.LPush(Ctx, key, values...).Err()
}
// ListRPush 从右侧插入
func ListRPush(key string, values ...interface{
}) error {
return rdb.RPush(Ctx, key, values...).Err()
}
// ListLPop 从左侧弹出
func ListLPop(key string) (string, error) {
return rdb.LPop(Ctx, key).Result()
}
// ListRPop 从右侧弹出
func ListRPop(key string) (string, error) {
return rdb.RPop(Ctx, key).Result()
}
// ListRange 获取范围 [start, stop]
func ListRange(key string, start, stop int64) ([]string, error) {
return rdb.LRange(Ctx, key, start, stop).Result()
}
// ListLen 获取长度
func ListLen(key string) (int64, error) {
return rdb.LLen(Ctx, key).Result()
}
// ListDel 删除整个 list
func ListDel(key string) error {
return rdb.Del(Ctx, key).Err()
}



// SetAdd 添加元素
func SetAdd(key string, members ...interface{
}) error {
return rdb.SAdd(Ctx, key, members...).Err()
}
// SetMembers 获取所有元素
func SetMembers(key string) ([]string, error) {
return rdb.SMembers(Ctx, key).Result()
}
// SetIsMember 判断是否是成员
func SetIsMember(key string, member interface{
}) (bool, error) {
exists, err := rdb.SIsMember(Ctx, key, member).Result()
return exists, err
}
// SetRem 删除元素
func SetRem(key string, members ...interface{
}) error {
return rdb.SRem(Ctx, key, members...).Err()
}
// SetCard 获取集合大小
func SetCard(key string) (int64, error) {
return rdb.SCard(Ctx, key).Result()
}
// SetPop 随机弹出一个元素
func SetPop(key string) (string, error) {
return rdb.SPop(Ctx, key).Result()
}



// ZAdd 添加元素(score, member)
func ZAdd(key string, members ...*redis.Z) error {
return rdb.ZAdd(Ctx, key, members...).Err()
}
// ZRange 获取升序范围
func ZRange(key string, start, stop int64) ([]string, error) {
return rdb.ZRange(Ctx, key, start, stop).Result()
}
// ZRevRange 获取降序范围
func ZRevRange(key string, start, stop int64) ([]string, error) {
return rdb.ZRevRange(Ctx, key, start, stop).Result()
}
// ZRangeWithScores 获取带分数的元素
func ZRangeWithScores(key string, start, stop int64) ([]redis.Z, error) {
return rdb.ZRangeWithScores(Ctx, key, start, stop).Result()
}
// ZScore 获取成员分数
func ZScore(key, member string) (float64, error) {
return rdb.ZScore(Ctx, key, member).Result()
}
// ZRem 删除成员
func ZRem(key string, members ...string) error {
var interfaceMembers []interface{
}
for _, member := range members {
interfaceMembers = append(interfaceMembers, member)
}
return rdb.ZRem(Ctx, key, interfaceMembers...).Err()
}
// ZCard 获取有序集合大小
func ZCard(key string) (int64, error) {
return rdb.ZCard(Ctx, key).Result()
}
// ZRank 获取升序排名
func ZRank(key, member string) (int64, error) {
return rdb.ZRank(Ctx, key, member).Result()
}
// ZRevRank 获取降序排名
func ZRevRank(key, member string) (int64, error) {
return rdb.ZRevRank(Ctx, key, member).Result()
}

全局引用 main.go

php 复制代码
package main
import (
	"gotest/router"
	"gotest/config"
)

func main() {
 	config.InitRedis() // 初始化Redis客户端
	r := router.SetupRouter() // 使用路由设置函数来初始化路由和中间件等。
	r.Run(":8080")            // 监听并在 0.0.0.0:8080 上启动服务。默认情况下,Gin使用的是HTTP协议。如果你需要HTTPS,可以使用`r.RunTLS(":8080", "certfile", "keyfile")`。
}

测试调用

php 复制代码
package controller
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gotest/config"
	"gotest/model"
)
func RedisHandler(c *gin.Context) {
	    key := "name"
        value := "我成功設置了redis"
        err := config.Set(key, value,0) // 调用封装好的Set函数
        if err != nil {
            c.JSON(500, gin.H{"error": err.Error()})
            return
        }
		name,err := config.Get("name");
        if err != nil {
            c.JSON(500, gin.H{"error": err.Error()})
            return
        }
        c.JSON(200, gin.H{
			"message": "Set success",
			"data":name,
	})
}
}
相关推荐
DKPT6 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa6 小时前
HTML和CSS学习
前端·css·学习·html
ST.J6 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin6 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
看海天一色听风起雨落7 小时前
Python学习之装饰器
开发语言·python·学习
小憩-7 小时前
【机器学习】吴恩达机器学习笔记
人工智能·笔记·机器学习
UQI-LIUWJ7 小时前
unsloth笔记:运行&微调 gemma
人工智能·笔记·深度学习
googleccsdn7 小时前
ESNP LAB 笔记:配置MPLS(Part4)
网络·笔记·网络协议
楚肽生物小敏7 小时前
Cy5-Tyramide, Cyanine 5 Tyramide;1431148-26-3
笔记