From d26a1b2090cc748fcbbedbb8f9437a12be6809f9 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 16 Jan 2024 10:20:57 +0800 Subject: [PATCH 1/2] feat: local cache --- pkg/rpccache/common.go | 20 ++++++++++++++++++++ pkg/rpccache/conversation.go | 4 +++- pkg/rpccache/friend.go | 4 +++- pkg/rpccache/group.go | 23 +++-------------------- 4 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 pkg/rpccache/common.go diff --git a/pkg/rpccache/common.go b/pkg/rpccache/common.go new file mode 100644 index 000000000..6dc826e30 --- /dev/null +++ b/pkg/rpccache/common.go @@ -0,0 +1,20 @@ +package rpccache + +func newListMap[V comparable](values []V, err error) (*listMap[V], error) { + if err != nil { + return nil, err + } + lm := &listMap[V]{ + List: values, + Map: make(map[V]struct{}, len(values)), + } + for _, value := range values { + lm.Map[value] = struct{}{} + } + return lm, nil +} + +type listMap[V comparable] struct { + List []V + Map map[V]struct{} +} diff --git a/pkg/rpccache/conversation.go b/pkg/rpccache/conversation.go index e5c28f464..45c37529b 100644 --- a/pkg/rpccache/conversation.go +++ b/pkg/rpccache/conversation.go @@ -19,7 +19,9 @@ func NewConversationLocalCache(client rpcclient.ConversationRpcClient, cli redis localcache.WithLocalSlotSize(lc.SlotSize), ), } - go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + if lc.Enable() { + go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + } return x } diff --git a/pkg/rpccache/friend.go b/pkg/rpccache/friend.go index 0e1faa78b..f1dec36cc 100644 --- a/pkg/rpccache/friend.go +++ b/pkg/rpccache/friend.go @@ -19,7 +19,9 @@ func NewFriendLocalCache(client rpcclient.FriendRpcClient, cli redis.UniversalCl localcache.WithLocalSlotSize(lc.SlotSize), ), } - go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + if lc.Enable() { + go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + } return x } diff --git a/pkg/rpccache/group.go b/pkg/rpccache/group.go index 4b9281366..4c3e32170 100644 --- a/pkg/rpccache/group.go +++ b/pkg/rpccache/group.go @@ -19,7 +19,9 @@ func NewGroupLocalCache(client rpcclient.GroupRpcClient, cli redis.UniversalClie localcache.WithLocalSlotSize(lc.SlotSize), ), } - go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + if lc.Enable() { + go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal) + } return x } @@ -28,25 +30,6 @@ type GroupLocalCache struct { local localcache.Cache[any] } -type listMap[V comparable] struct { - List []V - Map map[V]struct{} -} - -func newListMap[V comparable](values []V, err error) (*listMap[V], error) { - if err != nil { - return nil, err - } - lm := &listMap[V]{ - List: values, - Map: make(map[V]struct{}, len(values)), - } - for _, value := range values { - lm.Map[value] = struct{}{} - } - return lm, nil -} - func (g *GroupLocalCache) getGroupMemberIDs(ctx context.Context, groupID string) (val *listMap[string], err error) { log.ZDebug(ctx, "GroupLocalCache getGroupMemberIDs req", "groupID", groupID) defer func() { From 1afdd0bcf7c708b74a7ed84cb58f636deb007ed0 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 16 Jan 2024 11:15:28 +0800 Subject: [PATCH 2/2] feat: local cache --- internal/rpc/msg/send.go | 1 + internal/rpc/msg/verify.go | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/internal/rpc/msg/send.go b/internal/rpc/msg/send.go index 630b74a4a..b1052b192 100644 --- a/internal/rpc/msg/send.go +++ b/internal/rpc/msg/send.go @@ -144,6 +144,7 @@ func (m *msgServer) sendMsgNotification( } func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *pbmsg.SendMsgReq) (resp *pbmsg.SendMsgResp, err error) { + log.ZDebug(ctx, "sendMsgSingleChat return") if err := m.messageVerification(ctx, req); err != nil { return nil, err } diff --git a/internal/rpc/msg/verify.go b/internal/rpc/msg/verify.go index 9f6ca727a..792b9c3d6 100644 --- a/internal/rpc/msg/verify.go +++ b/internal/rpc/msg/verify.go @@ -16,6 +16,7 @@ package msg import ( "context" + "github.com/OpenIMSDK/tools/log" "math/rand" "strconv" "time" @@ -186,7 +187,8 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt( sessionType int, pb *msg.SendMsgReq, ) (bool, error) { - opt, err := m.User.GetUserGlobalMsgRecvOpt(ctx, userID) + defer log.ZDebug(ctx, "modifyMessageByUserMessageReceiveOpt return") + opt, err := m.User.GetUserGlobalMsgRecvOpt(ctx, userID) // todo local cache if err != nil { return false, err } @@ -202,7 +204,7 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt( return true, nil } // conversationID := utils.GetConversationIDBySessionType(conversationID, sessionType) - singleOpt, err := m.Conversation.GetSingleConversationRecvMsgOpt(ctx, userID, conversationID) + singleOpt, err := m.Conversation.GetSingleConversationRecvMsgOpt(ctx, userID, conversationID) // todo local cache if errs.ErrRecordNotFound.Is(err) { return true, nil } else if err != nil {