package service import ( "github.com/hashicorp/golang-lru/v2/expirable" "strings" "time" ) type UserBaseInfo struct { UserId int NickName string SubUserIds []int } var userCache *expirable.LRU[string, *UserBaseInfo] func init() { //make cache with 5 minutes TTL and 100 max keys userCache = expirable.NewLRU[string, *UserBaseInfo](100, nil, time.Minute*1) //todo zq 暂时改成 1分钟 } func GetUserBaseCache(adminUserId string) *UserBaseInfo { cache, ok := userCache.Get(adminUserId) if !ok { userService := UserService{} userRecord, err := userService.GetUserInfo(adminUserId) if err != nil { return nil } var subIds []int if userRecord.SubUserIds != "" { subIds, _, err = userService.UUID2CrmUserId(strings.Split(userRecord.SubUserIds, ",")) if err != nil { return nil } } subIds = append(subIds, userRecord.ID) baseInfo := &UserBaseInfo{ UserId: userRecord.ID, NickName: userRecord.NickName, SubUserIds: subIds, } SetUserBaseCache(adminUserId, baseInfo) return baseInfo } return cache } func SetUserBaseCache(adminUserId string, user *UserBaseInfo) { _ = userCache.Add(adminUserId, user) }