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*5) } func GetUserBaseCache(adminUserId string) *UserBaseInfo { userCache, ok := userCache.Get(adminUserId) if !ok { userService := UserService{} userRecord, err := userService.GetUserInfo(adminUserId) if err != nil { return nil } subIds, _, err := userService.UUID2CrmUserId(strings.Split(userRecord.SubUserIds, ",")) subIds = append(subIds, userRecord.ID) if err != nil { return nil } baseInfo := &UserBaseInfo{ UserId: userRecord.ID, NickName: userRecord.NickName, SubUserIds: subIds, } SetUserBaseCache(adminUserId, baseInfo) return baseInfo } return userCache } func SetUserBaseCache(adminUserId string, user *UserBaseInfo) { _ = userCache.Add(adminUserId, user) }