package lxmysql import ( "apigame/lx-util/lxredis" "encoding/json" "github.com/astaxie/beego/orm" lconv "github.com/lixu-any/go-tools/conv" "strings" ) var LXMYSQLCACHEDB string //默认缓存数据库 type QueryCacheConfig struct { SQL string //sql DBIndex string //指定数据库 CacheDB string //数据库缓存 Redis数据库索引 CacheName string //缓存的名字 Orm orm.Ormer //实例化 ORM Exexpire int //缓存过期时间 -1不使用缓存 } type QueryConfig struct { SQL string //sql DBIndex string //指定数据库 Orm orm.Ormer //实例化 ORM } // QueryWithCache 查询数据 func QueryWithCache(config QueryCacheConfig, result interface{}, args ...interface{}) (err error) { var cacheKey string if len(config.CacheName) > 0 { cacheKey = config.CacheName } else { cacheKey = "mysql::" + GenCacheKey(config.SQL, args) } if config.Exexpire == 0 { config.Exexpire = DEFAULT_EXPIRE } if config.CacheDB == "" { config.CacheDB = LXMYSQLCACHEDB } _redis := lxredis.LXredis{ Name: cacheKey, Db: config.CacheDB, } if config.Exexpire > 0 { if b, _ := _redis.IsExist(); b { str, _ := _redis.GET() if str != "" { // 如果缓存中有数据,则直接返回数据 err = json.Unmarshal([]byte(str), result) if err == nil { return } } } } if config.Orm == nil { config.Orm = orm.NewOrm() } if len(config.DBIndex) > 0 { config.Orm.Using(config.DBIndex) } if _, err = config.Orm.Raw(config.SQL).QueryRows(result); err != nil { if strings.Contains(err.Error(), "doesn't exist") { err = nil return } return } if config.Exexpire > 0 { _redis.Val = lconv.JsonEncode(result) _redis.SetTime(config.Exexpire) } return } // Query 查询数据 func Query(config QueryConfig, result interface{}, args ...interface{}) (err error) { if config.Orm == nil { config.Orm = orm.NewOrm() } if len(config.DBIndex) > 0 { config.Orm.Using(config.DBIndex) } if _, err = config.Orm.Raw(config.SQL).QueryRows(result); err != nil { if strings.Contains(err.Error(), "doesn't exist") { err = nil return } return } return } // FindOne 查询一条数据 func FindOne(config QueryConfig, result interface{}, args ...interface{}) (err error) { if config.Orm == nil { config.Orm = orm.NewOrm() } if len(config.DBIndex) > 0 { config.Orm.Using(config.DBIndex) } if err = config.Orm.Raw(config.SQL).QueryRow(result); err != nil { if strings.Contains(err.Error(), "doesn't exist") { err = nil return } return } return }