gin框架学习四之redis

在app目录新建cache文件夹 ,然后在cache文件夹下新建cache.go 来初始化 redisClient。代码如下

使用的是  github.com/go-redis/redis

import (
   "fmt"
   "ginApi/conf"
   "github.com/go-redis/redis"
   "time"
)

var RedisClient *redis.Client

func InitRedis(config *conf.RedisConfig)  {
   addr := config.Host+ ":" +config.Port
   RedisClient = redis.NewClient(&redis.Options{
      Addr:    addr, // Redis地址
      Password: config.Password,  // Redis账号
      DB:       config.Db,   // Redis库
      PoolSize: 10,  // Redis连接池大小
      MaxRetries: 3,              // 最大重试次数
      IdleTimeout: 10*time.Second,            // 空闲链接超时时间
   })
   pong, err := RedisClient.Ping().Result()
   if err == redis.Nil {
      fmt.Print("Redis异常")
   } else if err != nil {
      fmt.Print("失败:",err)
   } else {
      fmt.Print(pong)
   }
}

在main.go 中调用 cache.InitRedis()

402a37eed50b432eb631e38b2fb5f53a.png

 在cache文件夹下分别有五个文件 ,针对常用的redis的五种数据类型的简单操作

product_cache.go  使用string 类型

// redis string 使用

func (c *ProductCache) Key(id int) string {
   return "product:pk:id" + strconv.Itoa(id)
}

func (c *ProductCache) Set(id int,model *model.Product,expire time.Duration) bool {
   key := c.Key(id)
   bytes ,_ := json.Marshal(model)
   _,err := RedisClient.Set(key,bytes,120*time.Second).Result()
   if err != nil {
      fmt.Println("redis set error:",err)
      return false
   }
   return true
}

func (c *ProductCache) Get (id int) *model.Product {
   key := c.Key(id)
   res,err := RedisClient.Get(key).Result()
   if err != nil {
      return nil
   }
   var data *model.Product
   _ = json.Unmarshal([]byte(res),&data)
   return data
}

func (c *ProductCache) Del (id int) bool  {
   _,err := RedisClient.Del(c.Key(id)).Result()
   if err != nil {
      return false
   }
   return  true
}

 

black_list.go  set 数据类型的使用 

//redis  set 的 使用 set 查找 添加 删除的复杂度都是 O(1)

//模拟一个ip黑名单 使用redis的set数据类型 ,因为set集合 成员不可以重复
func (c *BlackListCache) Key() string {
   return "BlackList:ip"
}

//set 中添加一个成员
func (c *BlackListCache) SAdd(ip string) bool  {
   key := c.Key()
   _,err :=RedisClient.SAdd(key,ip).Result()
   if err != nil {
      fmt.Println("redis SAdd error:",err)
      return false
   }
   return true
}

//set 中删除一个成员
func (c *BlackListCache) SRem (ip string) bool {
   key := c.Key()
   _,err :=RedisClient.SRem(key,ip).Result()
   if err != nil {
      fmt.Println("redis SRem error:",err)
      return false
   }
   return true

}

//set 中是否存在某个成员
func (c *BlackListCache) SIsMember(ip string) bool  {
   key := c.Key()
   _,err := RedisClient.SIsMember(key,ip).Result()
   if err != nil {
      fmt.Println("redis SAdd error:",err)
      return false
   }
   return true
}

 

其余代码详细可见git 地址

GitHub - hailin86/ginApi at redis

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用GinRedis进行事务操作时,你可以通过以下步骤来实现: 1. 创建Redis连接:首先,你需要使用Go语言的Redis客户端库连接到Redis数据库。可以使用第三方库如`go-redis`或`redigo`来实现。创建一个Redis连接池,以便在需要时可以重用连接。 2. 创建Gin路由:使用Gin框架创建HTTP路由和处理程序。你可以定义不同的路由来处理各种请求。 3. 开启事务:在处理程序中,使用Redis的MULTI命令来开启一个事务。MULTI命令将后续的Redis命令添加到事务队列中,而不是立即执行它们。 4. 执行Redis命令:在事务中,使用Redis的各种命令(如SET、GET、INCR等)来执行你需要的操作。这些命令会被添加到事务队列中。 5. 执行事务:在事务中的所有命令都添加完成后,使用Redis的EXEC命令来执行整个事务。Redis会按照添加的顺序依次执行队列中的命令,并返回每个命令的结果。 6. 处理事务结果:根据EXEC命令的返回结果,你可以判断事务是否执行成功。如果成功,你可以继续处理其他业务逻辑。如果失败,你可以回滚事务或进行其他错误处理。 需要注意的是,在Redis事务中,一旦EXEC命令被调用,Redis会将所有命令作为一个原子操作执行。这意味着要么所有命令都成功执行,要么都不执行。如果在事务执行期间发生了错误,你可以使用Redis的DISCARD命令来放弃执行事务的结果,并回滚到事务开始之前的状态。 希望这些步骤能帮助你在GinRedis中实现事务操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值