AopCaching icon indicating copy to clipboard operation
AopCaching copied to clipboard

A aop cache library, No code intrusion on the cached method. Support memory and redis,redis support partition. And support bloom filter.

AopCaching

AopCaching

A aop cache library, No code intrusion on the cached method. Support memory and redis,redis support partition. And support bloom filter.

Note

The proxy method must be a virtual method or an interface.

Packages & Status

Core

Packages NuGet
AopCaching.Core NuGet package

Provider

Packages NuGet
AopCaching.InMemory NuGet package
AopCaching.Redis NuGet package

Injection

Packages NuGet
AopCaching.InMemory.Autofac NuGet package
AopCaching.InMemory.DependencyInjection NuGet package
AopCaching.Redis.Autofac NuGet package
AopCaching.Redis.DependencyInjection NuGet package

Dependencies

Packages Description
AspectCore An Aspect-Oriented Programming based cross platform framework for .NET Core and .NET Framework.Core support for aspect-interceptor,dependency injection integration , web applications , data validation , and more.
CSRedisCore A High-performance redis client.
BloomFilter.NetCore Library Bloom filters in C# with optional Redis-backing.

Usage

Use Autofac

public IServiceProvider ConfigureServices(IServiceCollection services)
		{
			services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddControllersAsServices();
			var builder = new ContainerBuilder();
			builder.Populate(services);

			builder.AddAopCacheInRedis(options =>
			{
				options.Endpoints = new[] { "localhost:6379,password=123456,defaultDatabase=1", "localhost:6380,password=123456,defaultDatabase=1" };
				options.Expiration = TimeSpan.FromMinutes(10);
                options.UsePartition = true;
				options.CacheMethodFilter = new CacheMethodFilter
				{
					IncludeService = new[] { "WebApplication.*Service" }
				};
				options.PreventPenetrationPolicy = new PreventPenetrationPolicy
				{
					BasicPolicy = new BasicPolicy
					{
						NoneResultKeyExpiration = TimeSpan.FromMinutes(10)
					},
					BloomFilterPolicy = new BloomFilterPolicy
					{
						Enable = true,
					}
				};
			});

			builder.RegisterType<CacheService>().PropertiesAutowired().SingleInstance();
			builder.RegisterAssemblyTypes(Assembly.GetEntryAssembly())
				.Where(t => t.Name.EndsWith("Controller"))
				.PropertiesAutowired().InstancePerLifetimeScope();
			ApplicationContainer = builder.Build();
			return new AutofacServiceProvider(ApplicationContainer);
		}

Use DependencyInjection

public IServiceProvider ConfigureServices(IServiceCollection services)
		{
			services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddControllersAsServices();
			services.AddAopCacheInRedis(options =>
			{
				options.Endpoints = new[] { "localhost:6379,password=123456,defaultDatabase=1", "localhost:6380,password=123456,defaultDatabase=1" };
				options.Expiration = TimeSpan.FromMinutes(10);
                options.UsePartition = true;
				options.CacheMethodFilter = new CacheMethodFilter
				{
					IncludeService = new[] { "WebApplication.*Service" }
				};
				options.PreventPenetrationPolicy = new PreventPenetrationPolicy
				{
					BasicPolicy = new BasicPolicy
					{
						NoneResultKeyExpiration = TimeSpan.FromMinutes(10)
					},
					BloomFilterPolicy = new BloomFilterPolicy
					{
						Enable = true,
					}
				};
			});

			services.AddSingleton<CacheService>();
			return services.BuildAspectInjectorProvider();
		}

If you want to use a different configuration on some methods, you can use custom attribute.

	public class CacheService
	{
		[AopCaching(Key = "GetTime:{0}", BloomFilter = AopCacheFunctionSwitch.Enable, Expiration = 30)]
		public virtual DateTime GetTime(int id)
		{
			return DateTime.Now;
		}
    }

Exclude methods

	public class CacheService
	{
		[NonAopCaching]
		public virtual DateTime GetTime(int id)
		{
			return DateTime.Now;
		}
    }