Rystem.RepositoryFramework.Cache
6.1.0
See the version list below for details.
dotnet add package Rystem.RepositoryFramework.Cache --version 6.1.0
NuGet\Install-Package Rystem.RepositoryFramework.Cache -Version 6.1.0
<PackageReference Include="Rystem.RepositoryFramework.Cache" Version="6.1.0" />
paket add Rystem.RepositoryFramework.Cache --version 6.1.0
#r "nuget: Rystem.RepositoryFramework.Cache, 6.1.0"
// Install Rystem.RepositoryFramework.Cache as a Cake Addin #addin nuget:?package=Rystem.RepositoryFramework.Cache&version=6.1.0 // Install Rystem.RepositoryFramework.Cache as a Cake Tool #tool nuget:?package=Rystem.RepositoryFramework.Cache&version=6.1.0
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 | Versions 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. |
-
net8.0
- Microsoft.Extensions.Caching.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Caching.Memory (>= 8.0.0)
- Rystem.RepositoryFramework.Abstractions (>= 6.1.0)
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.0.0-rc.1 | 69 | 10/18/2024 |
6.2.0 | 125,917 | 10/9/2024 |
6.1.1 | 85 | 10/9/2024 |
6.1.0 | 47,842 | 9/29/2024 |
6.0.24 | 108 | 9/11/2024 |
6.0.23 | 102 | 7/18/2024 |
6.0.21 | 119 | 6/18/2024 |
6.0.20 | 116 | 6/16/2024 |
6.0.19 | 110 | 6/14/2024 |
6.0.18 | 104 | 6/14/2024 |
6.0.17 | 103 | 6/14/2024 |
6.0.16 | 99 | 6/10/2024 |
6.0.15 | 118 | 6/9/2024 |
6.0.14 | 119 | 5/24/2024 |
6.0.13 | 117 | 5/23/2024 |
6.0.12 | 105 | 5/23/2024 |
6.0.11 | 126 | 5/20/2024 |
6.0.9 | 133 | 5/20/2024 |
6.0.7 | 116 | 5/18/2024 |
6.0.6 | 105 | 5/10/2024 |
6.0.5 | 117 | 5/10/2024 |
6.0.4 | 152 | 4/3/2024 |
6.0.3 | 1,132 | 3/25/2024 |
6.0.2 | 178 | 3/11/2024 |
6.0.0 | 999 | 11/21/2023 |
6.0.0-rc.6 | 102 | 10/25/2023 |
6.0.0-rc.5 | 76 | 10/25/2023 |
6.0.0-rc.4 | 69 | 10/23/2023 |
6.0.0-rc.3 | 65 | 10/19/2023 |
6.0.0-rc.2 | 75 | 10/18/2023 |
6.0.0-rc.1 | 76 | 10/16/2023 |
5.0.20 | 512 | 9/25/2023 |
5.0.19 | 507 | 9/10/2023 |
5.0.18 | 489 | 9/6/2023 |
5.0.17 | 471 | 9/6/2023 |
5.0.16 | 548 | 9/5/2023 |
5.0.15 | 494 | 9/5/2023 |
5.0.14 | 490 | 9/5/2023 |
5.0.13 | 485 | 9/1/2023 |
5.0.12 | 458 | 8/31/2023 |
5.0.11 | 487 | 8/30/2023 |
5.0.10 | 512 | 8/29/2023 |
5.0.9 | 493 | 8/24/2023 |
5.0.8 | 503 | 8/24/2023 |
5.0.7 | 509 | 8/23/2023 |
5.0.6 | 537 | 8/21/2023 |
5.0.5 | 519 | 8/21/2023 |
5.0.4 | 548 | 8/16/2023 |
5.0.3 | 611 | 8/2/2023 |
5.0.2 | 567 | 8/2/2023 |
5.0.1 | 593 | 8/1/2023 |
5.0.0 | 594 | 7/31/2023 |
4.1.26 | 622 | 7/20/2023 |
4.1.25 | 586 | 7/16/2023 |
4.1.24 | 699 | 6/13/2023 |
4.1.23 | 609 | 6/13/2023 |
4.1.22 | 1,009 | 5/30/2023 |
4.1.21 | 602 | 5/20/2023 |
4.1.20 | 315,629 | 4/19/2023 |
4.1.19 | 95,551 | 3/20/2023 |
4.1.18 | 711 | 3/20/2023 |
4.1.17 | 684 | 3/16/2023 |
4.1.16 | 691 | 3/16/2023 |
4.1.15 | 683 | 3/15/2023 |
4.1.14 | 1,773 | 3/9/2023 |
4.1.13 | 711 | 3/7/2023 |
4.1.12 | 862 | 2/10/2023 |
4.1.11 | 741 | 1/26/2023 |
4.1.10 | 756 | 1/22/2023 |
4.1.9 | 728 | 1/20/2023 |
4.1.8 | 740 | 1/18/2023 |
4.1.7 | 729 | 1/18/2023 |
4.1.6 | 743 | 1/17/2023 |
4.1.1 | 776 | 1/4/2023 |
4.1.0 | 776 | 1/1/2023 |
3.1.5 | 756 | 12/21/2022 |
3.1.3 | 763 | 12/12/2022 |
3.1.2 | 746 | 12/7/2022 |
3.1.1 | 760 | 12/7/2022 |
3.1.0 | 817 | 12/2/2022 |
3.0.29 | 752 | 12/1/2022 |
3.0.28 | 775 | 12/1/2022 |
3.0.27 | 816 | 11/23/2022 |
3.0.25 | 880 | 11/23/2022 |
3.0.24 | 881 | 11/18/2022 |
3.0.23 | 874 | 11/18/2022 |
3.0.22 | 876 | 11/15/2022 |
3.0.21 | 868 | 11/14/2022 |
3.0.20 | 906 | 11/13/2022 |
3.0.19 | 1,010 | 11/2/2022 |
3.0.18 | 878 | 11/2/2022 |
3.0.17 | 932 | 10/29/2022 |
3.0.16 | 934 | 10/29/2022 |
3.0.15 | 921 | 10/29/2022 |
3.0.14 | 1,063 | 10/24/2022 |
3.0.13 | 943 | 10/24/2022 |
3.0.12 | 933 | 10/17/2022 |
3.0.11 | 979 | 10/10/2022 |
3.0.10 | 978 | 10/6/2022 |
3.0.9 | 968 | 10/6/2022 |
3.0.8 | 961 | 10/6/2022 |
3.0.7 | 899 | 10/6/2022 |
3.0.6 | 969 | 10/5/2022 |
3.0.5 | 846 | 10/5/2022 |
3.0.4 | 982 | 10/5/2022 |
3.0.3 | 960 | 10/3/2022 |
3.0.2 | 951 | 9/30/2022 |
3.0.1 | 967 | 9/30/2022 |
2.0.17 | 852 | 9/29/2022 |
2.0.16 | 992 | 9/27/2022 |
2.0.15 | 1,042 | 9/27/2022 |
2.0.14 | 1,030 | 9/26/2022 |
2.0.13 | 990 | 9/26/2022 |
2.0.12 | 986 | 9/26/2022 |
2.0.11 | 1,014 | 9/25/2022 |
2.0.10 | 1,061 | 9/25/2022 |
2.0.9 | 1,026 | 9/22/2022 |
2.0.8 | 978 | 9/22/2022 |
2.0.6 | 1,011 | 9/20/2022 |
2.0.5 | 1,145 | 9/20/2022 |
2.0.4 | 984 | 9/20/2022 |
2.0.2 | 1,012 | 9/20/2022 |
2.0.1 | 1,064 | 9/13/2022 |
2.0.0 | 979 | 8/19/2022 |
1.1.24 | 1,073 | 7/30/2022 |
1.1.23 | 1,045 | 7/29/2022 |
1.1.22 | 894 | 7/29/2022 |
1.1.21 | 1,008 | 7/29/2022 |
1.1.20 | 1,022 | 7/29/2022 |
1.1.19 | 1,024 | 7/27/2022 |
1.1.17 | 1,079 | 7/27/2022 |
1.1.16 | 1,000 | 7/26/2022 |
1.1.15 | 1,020 | 7/25/2022 |
1.1.14 | 1,019 | 7/25/2022 |
1.1.13 | 1,003 | 7/22/2022 |
1.1.12 | 1,039 | 7/19/2022 |
1.1.11 | 1,030 | 7/19/2022 |
1.1.10 | 992 | 7/19/2022 |
1.1.9 | 1,029 | 7/19/2022 |
1.1.8 | 1,058 | 7/18/2022 |
1.1.7 | 1,015 | 7/18/2022 |
1.1.6 | 1,019 | 7/18/2022 |
1.1.5 | 1,049 | 7/17/2022 |
1.1.4 | 901 | 7/17/2022 |
1.1.3 | 1,167 | 7/17/2022 |
1.1.2 | 1,020 | 7/17/2022 |
1.1.0 | 1,041 | 7/17/2022 |
1.0.2 | 1,002 | 7/15/2022 |
1.0.1 | 897 | 7/15/2022 |
1.0.0 | 1,040 | 7/8/2022 |
0.10.7 | 997 | 7/7/2022 |
0.10.2 | 1,032 | 7/2/2022 |
0.10.1 | 1,049 | 7/1/2022 |
0.10.0 | 927 | 7/1/2022 |
0.9.10 | 1,000 | 6/20/2022 |
0.9.9 | 1,004 | 6/11/2022 |
0.9.7 | 889 | 6/9/2022 |
0.9.6 | 914 | 6/9/2022 |