zhangqian
2023-10-13 13194e787d51e4ce07dfc35341d536fb5db7aaa3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package service
 
import (
    "github.com/hashicorp/golang-lru/v2/expirable"
    "time"
)
 
type userBaseInfo struct {
    UserId   int
    NickName string
}
 
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
        }
        baseInfo := &userBaseInfo{
            UserId:   userRecord.ID,
            NickName: userRecord.NickName,
        }
        SetUserBaseCache(adminUserId, baseInfo)
        return baseInfo
    }
    return userCache
}
 
func SetUserBaseCache(adminUserId string, user *userBaseInfo) {
    _ = userCache.Add(adminUserId, user)
}