Beego 中使用redis

本文介绍了如何在Beego应用中配置并初始化Redis,详细讲解了在conf配置文件中设置Redis的相关参数,以及在Model中进行Redis实例化的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • conf中redis相关配置
##redis连接信息
redisHost = "127.0.0.1"
redisPort = "6379"
redisPass = ""
redisDB = 0
redisPrefix = "UIMS_PERMISSION_"
  • Model中redis初始化:
import (
   "github.com/astaxie/beego"
   "github.com/astaxie/beego/logs"
   "github.com/astaxie/beego/orm"
   "github.com/gomodule/redigo/redis"
   "strconv"
   "time"
)


var RedisPool *redis.Pool


func init() {
   var conn = beego.AppConfig.String("redisHost")+":"+beego.AppConfig.String("redisPort")
   var password = beego.AppConfig.String("redisPass")
   var dbNum,_ = strconv.Atoi(beego.AppConfig.String("redisDB"))
   dialFunc := func() (c redis.Conn, err error) {
      c, err = redis.Dial("tcp", conn)
      if err != nil {
         return nil, err
      }


      if password != "" {
         if _, err := c.Do("AUTH", password); err != nil {
            c.Close()
            return nil, err
         }
      }


      _, selecterr := c.Do("SELECT", dbNum)
      if selecterr != nil {
         c.Close()
         return nil, selecterr
      }
      return
   }
   // initialize a new pool
   RedisPool = &redis.Pool{
      MaxIdle:     3,
      IdleTimeout: 180 * time.Second,
      Dial:        dialFunc,
   }


   InitPermissionRedisData()
}


//初始化缓存数据
func InitPermissionRedisData() {
   var redisPrefix = beego.AppConfig.String("redisPrefix")
   redisConn := RedisPool.Get()
   defer redisConn.Close()


   clearPermissionData(redisConn, redisPrefix)
   initAllApi(redisConn, redisPrefix)
   initPermission(redisConn, redisPrefix)
   initApiPermission(redisConn, redisPrefix)
}


//清除相关redis数据
func clearPermissionData(redisConn redis.Conn, redisPrefix string) {
   redisKeys,err := redis.Strings(redisConn.Do("KEYS", redisPrefix+"*"))
   if err != nil {
      return
   }
   redisConn.Do("MULTI")
   for _,v := range redisKeys {
      redisConn.Do("DEL", v)
   }
   redisConn.Do("EXEC")
}


//初始化
func initApi(redisConn redis.Conn, redisPrefix string) {
   cond := orm.NewCondition()
   cond = cond.And("deleted_at", 0)
   apis,err := GetApiListByCondition(cond, -1, -1)
   if err != nil {
      return
   } else {
      var tmpString string
      redisConn.Do("MULTI")
      for _,v := range apis {
         tmpString = v.Path + "_" + v.Method
         redisConn.Do("SADD",redisPrefix+"Api_Lists1", tmpString)
         if v.IsWhiteList == 1 {
            redisConn.Do("SADD",redisPrefix+"Api_Lists2", tmpString)
         }
      }
      redisConn.Do("EXEC")
   }
}


//设置key value
func SetRedisKeyValue(key, value string) {
   var redisPrefix = beego.AppConfig.String("redisPrefix")
   redisConn := RedisPool.Get()
   defer redisConn.Close()


   redisConn.Do("SET",redisPrefix+key, value)
}


//删除key值
func DelRedisKeys(keys []string) {
   var redisPrefix = beego.AppConfig.String("redisPrefix")
   redisConn := RedisPool.Get()
   defer redisConn.Close()


   redisConn.Do("MULTI")
   for _,v := range keys {
      redisConn.Do("DEL",redisPrefix+v)
   }
   redisConn.Do("EXEC")
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值