Skip to content

Commit f868a91

Browse files
authored
Merge pull request #7133 from umbraco/new/member-partial-cache
Added docs around IMemberPartialViewCacheInvalidator
2 parents 944cc47 + c315ff6 commit f868a91

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

13/umbraco-cms/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@
368368
* [Cache & Distributed Cache](reference/cache/README.md)
369369
* [Accessing the cache](reference/cache/application-cache.md)
370370
* [ICacheRefresher](reference/cache/icacherefresher.md)
371+
* [IMemberPartialViewCacheInvalidator](reference/cache/imemberpartialviewcacheinvalidator.md)
371372
* [IServerMessenger](reference/cache/iservermessenger.md)
372373
* [Getting/Adding/Updating/Inserting Into Cache](reference/cache/updating-cache.md)
373374
* [Examples](reference/cache/examples/README.md)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Partial view cache refresher for members
2+
3+
This section describes the `IMemberPartialViewCacheInvalidator` interface, what it's default implementation does and how to customize it.
4+
5+
## What is an IMemberPartialViewCacheInvalidator?
6+
7+
This interface is used to isolate the logic that invalidates parts of the partial view cache when a member is updated.
8+
9+
## Why do we need to partially invalidate the partial view cache?
10+
11+
Razor templates may show data that is retrieved from a member object. Those templates might be cached by using the partial caching mechanism (for example, `@await Html.CachedPartialAsync("member",Model,TimeSpan.FromDays(1), cacheByMember:true)`). When a member is updated, these cached partials must be invalidated to ensure updated data is shown.
12+
13+
## Where is it used?
14+
15+
This interface is called from the member cache refresher (`MemberCacheRefresher`), which is invoked every time a member is updated.
16+
17+
## Details of the default implementation
18+
19+
Razor template partials are cached through a call to `Html.CachedPartialAsync` with `cacheByMember` set to `true`. This will append the ID of the currently logged-in member with a marker to the partial view cache key. For example, `-m1015-`.
20+
21+
When the `ClearPartialViewCacheItems` method is called it will clear all cache items that match the marker for the updated members.
22+
23+
If no member is logged in during caching, items with an empty member marker (for example, `-m-`) are also cleared.
24+
25+
## Customizing the implementation
26+
27+
You can replace the default implementation by removing it and registering your own in a composer.
28+
29+
```csharp
30+
public class ReplaceMemberCacheInvalidatorComposer : IComposer
31+
{
32+
public void Compose(IUmbracoBuilder builder)
33+
{
34+
builder.Services.AddUnique<IMemberPartialViewCacheInvalidator, MyCustomMemberPartialViewCacheInvalidator>();
35+
}
36+
}
37+
```

16/umbraco-cms/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@
385385
* [Cache Seeding](reference/cache/cache-seeding.md)
386386
* [Accessing the cache](reference/cache/application-cache.md)
387387
* [ICacheRefresher](reference/cache/icacherefresher.md)
388+
* [IMemberPartialViewCacheInvalidator](reference/cache/imemberpartialviewcacheinvalidator.md)
388389
* [IServerMessenger](reference/cache/iservermessenger.md)
389390
* [Getting/Adding/Updating/Inserting Into Cache](reference/cache/updating-cache.md)
390391
* [Examples](reference/cache/examples/README.md)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Partial view cache refresher for members
2+
3+
This section describes the `IMemberPartialViewCacheInvalidator` interface, what it's default implementation does and how to customize it.
4+
5+
## What is an IMemberPartialViewCacheInvalidator?
6+
7+
This interface is used to isolate the logic that invalidates parts of the partial view cache when a member is updated.
8+
9+
## Why do we need to partially invalidate the partial view cache?
10+
11+
Razor templates may show data that is retrieved from a member object. Those templates might be cached by using the partial caching mechanism (for example, `@await Html.CachedPartialAsync("member",Model,TimeSpan.FromDays(1), cacheByMember:true)`). When a member is updated, these cached partials must be invalidated to ensure updated data is shown.
12+
13+
## Where is it used?
14+
15+
This interface is called from the member cache refresher (`MemberCacheRefresher`), which is invoked every time a member is updated.
16+
17+
## Details of the default implementation
18+
19+
Razor template partials are cached through a call to `Html.CachedPartialAsync` with `cacheByMember` set to `true`. This will append the ID of the currently logged-in member with a marker to the partial view cache key. For example, `-m1015-`.
20+
21+
When the `ClearPartialViewCacheItems` method is called, it will clear all cache items that match the marker for the updated members.
22+
23+
If no member is logged in during caching, items with an empty member marker (for example, `-m-`) are also cleared.
24+
25+
## Customizing the implementation
26+
27+
You can replace the default implementation by removing it and registering your own in a composer.
28+
29+
```csharp
30+
public class ReplaceMemberCacheInvalidatorComposer : IComposer
31+
{
32+
public void Compose(IUmbracoBuilder builder)
33+
{
34+
builder.Services.AddUnique<IMemberPartialViewCacheInvalidator, MyCustomMemberPartialViewCacheInvalidator>();
35+
}
36+
}
37+
```

0 commit comments

Comments
 (0)