예제 #1
0
        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
            {
            }
        }
예제 #2
0
        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));
                        }
                    });
                }
            }
        }