public async Task PublishUpdateInRedis(string chanel, string message) { var subscriber = baseRedisProvider.GetSubscribers(); try { await subscriber.PublishAsync(new RedisChannel(chanel, RedisChannel.PatternMode.Literal), new RedisValue(message)); } catch { } }
public async Task SetAllSubscribersAsync() { var cacheDb = baseRedisProvider.GetDatabase(); var subscribers = baseRedisProvider.GetSubscribers(); var resultTypes = new List <Type>(); foreach (var type in Assembly.GetAssembly(typeof(Subscriber)).GetTypes()) { } using var scope = serviceProvider.GetService <IServiceScopeFactory>().CreateScope(); foreach (var type in resultTypes) { var cacheService = scope.ServiceProvider.GetRequiredService(type); string entityName = type.GetPropertyValue <string>("EntityName"); bool isEnabledSubscriber = type.GetPropertyValue <bool>("IsEnabledSubscriber"); if (isEnabledSubscriber) { await subscribers.SubscribeAsync(new RedisChannel(entityName, PatternMode.Literal), async (chanel, message) => { string strMessage = (string)message; logger.LogInformation(strMessage); var baseCache = await strMessage.FromJson <BaseCacheModel>(); var key = CacheKeyFactories.GenerateDynamicCacheKey(baseCache); var savedElement = await cacheDb.StringGetAsync(new RedisKey(key)); if (string.IsNullOrEmpty(savedElement)) { await cacheDb.StringSetAsync(new RedisKey(key), new RedisValue(message)); } else { await cacheDb.KeyDeleteAsync(new RedisKey(key)); await cacheDb.StringSetAsync(new RedisKey(key), new RedisValue(message)); } }); } } }