♻️ 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