package cacheApi import ( "epur-pay/model" "epur-pay/pkg/rds" "epur-pay/pkg/utils" "github.com/muesli/cache2go" "time" ) type User struct { Data *cache2go.CacheTable duplicate *User } func (p *User) Refresh() *User { p.duplicate = &User{} p.duplicate.Data = cache2go.Cache("userList") return p.duplicate } func (p *User) RefreshRow(u *model.User) *model.User { p.Data.Add(u.Uid, time.Duration(7*24*60*60)*time.Second, u) return u } func (p *User) RefreshBatchRow(u ...*model.User) { for index, _ := range u { p.RefreshRow(u[index]) } } func (p *User) RefreshSelectRow(uid int64) *model.User { user := model.User{} utils.DbErrSkipRecordNotFound(rds.DB.Raw(`select * from user where uid = ?`, uid).Scan(&user).Error) if user.Uid <= 0 { return nil } // 获取用户拥有的权限 utils.DbErrSkipRecordNotFound(rds.DB.Table(model.UserRole{}.TableName()).Select(`role_id`). Where(`uid = ?`, user.Uid).Scan(&user.RoleIds).Error) // 刷新缓存 p.RefreshRow(&user) return &user } func (p *User) RefreshSelectBatchRow(uid ...int64) { for _, item := range uid { p.RefreshSelectRow(item) } } func (p *User) Get(uid int64) *model.User { if row, err := p.Data.Value(uid); err == nil { return row.Data().(*model.User) } else { return p.RefreshSelectRow(uid) } }