Coravel provides you with an easy to use API for caching in your .NET Core applications.

By default, it uses an in-memory cache.

Coravel also provides some database drivers for more robust scenarios.


In Startup.ConfigureServices():


This will enable in-memory (RAM) caching.

To use caching, inject Coravel.Cache.Interfaces.ICache via dependency injection.

private ICache _cache;

public CacheController(ICache cache)
    this._cache = cache;



Remember will remember your cached item for the duration you specify.

Remember requires that you specify:

  • A cache key for this specific item
  • A method that returns the data you want cached (of any type)
  • A TimeSpan to indicate how long the item will be cached

For example:

string BigDataLocalFunction() 
    return "Some Big Data";

this._cache.Remember("BigDataCacheKey", BigDataLocalFunction, TimeSpan.FromMinutes(10));


Multiple Calls Does Not Invalidate Cache

Calling Remember a second (or more times) will not invalidate the cache. The cached items will last as long as your code specified when using this method. This enables the usage of the method to be simple and easy.


It's Remember, but async:

async SomeType BigDataLocalFunctionAsync() 
    // ... Doing some stuff ... 
    return await SomeCostlyDbCall();

await this._cache.RememberAsync("BigDataCacheKey", BigDataLocalFunctionAsync, TimeSpan.FromMinutes(10));

Note about cache invalidation from Remember applies.


Similar to Remember, but your item will be cached indefinitely.

this._cache.Forever("BigDataCacheKey", BigDataLocalFunction);

Note about cache invalidation from Remember applies.


It's Forever, but async:

await this._cache.ForeverAsync("BigDataCacheKey", BigDataLocalFunctionAsync);

Note about cache invalidation from Remember applies.


Will tell you if a non-expired key exists in the cache.

bool hasKey = await this._cache.HasAsync("BigDataCacheKey");


Get a specific value from the cache.


Will throw an exception if the key has expired. This is usually used in conjunction with HasAsync.

string bigDataValue = await this._cache.GetAsync<string>("BigDataCacheKey");


Flush will clear your entire cache.



Forget will clear a specific cache entry by key.


Database Drivers

By default, an in-memory caching driver is used. Coravel also offers drivers that will cache your data to a database!


This allows multiple servers or application instances (e.g. load-balancing, etc.) to share the same cache. It can also alleviate the extra memory required by your application instance(s) when using the in-memory driver.

SQL Server

Install the NuGet package Coravel.Cache.SQLServer.

Next, in Startup.cs in the ConfigureServices() method:


The driver will automatically create the table dbo.CoravelCacheStore to be used for caching.


Install the NuGet package Coravel.Cache.PostgreSQL.

Next, in Startup.cs in the ConfigureServices() method:


The driver will automatically create the table public.CoravelCacheStore to be used for caching.

Custom Drivers

If you wish, you can create your own cache driver that extends Coravel.Cache.Interfaces.ICache. Maybe you want to use start using a Redis store?

First, implement a class that extends the ICache interface.

Next, to register your driver to be used, just pass it into the AddCache method:

services.AddCache(new RedisCache());

// Or, if you need the service provider to create your object:
services.AddCache(provider => new RedisCache(provider.GetService<ISomeRegisteredInterface>()));