v2.6.0
π·οΈ Configurable cleanup behavior for RemoveByTag()
Normally, when calling RemoveByTag("my-tag"), the entries with such a tag will be gradually expired on a subsequent access.
Community member @charlesvigneault asked for the ability to instead properly remove them.
So I added a new option to allow configuring this behavior:
services.AddFusionCache()
.WithOptions(options =>
{
options.RemoveByTagBehavior = RemoveByTagBehavior.Remove;
});See here for the original issue.
βοΈ Add support for RemoveByTag("*") in HybridCache adapter
After the initial release of HybridCache in 2025, the team added support for a special case: using RemoveByTag("*") to clear the entire cache.
I didn't notice untile recently, and thanks to community user @vrbyjimmy I did that.
Or, to better say it, he did that!
He acted so quickly that a PR immediately landed with the implementation, so thanks Jakub for that!
What happens underneath is that a RemoveByTag("*") call on the adapter is detected and re-routed to a Clear() call on the underlying FusionCache instance: very simple and elegant, and I like that a lot.
See here for the original issue.
π Better Distributed Locker + Eager Refresh
Community user @jgshowpad noticed that when using the new distributed stampede protection introduced in v2.5.0 with Eager Refresh some errors were being logged.
That was caused by the Redis-based distributed locker not handling correctly a timeout of zero (which btw is a pretty common approach to basically check for a lock already being acquired by someone else, without having to wait).
This has now been fixed.
See here for the original issue.
β‘ Perf boost for GenerateOperationId()
Community user @Inok contributed with a nice set of low-level perf optimizations for the GenerateOperationId() internal method, which may be called quite a lot when doing observability (logging, OTEL, etc).
That's a very nice and welcome contribution, thanks Pavel!
See here for the original issue.
π Add missing ext method for DI registration of
Community member @mumin-khan noticed that, after releasing distributed stampede support in v2.5.0, I missed the related ext method for the the DI registration.
So now I added it, and it's now possible to do this:
builder.Services.AddFusionCacheRedisDistributedLocker(options =>
{
options.Configuration = ... ;
});This has now been added, thanks Mumin!
See here for the original issue.
π Fixed a couple of missing ConfigureAwait(false)
Community user @JerinMathewJose01 noticed that on the old .NET Framework 4.7.2 and 4.8, sometimes the factory may remain stuck without completing correctly.
That was caused by a couple of missing ConfigureAwait(false) when awaiting the factory execution.
This has now been fixed.
See here for the original issue.
π Docs
As always, I took some time to updated the docs with the latest stuff and make them overall better.