- 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")
}