♻️ Refactor cache system with redis
🐛 Add lock to check in prevent multiple at the same time
This commit is contained in:
@ -10,7 +10,7 @@ namespace DysonNetwork.Sphere.Connection.Handlers;
|
||||
|
||||
public class MessageReadHandler(
|
||||
AppDatabase db,
|
||||
IMemoryCache cache,
|
||||
ICacheService cache,
|
||||
ChatRoomService crs,
|
||||
FlushBufferService buffer
|
||||
)
|
||||
@ -44,11 +44,9 @@ public class MessageReadHandler(
|
||||
return;
|
||||
}
|
||||
|
||||
ChatMember? sender;
|
||||
var cacheKey = string.Format(ChatMemberCacheKey, currentUser.Id, request.ChatRoomId);
|
||||
if (cache.TryGetValue(cacheKey, out ChatMember? cachedMember))
|
||||
sender = cachedMember;
|
||||
else
|
||||
var sender = await cache.GetAsync<ChatMember?>(cacheKey);
|
||||
if (sender is null)
|
||||
{
|
||||
sender = await db.ChatMembers
|
||||
.Where(m => m.AccountId == currentUser.Id && m.ChatRoomId == request.ChatRoomId)
|
||||
@ -56,9 +54,10 @@ public class MessageReadHandler(
|
||||
|
||||
if (sender != null)
|
||||
{
|
||||
var cacheOptions = new MemoryCacheEntryOptions()
|
||||
.SetAbsoluteExpiration(TimeSpan.FromMinutes(5));
|
||||
cache.Set(cacheKey, sender, cacheOptions);
|
||||
var chatRoomGroup = ChatRoomService.ChatRoomGroupPrefix + request.ChatRoomId;
|
||||
await cache.SetWithGroupsAsync(cacheKey, sender,
|
||||
[chatRoomGroup],
|
||||
TimeSpan.FromMinutes(5));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user