You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Open-IM-Server/pkg/common/db/cache/redis.go

471 lines
18 KiB

2 years ago
package cache
import (
2 years ago
"OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant"
2 years ago
"OpenIM/pkg/common/tracelog"
2 years ago
pbChat "OpenIM/pkg/proto/msg"
pbRtc "OpenIM/pkg/proto/rtc"
"OpenIM/pkg/proto/sdkws"
"OpenIM/pkg/utils"
"context"
"errors"
"fmt"
2 years ago
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
2 years ago
"strconv"
"time"
2 years ago
"github.com/go-redis/redis/v8"
)
const (
userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq
appleDeviceToken = "DEVICE_TOKEN"
userMinSeq = "REDIS_USER_MIN_SEQ:"
2 years ago
getuiToken = "GETUI_TOKEN"
getuiTaskID = "GETUI_TASK_ID"
messageCache = "MESSAGE_CACHE:"
signalCache = "SIGNAL_CACHE:"
signalListCache = "SIGNAL_LIST_CACHE:"
FcmToken = "FCM_TOKEN:"
groupUserMinSeq = "GROUP_USER_MIN_SEQ:"
groupMaxSeq = "GROUP_MAX_SEQ:"
groupMinSeq = "GROUP_MIN_SEQ:"
sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:"
userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:"
exTypeKeyLocker = "EX_LOCK:"
uidPidToken = "UID_PID_TOKEN_STATUS:"
2 years ago
SignalListCache = "SIGNAL_LIST_CACHE:"
SignalCache = "SIGNAL_CACHE:"
)
2 years ago
type Cache interface {
2 years ago
IncrUserSeq(ctx context.Context, userID string) (int64, error)
GetUserMaxSeq(ctx context.Context, userID string) (int64, error)
SetUserMaxSeq(ctx context.Context, userID string, maxSeq int64) error
SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error)
GetUserMinSeq(ctx context.Context, userID string) (int64, error)
SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error)
GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (int64, error)
GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error)
2 years ago
GetGroupMinSeq(ctx context.Context, groupID string) (int64, error)
2 years ago
IncrGroupMaxSeq(ctx context.Context, groupID string) (int64, error)
SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq int64) error
SetGroupMinSeq(ctx context.Context, groupID string, minSeq int64) error
2 years ago
AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error
GetTokensWithoutError(ctx context.Context, userID, platformID string) (map[string]int, error)
2 years ago
SetTokenMapByUidPid(ctx context.Context, userID string, platform string, m map[string]int) error
DeleteTokenByUidPid(ctx context.Context, userID string, platform string, fields []string) error
2 years ago
GetMessagesBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error)
2 years ago
SetMessageToCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) (int, error)
DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) error
2 years ago
CleanUpOneUserAllMsg(ctx context.Context, userID string) error
2 years ago
HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error)
2 years ago
GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *sdkws.SignalInviteReq, err error)
GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error)
2 years ago
DelUserSignalList(ctx context.Context, userID string) error
2 years ago
DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error
2 years ago
SetGetuiToken(ctx context.Context, token string, expireTime int64) error
GetGetuiToken(ctx context.Context) (string, error)
SetGetuiTaskID(ctx context.Context, taskID string, expireTime int64) error
GetGetuiTaskID(ctx context.Context) (string, error)
2 years ago
SetSendMsgStatus(ctx context.Context, id string, status int32) error
GetSendMsgStatus(ctx context.Context, id string) (int32, error)
2 years ago
SetFcmToken(ctx context.Context, account string, platformID int, fcmToken string, expireTime int64) (err error)
GetFcmToken(ctx context.Context, account string, platformID int) (string, error)
DelFcmToken(ctx context.Context, account string, platformID int) error
IncrUserBadgeUnreadCountSum(ctx context.Context, userID string) (int, error)
SetUserBadgeUnreadCountSum(ctx context.Context, userID string, value int) error
GetUserBadgeUnreadCountSum(ctx context.Context, userID string) (int, error)
JudgeMessageReactionEXISTS(ctx context.Context, clientMsgID string, sessionType int32) (bool, error)
GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error)
DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error
SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error)
GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error)
SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error
LockMessageTypeKey(ctx context.Context, clientMsgID string, TypeKey string) error
UnLockMessageTypeKey(ctx context.Context, clientMsgID string, TypeKey string) error
2 years ago
}
2 years ago
func NewCache(client redis.UniversalClient) Cache {
return &cache{rdb: client}
2 years ago
}
2 years ago
type cache struct {
2 years ago
rdb redis.UniversalClient
2 years ago
}
2 years ago
func (c *cache) IncrUserSeq(ctx context.Context, userID string) (int64, error) {
return utils.Wrap2(c.rdb.Get(ctx, userIncrSeq+userID).Int64())
2 years ago
}
2 years ago
func (c *cache) GetUserMaxSeq(ctx context.Context, userID string) (int64, error) {
return utils.Wrap2(c.rdb.Get(ctx, userIncrSeq+userID).Int64())
2 years ago
}
2 years ago
func (c *cache) SetUserMaxSeq(ctx context.Context, userID string, maxSeq int64) error {
return utils.Wrap1(c.rdb.Set(ctx, userIncrSeq+userID, maxSeq, 0).Err())
}
2 years ago
func (c *cache) SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) {
return utils.Wrap1(c.rdb.Set(ctx, userMinSeq+userID, minSeq, 0).Err())
}
2 years ago
func (c *cache) GetUserMinSeq(ctx context.Context, userID string) (int64, error) {
return utils.Wrap2(c.rdb.Get(ctx, userMinSeq+userID).Int64())
}
2 years ago
func (c *cache) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) {
2 years ago
key := groupUserMinSeq + "g:" + groupID + "u:" + userID
2 years ago
return utils.Wrap1(c.rdb.Set(ctx, key, minSeq, 0).Err())
}
2 years ago
func (c *cache) GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (int64, error) {
key := groupUserMinSeq + "g:" + groupID + "u:" + userID
return utils.Wrap2(c.rdb.Get(ctx, key).Int64())
}
2 years ago
func (c *cache) GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) {
return utils.Wrap2(c.rdb.Get(ctx, groupMaxSeq+groupID).Int64())
}
2 years ago
func (c *cache) GetGroupMinSeq(ctx context.Context, groupID string) (int64, error) {
return utils.Wrap2(c.rdb.Get(ctx, groupMinSeq+groupID).Int64())
2 years ago
}
2 years ago
func (c *cache) IncrGroupMaxSeq(ctx context.Context, groupID string) (int64, error) {
2 years ago
key := groupMaxSeq + groupID
2 years ago
seq, err := c.rdb.Incr(ctx, key).Uint64()
2 years ago
return int64(seq), utils.Wrap1(err)
2 years ago
}
2 years ago
func (c *cache) SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq int64) error {
2 years ago
key := groupMaxSeq + groupID
2 years ago
return utils.Wrap1(c.rdb.Set(ctx, key, maxSeq, 0).Err())
2 years ago
}
2 years ago
func (c *cache) SetGroupMinSeq(ctx context.Context, groupID string, minSeq int64) error {
2 years ago
key := groupMinSeq + groupID
2 years ago
return utils.Wrap1(c.rdb.Set(ctx, key, minSeq, 0).Err())
2 years ago
}
2 years ago
func (c *cache) AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error {
2 years ago
key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID)
2 years ago
return utils.Wrap1(c.rdb.HSet(ctx, key, token, flag).Err())
}
2 years ago
func (c *cache) GetTokensWithoutError(ctx context.Context, userID, platformID string) (map[string]int, error) {
key := uidPidToken + userID + ":" + platformID
2 years ago
m, err := c.rdb.HGetAll(ctx, key).Result()
2 years ago
if err != nil {
return nil, utils.Wrap1(err)
}
mm := make(map[string]int)
for k, v := range m {
mm[k] = utils.StringToInt(v)
}
2 years ago
return mm, nil
}
2 years ago
func (c *cache) SetTokenMapByUidPid(ctx context.Context, userID string, platform string, m map[string]int) error {
key := uidPidToken + userID + ":" + platform
2 years ago
mm := make(map[string]interface{})
for k, v := range m {
mm[k] = v
}
2 years ago
return utils.Wrap1(c.rdb.HSet(ctx, key, mm).Err())
}
2 years ago
2 years ago
func (c *cache) DeleteTokenByUidPid(ctx context.Context, userID string, platform string, fields []string) error {
key := uidPidToken + userID + ":" + platform
return utils.Wrap1(c.rdb.HDel(ctx, key, fields...).Err())
}
2 years ago
func (c *cache) GetMessagesBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error) {
2 years ago
var errResult error
for _, v := range seqList {
//MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1
key := messageCache + userID + "_" + strconv.Itoa(int(v))
2 years ago
result, err := c.rdb.Get(ctx, key).Result()
2 years ago
if err != nil {
2 years ago
errResult = err
failedSeqList = append(failedSeqList, v)
2 years ago
} else {
2 years ago
msg := sdkws.MsgData{}
2 years ago
err = jsonpb.UnmarshalString(result, &msg)
if err != nil {
2 years ago
errResult = err
failedSeqList = append(failedSeqList, v)
} else {
2 years ago
seqMsg = append(seqMsg, &msg)
}
2 years ago
}
}
2 years ago
return seqMsg, failedSeqList, errResult
}
2 years ago
func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) (int, error) {
pipe := c.rdb.Pipeline()
2 years ago
var failedList []pbChat.MsgDataToMQ
for _, msg := range msgList {
key := messageCache + userID + "_" + strconv.Itoa(int(msg.MsgData.Seq))
s, err := utils.Pb2String(msg.MsgData)
if err != nil {
2 years ago
return 0, utils.Wrap1(err)
}
err = pipe.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err()
if err != nil {
2 years ago
return 0, utils.Wrap1(err)
}
}
2 years ago
if len(failedList) != 0 {
return len(failedList), errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedList, tracelog.GetOperationID(ctx)))
}
_, err := pipe.Exec(ctx)
2 years ago
return 0, err
}
2 years ago
2 years ago
func (c *cache) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) error {
2 years ago
for _, msg := range msgList {
2 years ago
if err := c.rdb.Del(ctx, messageCache+userID+"_"+strconv.Itoa(int(msg.MsgData.Seq))).Err(); err != nil {
2 years ago
return utils.Wrap1(err)
2 years ago
}
}
2 years ago
return nil
}
2 years ago
func (c *cache) CleanUpOneUserAllMsg(ctx context.Context, userID string) error {
key := messageCache + userID + "_" + "*"
2 years ago
vals, err := c.rdb.Keys(ctx, key).Result()
2 years ago
if err == redis.Nil {
return nil
}
if err != nil {
2 years ago
return utils.Wrap1(err)
}
2 years ago
for _, v := range vals {
2 years ago
if err := c.rdb.Del(ctx, v).Err(); err != nil {
2 years ago
return utils.Wrap1(err)
}
}
return nil
}
2 years ago
func (c *cache) HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) {
req := &pbRtc.SignalReq{}
if err := proto.Unmarshal(msg.Content, req); err != nil {
2 years ago
return false, utils.Wrap1(err)
}
2 years ago
var inviteeUserIDList []string
2 years ago
var isInviteSignal bool
switch signalInfo := req.Payload.(type) {
case *pbRtc.SignalReq_Invite:
2 years ago
inviteeUserIDList = signalInfo.Invite.Invitation.InviteeUserIDList
2 years ago
isInviteSignal = true
case *pbRtc.SignalReq_InviteInGroup:
2 years ago
inviteeUserIDList = signalInfo.InviteInGroup.Invitation.InviteeUserIDList
2 years ago
isInviteSignal = true
2 years ago
if !utils.Contain(pushToUserID, inviteeUserIDList...) {
2 years ago
return false, nil
}
2 years ago
case *pbRtc.SignalReq_HungUp, *pbRtc.SignalReq_Cancel, *pbRtc.SignalReq_Reject, *pbRtc.SignalReq_Accept:
2 years ago
return false, utils.Wrap1(errors.New("signalInfo do not need offlinePush"))
default:
2 years ago
return false, nil
}
2 years ago
if isInviteSignal {
2 years ago
for _, userID := range inviteeUserIDList {
2 years ago
timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout)
if err != nil {
2 years ago
return false, utils.Wrap1(err)
2 years ago
}
2 years ago
keyList := SignalListCache + userID
2 years ago
err = c.rdb.LPush(ctx, keyList, msg.ClientMsgID).Err()
2 years ago
if err != nil {
2 years ago
return false, utils.Wrap1(err)
2 years ago
}
2 years ago
err = c.rdb.Expire(ctx, keyList, time.Duration(timeout)*time.Second).Err()
2 years ago
if err != nil {
2 years ago
return false, utils.Wrap1(err)
2 years ago
}
2 years ago
key := SignalCache + msg.ClientMsgID
2 years ago
err = c.rdb.Set(ctx, key, msg.Content, time.Duration(timeout)*time.Second).Err()
2 years ago
if err != nil {
2 years ago
return false, utils.Wrap1(err)
2 years ago
}
}
}
2 years ago
return true, nil
}
2 years ago
func (c *cache) GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *sdkws.SignalInviteReq, err error) {
bytes, err := c.rdb.Get(ctx, SignalCache+clientMsgID).Bytes()
if err != nil {
2 years ago
return nil, utils.Wrap1(err)
}
2 years ago
req := &sdkws.SignalReq{}
if err = proto.Unmarshal(bytes, req); err != nil {
2 years ago
return nil, utils.Wrap1(err)
}
2 years ago
invitationInfo = &sdkws.SignalInviteReq{}
switch req2 := req.Payload.(type) {
case *pbRtc.SignalReq_Invite:
invitationInfo.Invitation = req2.Invite.Invitation
2 years ago
invitationInfo.OpUserID = req2.Invite.OpUserID
case *pbRtc.SignalReq_InviteInGroup:
invitationInfo.Invitation = req2.InviteInGroup.Invitation
2 years ago
invitationInfo.OpUserID = req2.InviteInGroup.OpUserID
}
2 years ago
return invitationInfo, nil
}
2 years ago
func (c *cache) GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error) {
key, err := c.rdb.LPop(ctx, SignalListCache+userID).Result()
if err != nil {
2 years ago
return nil, utils.Wrap1(err)
}
2 years ago
invitationInfo, err = c.GetSignalInvitationInfoByClientMsgID(ctx, key)
2 years ago
if err != nil {
2 years ago
return nil, err
2 years ago
}
2 years ago
return invitationInfo, utils.Wrap1(c.DelUserSignalList(ctx, userID))
2 years ago
}
2 years ago
func (c *cache) DelUserSignalList(ctx context.Context, userID string) error {
return utils.Wrap1(c.rdb.Del(ctx, SignalListCache+userID).Err())
}
2 years ago
func (c *cache) DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error {
for _, seq := range seqList {
2 years ago
key := messageCache + userID + "_" + strconv.Itoa(int(seq))
2 years ago
result, err := c.rdb.Get(ctx, key).Result()
2 years ago
if err != nil {
2 years ago
if err == redis.Nil {
2 years ago
continue
2 years ago
}
2 years ago
return utils.Wrap1(err)
2 years ago
}
2 years ago
var msg sdkws.MsgData
2 years ago
if err := jsonpb.UnmarshalString(result, &msg); err != nil {
return err
}
msg.Status = constant.MsgDeleted
s, err := utils.Pb2String(&msg)
if err != nil {
2 years ago
return utils.Wrap1(err)
}
2 years ago
if err := c.rdb.Set(ctx, key, s, time.Duration(config.Config.MsgCacheTimeout)*time.Second).Err(); err != nil {
2 years ago
return utils.Wrap1(err)
}
}
2 years ago
return nil
}
2 years ago
2 years ago
func (c *cache) SetGetuiToken(ctx context.Context, token string, expireTime int64) error {
return utils.Wrap1(c.rdb.Set(ctx, getuiToken, token, time.Duration(expireTime)*time.Second).Err())
2 years ago
}
2 years ago
func (c *cache) GetGetuiToken(ctx context.Context) (string, error) {
return utils.Wrap2(c.rdb.Get(ctx, getuiToken).Result())
2 years ago
}
2 years ago
2 years ago
func (c *cache) SetGetuiTaskID(ctx context.Context, taskID string, expireTime int64) error {
return utils.Wrap1(c.rdb.Set(ctx, getuiTaskID, taskID, time.Duration(expireTime)*time.Second).Err())
2 years ago
}
2 years ago
func (c *cache) GetGetuiTaskID(ctx context.Context) (string, error) {
return utils.Wrap2(c.rdb.Get(ctx, getuiTaskID).Result())
2 years ago
}
2 years ago
func (c *cache) SetSendMsgStatus(ctx context.Context, id string, status int32) error {
return utils.Wrap1(c.rdb.Set(ctx, sendMsgFailedFlag+id, status, time.Hour*24).Err())
2 years ago
}
2 years ago
func (c *cache) GetSendMsgStatus(ctx context.Context, id string) (int32, error) {
result, err := c.rdb.Get(ctx, sendMsgFailedFlag+id).Int()
2 years ago
return int32(result), utils.Wrap1(err)
2 years ago
}
2 years ago
2 years ago
func (c *cache) SetFcmToken(ctx context.Context, account string, platformID int, fcmToken string, expireTime int64) (err error) {
return utils.Wrap1(c.rdb.Set(ctx, FcmToken+account+":"+strconv.Itoa(platformID), fcmToken, time.Duration(expireTime)*time.Second).Err())
2 years ago
}
2 years ago
func (c *cache) GetFcmToken(ctx context.Context, account string, platformID int) (string, error) {
return utils.Wrap2(c.rdb.Get(ctx, FcmToken+account+":"+strconv.Itoa(platformID)).Result())
2 years ago
}
2 years ago
func (c *cache) DelFcmToken(ctx context.Context, account string, platformID int) error {
return utils.Wrap1(c.rdb.Del(ctx, FcmToken+account+":"+strconv.Itoa(platformID)).Err())
}
2 years ago
func (c *cache) IncrUserBadgeUnreadCountSum(ctx context.Context, userID string) (int, error) {
seq, err := c.rdb.Incr(ctx, userBadgeUnreadCountSum+userID).Result()
2 years ago
return int(seq), utils.Wrap1(err)
}
2 years ago
2 years ago
func (c *cache) SetUserBadgeUnreadCountSum(ctx context.Context, userID string, value int) error {
return utils.Wrap1(c.rdb.Set(ctx, userBadgeUnreadCountSum+userID, value, 0).Err())
2 years ago
}
2 years ago
2 years ago
func (c *cache) GetUserBadgeUnreadCountSum(ctx context.Context, userID string) (int, error) {
return utils.Wrap2(c.rdb.Get(ctx, userBadgeUnreadCountSum+userID).Int())
2 years ago
}
2 years ago
2 years ago
func (c *cache) LockMessageTypeKey(ctx context.Context, clientMsgID string, TypeKey string) error {
2 years ago
key := exTypeKeyLocker + clientMsgID + "_" + TypeKey
2 years ago
return utils.Wrap1(c.rdb.SetNX(ctx, key, 1, time.Minute).Err())
2 years ago
}
2 years ago
func (c *cache) UnLockMessageTypeKey(ctx context.Context, clientMsgID string, TypeKey string) error {
2 years ago
key := exTypeKeyLocker + clientMsgID + "_" + TypeKey
2 years ago
return utils.Wrap1(c.rdb.Del(ctx, key).Err())
2 years ago
}
2 years ago
func (c *cache) getMessageReactionExPrefix(clientMsgID string, sessionType int32) string {
2 years ago
switch sessionType {
case constant.SingleChatType:
return "EX_SINGLE_" + clientMsgID
case constant.GroupChatType:
return "EX_GROUP_" + clientMsgID
case constant.SuperGroupChatType:
return "EX_SUPER_GROUP_" + clientMsgID
case constant.NotificationChatType:
return "EX_NOTIFICATION" + clientMsgID
}
return ""
}
2 years ago
2 years ago
func (c *cache) JudgeMessageReactionEXISTS(ctx context.Context, clientMsgID string, sessionType int32) (bool, error) {
n, err := c.rdb.Exists(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType)).Result()
2 years ago
if err != nil {
return false, utils.Wrap(err, "")
}
return n > 0, nil
}
2 years ago
func (c *cache) SetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey, value string) error {
return utils.Wrap1(c.rdb.HSet(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType), typeKey, value).Err())
2 years ago
}
2 years ago
func (c *cache) SetMessageReactionExpire(ctx context.Context, clientMsgID string, sessionType int32, expiration time.Duration) (bool, error) {
return utils.Wrap2(c.rdb.Expire(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType), expiration).Result())
2 years ago
}
2 years ago
func (c *cache) GetMessageTypeKeyValue(ctx context.Context, clientMsgID string, sessionType int32, typeKey string) (string, error) {
return utils.Wrap2(c.rdb.HGet(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType), typeKey).Result())
2 years ago
}
2 years ago
func (c *cache) GetOneMessageAllReactionList(ctx context.Context, clientMsgID string, sessionType int32) (map[string]string, error) {
return utils.Wrap2(c.rdb.HGetAll(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType)).Result())
2 years ago
}
2 years ago
func (c *cache) DeleteOneMessageKey(ctx context.Context, clientMsgID string, sessionType int32, subKey string) error {
return utils.Wrap1(c.rdb.HDel(ctx, c.getMessageReactionExPrefix(clientMsgID, sessionType), subKey).Err())
2 years ago
}