From 5d59f8e55ad75170fbd590aabac1e7cc7e83f81b Mon Sep 17 00:00:00 2001 From: hujiebin Date: Tue, 29 Aug 2023 17:40:22 +0800 Subject: [PATCH] =?UTF-8?q?lru=E6=89=B9=E9=87=8F=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=88=BF=E9=97=B4=E8=AE=BF=E9=97=AE=E4=BA=BA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domain/cache/room_c/userRoomVisit.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/domain/cache/room_c/userRoomVisit.go b/domain/cache/room_c/userRoomVisit.go index f6d7d2a..16fcbec 100644 --- a/domain/cache/room_c/userRoomVisit.go +++ b/domain/cache/room_c/userRoomVisit.go @@ -6,6 +6,7 @@ import ( "fmt" "git.hilo.cn/hilo-common/mylogrus" "git.hilo.cn/hilo-common/resource/redisCli" + "github.com/bluele/gcache" redis2 "github.com/go-redis/redis/v8" "hilo-group/_const/redis_key" "strconv" @@ -76,23 +77,40 @@ func GetUserRoomVisit(userId uint64) (map[string]int64, error) { return result, nil } +var roomVisitCntCache = gcache.New(50000).LRU().Build() + // 批量获取房间访问人数 +// 带上lru func MGetRoomVisitCount(groupIds []string) (map[string]string, error) { - key := redis_key.GetPrefixRoomVisitCount() visit := make(map[string]string) if len(groupIds) <= 0 { return visit, nil } - res, err := redisCli.GetRedis().HMGet(context.Background(), key, groupIds...).Result() + + var miss []string + for _, groupId := range groupIds { + if data, err := roomVisitCntCache.Get(groupId); err == nil { + visit[groupId] = data.(string) + } else { + miss = append(miss, groupId) + } + } + if len(miss) <= 0 { + return visit, nil + } + + key := redis_key.GetPrefixRoomVisitCount() + res, err := redisCli.GetRedis().HMGet(context.Background(), key, miss...).Result() if err != nil { return visit, err } - if len(res) != len(groupIds) { - return visit, errors.New(fmt.Sprintf("MGetRoomVisitCount fail,miss match len,%v-%v", len(res), len(groupIds))) + if len(res) != len(miss) { + return visit, errors.New(fmt.Sprintf("MGetRoomVisitCount fail,miss match len,%v-%v", len(res), len(miss))) } - for i, groupId := range groupIds { + for i, groupId := range miss { if cnt, ok := res[i].(string); ok { visit[groupId] = cnt + _ = roomVisitCntCache.SetWithExpire(groupId, cnt, time.Minute*15) } } return visit, nil -- 2.22.0