예제 #1
0
        private static void Main(string[] args)
        {
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
            LoggingServices.DefaultBackend = new ConsoleLoggingBackend();

            using (RedisServer.Start())
            {
                using (var connection = ConnectionMultiplexer.Connect("localhost:6380,abortConnect = False"))
                {
                    HandleConnectionEvents(connection);
                    RedisCachingBackendConfiguration configuration = GetConfiguration();

                    using (var backend = RedisCachingBackend.Create(connection, configuration))
                    {
                        using (RedisCacheDependencyGarbageCollector.Create(connection, configuration))
                        {
                            CachingServices.DefaultBackend = backend;
                            CachingServices.Profiles["StudentAccount"].AbsoluteExpiration =
                                TimeSpan.FromSeconds(10);
                            TestDirectInvalidation();
                            TestIndirectInvalidation();
                        }
                    }
                }
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
예제 #2
0
        private static void Main(string[] args)
        {
            AppDomain.CurrentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
            LoggingServices.DefaultBackend = new ConsoleLoggingBackend();

            // Uncomment the next line for detailed logging.
            // LoggingServices.DefaultBackend.DefaultVerbosity.SetMinimalLevel(LogLevel.Debug, LoggingRoles.Caching);

            using (RedisServer.Start())
            {
                using (var connection = ConnectionMultiplexer.Connect("localhost:6380,abortConnect = False"))
                {
                    connection.InternalError    += (sender, eventArgs) => Console.Error.WriteLine(eventArgs.Exception);
                    connection.ErrorMessage     += (sender, eventArgs) => Console.Error.WriteLine(eventArgs.Message);
                    connection.ConnectionFailed += (sender, eventArgs) => Console.Error.WriteLine(eventArgs.Exception);

                    var configuration = new RedisCachingBackendConfiguration
                    {
                        IsLocallyCached      = true,
                        SupportsDependencies = true
                    };

                    using (var backend = RedisCachingBackend.Create(connection, configuration))
                    {
                        // With Redis, we need at least one instance of the collection engine.
                        using (RedisCacheDependencyGarbageCollector.Create(connection, configuration))

                        {
                            CachingServices.DefaultBackend = backend;

                            // Configure the Account caching profile used in the AccountServices class.
                            CachingServices.Profiles["Account"].AbsoluteExpiration = TimeSpan.FromSeconds(10);

                            // Testing direct invalidation.
                            Console.WriteLine("Retrieving the customer for the 1st time should hit the database.");
                            CustomerServices.GetCustomer(1);
                            Console.WriteLine("Retrieving the customer for the 2nd time should NOT hit the database.");
                            CustomerServices.GetCustomer(1);
                            Console.WriteLine("This should invalidate the GetCustomer method.");
                            CustomerServices.UpdateCustomer(1, "New name");
                            Console.WriteLine("This should hit the database again because GetCustomer has been invalidated.");
                            CustomerServices.GetCustomer(1);

                            // Testing indirect invalidation (dependencies).
                            Console.WriteLine("Retrieving the account list for the 1st time should hit the database.");
                            AccountServices.GetAccountsOfCustomer(1);
                            Console.WriteLine("Retrieving the account list for the 2nt time should NOT hit the database.");
                            var accounts = AccountServices.GetAccountsOfCustomer(1);
                            Console.WriteLine("This should invalidate the accounts");
                            AccountServices.UpdateAccount(accounts.First());
                            Console.WriteLine(
                                "This should hit the database again because GetAccountsOfCustomer has been invalidated.");
                            AccountServices.GetAccountsOfCustomer(1);

                            Console.WriteLine("Done!");
                        }
                    }
                }
            }
        }
예제 #3
0
        static void Main(string[] args)
        {
            using (RedisServer.Start())
            {
                using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("localhost:6380,abortConnect = False"))
                {
                    RedisCachingBackendConfiguration configuration = new RedisCachingBackendConfiguration();

                    connection.ErrorMessage     += (sender, eventArgs) => Console.Error.WriteLine(eventArgs.Message);
                    connection.ConnectionFailed += (sender, eventArgs) => Console.Error.WriteLine(eventArgs.Exception);

                    using (var backend = new TwoLayerCachingBackendEnhancer(RedisCachingBackend.Create(connection, configuration)))
                        using (RedisCacheDependencyGarbageCollector.Create(connection, configuration)) // With Redis, we need at least one instance of the collection engine.
                        {
                            CachingServices.DefaultBackend = backend;
                            CachingServices.Profiles["Account"].AbsoluteExpiration = TimeSpan.FromSeconds(10);

                            // Testing direct invalidation.
                            Console.WriteLine("Retrieving the customer for the 1st time should hit the database.");
                            CustomerServices.GetCustomer(1);
                            Console.WriteLine("Retrieving the customer for the 2nd time should NOT hit the database.");
                            CustomerServices.GetCustomer(1);
                            Console.WriteLine("This should invalidate the GetCustomer method.");
                            CustomerServices.UpdateCustomer(1, "New name");
                            Console.WriteLine("This should hit the database again because GetCustomer has been invalidated.");
                            CustomerServices.GetCustomer(1);

                            // Testing indirect invalidation (dependencies).
                            Console.WriteLine("Retrieving the account list for the 1st time should hit the database.");
                            AccountServices.GetAccountsOfCustomer(1);
                            Console.WriteLine("Retrieving the account list for the 2nt time should NOT hit the database.");
                            var accounts = AccountServices.GetAccountsOfCustomer(1);
                            Console.WriteLine("This should invalidate the accounts");
                            AccountServices.UpdateAccount(accounts.First());
                            Console.WriteLine("This should hit the database again because GetAccountsOfCustomer has been invalidated.");
                            AccountServices.GetAccountsOfCustomer(1);

                            Console.WriteLine("Done!");
                        }
                }
            }
        }