Rystem.RepositoryFramework.Cache 6.0.0-rc.1

This is a prerelease version of Rystem.RepositoryFramework.Cache.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Rystem.RepositoryFramework.Cache --version 6.0.0-rc.1
                    
NuGet\Install-Package Rystem.RepositoryFramework.Cache -Version 6.0.0-rc.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rystem.RepositoryFramework.Cache" Version="6.0.0-rc.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Rystem.RepositoryFramework.Cache" Version="6.0.0-rc.1" />
                    
Directory.Packages.props
<PackageReference Include="Rystem.RepositoryFramework.Cache" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Rystem.RepositoryFramework.Cache --version 6.0.0-rc.1
                    
#r "nuget: Rystem.RepositoryFramework.Cache, 6.0.0-rc.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Rystem.RepositoryFramework.Cache@6.0.0-rc.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Rystem.RepositoryFramework.Cache&version=6.0.0-rc.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Rystem.RepositoryFramework.Cache&version=6.0.0-rc.1&prerelease
                    
Install as a Cake Tool

What is Rystem?

Cache

Examples

You can add a repository (with default blob integration for instance) and after attack an in memory cache for all methods. The RefreshTime is a property that adds an Expiration date to the cached value, in the example below you can see that after 20 seconds the in memory cache requests again to the repository pattern a new value for each key. The Methods is a flag that allows to setup what operations have to be cached.

Query → query will be cached with this key

var keyAsString = $"{nameof(RepositoryMethods.Query)}_{typeof(T).Name}_{FactoryName}_{filter.ToKey()}";

Operation → operation will be cached with this key

var keyAsString = $"{nameof(RepositoryMethods.Operation)}_{operation.Name}_{typeof(T).Name}_{FactoryName}_{filter.ToKey()}";

Get → query will be cached with this key

var keyAsString = $"{nameof(RepositoryMethods.Get)}_{typeof(T).Name}_{FactoryName}_{key.AsString()}";

Exist → query will be cached with this key

var keyAsString = $"{nameof(RepositoryMethod.Exist)}_{typeof(T).Name}_{FactoryName}_{key.AsString()}";

Now you can understand the special behavior for commands. If you set Insert and/or Update and/or Delete, during any command if you allowed it for each command automatically the framework will update the cache value, with updated or inserted value or removing the deleted value. The code below allows everything

x.Methods = RepositoryMethod.All

In the example below you're setting up the following behavior: setting up a cache only for Get operation, and update the Get cache when exists a new Insert or an Update, or a removal when Delete operation were perfomed.

x.Methods = RepositoryMethod.Get | RepositoryMethod.Insert | RepositoryMethod.Update | RepositoryMethod.Delete

Setup in DI

services
    .AddRepository<Plant, int>(settings =>
    {
        settings
            .WithInMemory();
        settings
            .WithInMemoryCache(x =>
            {
                x.ExpiringTime = TimeSpan.FromSeconds(1);
                x.Methods = RepositoryMethods.All;
            });
    });

Usage

You always will find the same interface. For instance

IRepository<Plant, int> repository

or if you added a query pattern or command pattern

IQuery<Plant, int> query 
ICommand<Plant, int> command

Distributed Cache

Based on this link you may use the standard interface IDistributedCache instead of create a custom IDistributedCache<T, TKey, TState>. For instance you may choose between three libraries: Distributed SQL Server cache, Distributed Redis cache, Distributed NCache cache. You need to add the cache

builder.Services.AddStackExchangeRedisCache(options =>
 {
     options.Configuration = builder.Configuration.GetConnectionString("MyRedisConStr");
     options.InstanceName = "SampleInstance";
 });

then you add the IDistributedCache implementation to your repository patterns or CQRS.

.AddRepository<Country, CountryKey>(builder =>
{
    builder
        .WithInMemory(inMemoryBuilder =>
        {
            inMemoryBuilder
                .PopulateWithRandomData(NumberOfEntries, NumberOfEntries);
        });
    builder
        .WithDistributedCache(distributedCacheBuilder =>
        {
            distributedCacheBuilder.ExpiringTime = TimeSpan.FromSeconds(10);
        });
});

or a mix of them

