From 8ee4ff7e8da9c2bf861b19a3fca7fcbb1131b4ee Mon Sep 17 00:00:00 2001 From: Michael Li Date: Tue, 12 Sep 2023 15:27:26 +0800 Subject: [PATCH] optimize cache logic for get unread message count --- internal/core/cache.go | 1 + internal/dao/cache/web.go | 4 ++++ internal/servants/base/events.go | 4 ++++ internal/servants/web/events.go | 4 ++++ 4 files changed, 13 insertions(+) diff --git a/internal/core/cache.go b/internal/core/cache.go index 80e1ff84..335a62ae 100644 --- a/internal/core/cache.go +++ b/internal/core/cache.go @@ -111,4 +111,5 @@ type WebCache interface { GetUnreadMsgCountResp(uid int64) ([]byte, error) PutUnreadMsgCountResp(uid int64, data []byte) error DelUnreadMsgCountResp(uid int64) error + ExistUnreadMsgCountResp(uid int64) bool } diff --git a/internal/dao/cache/web.go b/internal/dao/cache/web.go index 56a7df54..6db706c0 100644 --- a/internal/dao/cache/web.go +++ b/internal/dao/cache/web.go @@ -98,6 +98,10 @@ func (s *webCache) DelUnreadMsgCountResp(uid int64) error { return s.Delete(conf.KeyUnreadMsg.Get(uid)) } +func (s *webCache) ExistUnreadMsgCountResp(uid int64) bool { + return s.Exist(conf.KeyUnreadMsg.Get(uid)) +} + func newAppCache() *appCache { return &appCache{ cscExpire: conf.CacheSetting.CientSideCacheExpire, diff --git a/internal/servants/base/events.go b/internal/servants/base/events.go index 68af4957..545d3399 100644 --- a/internal/servants/base/events.go +++ b/internal/servants/base/events.go @@ -76,6 +76,10 @@ func (p *CacheRespEvent) Name() string { } func (p *CacheRespEvent) Action() error { + if p.ac.Exist(p.key) { + // do nothing + return nil + } resp := &joint.JsonResp{ Code: 0, Msg: "success", diff --git a/internal/servants/web/events.go b/internal/servants/web/events.go index f5b354df..f3879d5e 100644 --- a/internal/servants/web/events.go +++ b/internal/servants/web/events.go @@ -51,6 +51,10 @@ func (e *cacheUnreadMsgEvent) Name() string { } func (e *cacheUnreadMsgEvent) Action() error { + if e.wc.ExistUnreadMsgCountResp(e.uid) { + // do nothing + return nil + } count, err := e.ds.GetUnreadCount(e.uid) if err != nil { return fmt.Errorf("cacheUnreadMsgEvent action occurs error: %w", err)