feat: local cache

This commit is contained in:
withchao 2024-01-15 16:02:34 +08:00
parent c9193302a8
commit ad5e4e1540
4 changed files with 41 additions and 9 deletions

View File

@ -10,13 +10,16 @@ import (
) )
func NewConversationLocalCache(client rpcclient.ConversationRpcClient, cli redis.UniversalClient) *ConversationLocalCache { func NewConversationLocalCache(client rpcclient.ConversationRpcClient, cli redis.UniversalClient) *ConversationLocalCache {
return &ConversationLocalCache{ lc := config.Config.LocalCache.Conversation
x := &ConversationLocalCache{
client: client, client: client,
local: localcache.New[any]( local: localcache.New[any](
localcache.WithLocalSlotNum(config.Config.LocalCache.Conversation.SlotNum), localcache.WithLocalSlotNum(lc.SlotNum),
localcache.WithLocalSlotSize(config.Config.LocalCache.Conversation.SlotSize), localcache.WithLocalSlotSize(lc.SlotSize),
), ),
} }
go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal)
return x
} }
type ConversationLocalCache struct { type ConversationLocalCache struct {

View File

@ -11,13 +11,16 @@ import (
) )
func NewFriendLocalCache(client rpcclient.FriendRpcClient, cli redis.UniversalClient) *FriendLocalCache { func NewFriendLocalCache(client rpcclient.FriendRpcClient, cli redis.UniversalClient) *FriendLocalCache {
return &FriendLocalCache{ lc := config.Config.LocalCache.Friend
x := &FriendLocalCache{
client: client, client: client,
local: localcache.New[any]( local: localcache.New[any](
localcache.WithLocalSlotNum(config.Config.LocalCache.Friend.SlotNum), localcache.WithLocalSlotNum(lc.SlotNum),
localcache.WithLocalSlotSize(config.Config.LocalCache.Friend.SlotSize), localcache.WithLocalSlotSize(lc.SlotSize),
), ),
} }
go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal)
return x
} }
type FriendLocalCache struct { type FriendLocalCache struct {

View File

@ -10,13 +10,16 @@ import (
) )
func NewGroupLocalCache(client rpcclient.GroupRpcClient, cli redis.UniversalClient) *GroupLocalCache { func NewGroupLocalCache(client rpcclient.GroupRpcClient, cli redis.UniversalClient) *GroupLocalCache {
return &GroupLocalCache{ lc := config.Config.LocalCache.Group
x := &GroupLocalCache{
client: client, client: client,
local: localcache.New[any]( local: localcache.New[any](
localcache.WithLocalSlotNum(config.Config.LocalCache.Group.SlotNum), localcache.WithLocalSlotNum(lc.SlotNum),
localcache.WithLocalSlotSize(config.Config.LocalCache.Group.SlotSize), localcache.WithLocalSlotSize(lc.SlotSize),
), ),
} }
go subscriberRedisDeleteCache(context.Background(), cli, lc.Topic, x.local.DelLocal)
return x
} }
type GroupLocalCache struct { type GroupLocalCache struct {

View File

@ -0,0 +1,23 @@
package rpccache
import (
"context"
"encoding/json"
"github.com/OpenIMSDK/tools/log"
"github.com/redis/go-redis/v9"
)
func subscriberRedisDeleteCache(ctx context.Context, client redis.UniversalClient, channel string, del func(ctx context.Context, key ...string)) {
for message := range client.Subscribe(ctx, channel).Channel() {
log.ZDebug(ctx, "subscriberRedisDeleteCache", "channel", channel, "payload", message.Payload)
var keys []string
if err := json.Unmarshal([]byte(message.Payload), &keys); err != nil {
log.ZError(ctx, "subscriberRedisDeleteCache json.Unmarshal error", err)
continue
}
if len(keys) == 0 {
continue
}
del(ctx, keys...)
}
}