.AddRepository<Country, CountryKey>(builder =>
{
    builder
        .WithInMemory(inMemoryBuilder =>
        {
            inMemoryBuilder
                .PopulateWithRandomData(NumberOfEntries, NumberOfEntries);
        });
    builder
        .WithInMemoryCache(inMemoryCacheBuilder =>
        {
            inMemoryCacheBuilder.ExpiringTime = TimeSpan.FromSeconds(10);
        })
        .WithDistributedCache(distributedCacheBuilder =>
        {
            distributedCacheBuilder.ExpiringTime = TimeSpan.FromSeconds(10);
        });
});

and as always you will use the standard interface that is automatically integrated in the repository flow.

IRepository<User, string> repository;

The same is valid for ICommand and IQuery.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Rystem.RepositoryFramework.Cache:

Package Downloads
Rystem.RepositoryFramework.Cache.Azure.Storage.Blob

Rystem.RepositoryFramework allows you to use correctly concepts like repository pattern, CQRS and DDD. You have interfaces for your domains, auto-generated api, auto-generated HttpClient to simplify connection "api to front-end", a functionality for auto-population in memory of your models, a functionality to simulate exceptions and waiting time from external sources to improve your implementation/business test and load test.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
9.1.3 151 9/2/2025
9.1.2 561,394 5/29/2025
9.1.1 97,832 5/2/2025
9.0.32 186,655 4/15/2025
9.0.31 5,725 4/2/2025
9.0.30 88,728 3/26/2025
9.0.29 8,946 3/18/2025
9.0.28 183 3/17/2025
9.0.27 181 3/16/2025
9.0.26 191 3/13/2025
9.0.25 52,056 3/9/2025
9.0.21 664 3/6/2025
9.0.20 19,520 3/6/2025
9.0.19 249 3/6/2025
9.0.18 249 3/4/2025
9.0.17 135 3/1/2025
9.0.16 138 3/1/2025
9.0.15 75,496 2/22/2025
9.0.14 22,515 2/18/2025
9.0.13 155 2/9/2025
9.0.12 217,928 1/13/2025
9.0.11 23,973 1/9/2025
9.0.10 89 1/9/2025
9.0.9 3,993 1/7/2025
9.0.8 12,488 1/6/2025
9.0.7 129 1/6/2025
9.0.4 92,271 12/23/2024
9.0.3 174 12/22/2024
9.0.2 10,703 12/21/2024
9.0.1 1,191 12/21/2024
9.0.0 172,951 11/16/2024
9.0.0-rc.1 101 10/18/2024
6.2.0 219,087 10/9/2024
6.1.1 153 10/9/2024
6.1.0 47,913 9/29/2024
6.0.24 168 9/11/2024
6.0.23 162 7/18/2024
6.0.21 176 6/18/2024
6.0.20 171 6/16/2024
6.0.19 167 6/14/2024
6.0.18 159 6/14/2024
6.0.17 160 6/14/2024
6.0.16 154 6/10/2024
6.0.15 172 6/9/2024
6.0.14 174 5/24/2024
6.0.13 171 5/23/2024
6.0.12 158 5/23/2024
6.0.11 184 5/20/2024
6.0.9 189 5/20/2024
6.0.7 172 5/18/2024
6.0.6 167 5/10/2024
6.0.5 182 5/10/2024
6.0.4 221 4/3/2024
6.0.3 1,605 3/25/2024
6.0.2 233 3/11/2024
6.0.0 1,031 11/21/2023
6.0.0-rc.6 136 10/25/2023
6.0.0-rc.5 105 10/25/2023
6.0.0-rc.4 96 10/23/2023
6.0.0-rc.3 96 10/19/2023
6.0.0-rc.2 106 10/18/2023
6.0.0-rc.1 107 10/16/2023
5.0.20 547 9/25/2023
5.0.19 553 9/10/2023
5.0.18 540 9/6/2023
5.0.17 515 9/6/2023
5.0.16 597 9/5/2023
5.0.15 540 9/5/2023
5.0.14 539 9/5/2023
5.0.13 532 9/1/2023
5.0.12 503 8/31/2023
5.0.11 532 8/30/2023
5.0.10 571 8/29/2023
5.0.9 544 8/24/2023
5.0.8 552 8/24/2023
5.0.7 572 8/23/2023
5.0.6 613 8/21/2023
5.0.5 568 8/21/2023
5.0.4 597 8/16/2023
5.0.3 662 8/2/2023
5.0.2 617 8/2/2023
5.0.1 644 8/1/2023
5.0.0 646 7/31/2023
4.1.26 676 7/20/2023
4.1.25 642 7/16/2023
4.1.24 762 6/13/2023
4.1.23 670 6/13/2023
4.1.22 1,089 5/30/2023
4.1.21 666 5/20/2023
4.1.20 315,697 4/19/2023
4.1.19 95,614 3/20/2023
4.1.18 784 3/20/2023
4.1.17 746 3/16/2023
4.1.16 757 3/16/2023
4.1.15 749 3/15/2023
4.1.14 1,837 3/9/2023
4.1.13 778 3/7/2023
4.1.12 929 2/10/2023
4.1.11 812 1/26/2023
4.1.10 828 1/22/2023
4.1.9 799 1/20/2023
4.1.8 810 1/18/2023
4.1.7 802 1/18/2023
4.1.6 814 1/17/2023
4.1.1 845 1/4/2023
4.1.0 843 1/1/2023
3.1.5 825 12/21/2022
3.1.3 830 12/12/2022
3.1.2 814 12/7/2022
3.1.1 828 12/7/2022
3.1.0 889 12/2/2022
3.0.29 822 12/1/2022
3.0.28 846 12/1/2022
3.0.27 887 11/23/2022
3.0.25 952 11/23/2022
3.0.24 964 11/18/2022
3.0.23 943 11/18/2022
3.0.22 952 11/15/2022
3.0.21 942 11/14/2022
3.0.20 979 11/13/2022
3.0.19 1,085 11/2/2022
3.0.18 951 11/2/2022
3.0.17 1,006 10/29/2022
3.0.16 1,007 10/29/2022
3.0.15 996 10/29/2022
3.0.14 1,138 10/24/2022
3.0.13 1,016 10/24/2022
3.0.12 1,012 10/17/2022
3.0.11 1,055 10/10/2022
3.0.10 1,051 10/6/2022
3.0.9 1,045 10/6/2022
3.0.8 1,048 10/6/2022
3.0.7 982 10/6/2022
3.0.6 1,045 10/5/2022
3.0.5 920 10/5/2022
3.0.4 1,061 10/5/2022
3.0.3 1,035 10/3/2022
3.0.2 1,034 9/30/2022
3.0.1 1,043 9/30/2022
2.0.17 936 9/29/2022
2.0.16 1,080 9/27/2022
2.0.15 1,116 9/27/2022
2.0.14 1,103 9/26/2022
2.0.13 1,067 9/26/2022
2.0.12 1,063 9/26/2022
2.0.11 1,095 9/25/2022
2.0.10 1,134 9/25/2022
2.0.9 1,100 9/22/2022
2.0.8 1,056 9/22/2022
2.0.6 1,090 9/20/2022
2.0.5 1,231 9/20/2022
2.0.4 1,060 9/20/2022
2.0.2 1,091 9/20/2022
2.0.1 1,141 9/13/2022
2.0.0 1,055 8/19/2022
1.1.24 1,152 7/30/2022
1.1.23 1,122 7/29/2022
1.1.22 971 7/29/2022
1.1.21 1,085 7/29/2022
1.1.20 1,108 7/29/2022
1.1.19 1,106 7/27/2022
1.1.17 1,157 7/27/2022
1.1.16 1,078 7/26/2022
1.1.15 1,100 7/25/2022
1.1.14 1,097 7/25/2022
1.1.13 1,084 7/22/2022
1.1.12 1,123 7/19/2022
1.1.11 1,109 7/19/2022
1.1.10 1,072 7/19/2022
1.1.9 1,110 7/19/2022
1.1.8 1,140 7/18/2022
1.1.7 1,096 7/18/2022
1.1.6 1,097 7/18/2022
1.1.5 1,129 7/17/2022
1.1.4 981 7/17/2022
1.1.3 1,249 7/17/2022
1.1.2 1,100 7/17/2022
1.1.0 1,126 7/17/2022
1.0.2 1,082 7/15/2022
1.0.1 978 7/15/2022
1.0.0 1,119 7/8/2022
0.10.7 1,086 7/7/2022
0.10.2 1,108 7/2/2022
0.10.1 1,128 7/1/2022
0.10.0 1,008 7/1/2022
0.9.10 1,081 6/20/2022
0.9.9 1,088 6/11/2022
0.9.7 974 6/9/2022
0.9.6 996 6/9/2022