v0.19.0
🆕 Added DistributedCacheFailSafeMaxDuration
option (docs)
After a request by the community member @RMcD a new entry option has been added to be able to specify a fail-safe max duration specific for the distributed cache level.
See here for more.
⚠ Behaviour change with stale data
After talking with community member @fkuhnert , an old thought re-emerged: for readonly methods like TryGet[Async]
and GetOrDefault[Async]
no stale data throttling should occur. This means that, even with fail-safe enabled, if there's some usable stale data it will be returned, BUT not saved. This makes sense, as a TryGet or a GetOrDefault does not suggest a "save" operation (see: Principle of Least Astonishment).
This should not change any apparent behaviour from the outside: the only thing potentially noticeable is that, if you have a large number of TryGet/GetOrDefault calls done on stale data, you may see some more of them going to the distributed cache, that's all.
🆕 Added ServiceStack JSON support
A new serializer is now available in its own package, to support the ServiceStack JSON serializer.
Thanks @mythz for yout support!
⛔ Added entry options normalization
Thanks to the community member @suhrab for spotting an edge case that could have been already handled.
When a user enable fail-safe and specifies a FailSafeMaxDuration
lower than the Duration
, the situation can feel messy since the thing being asked is not really in line with how FusionCache operates.
To avoid this, a new normalization phase has been added, to make all the values coherent with the situation.
In case a normalization occurs, FusionCache will also log it with a (configurable) Warning level.
See here for more.
📞 Added FactorySuccess
event (docs)
A new event has been added that will trigger when a non-background factory completes successfully, after a request from community member @bartlomiejgawel (thanks for the tip!).
For the background one, keep using the BackgroundFactorySuccess
event that already exists.
See here for more.
⚡ Performance Boost
When logging is enabled, FusionCache automatically generates a unique operation id per each operation (eg: each GetOrSet
/GetOrDefault
/TryGet
/etc call) to make detective work easier while looking at the logs.
The generation of these operation ids now consumes 83% less cpu time and 45% less memory.
📕 Better docs
The docs has been expanded and refined: one of these changes is that in the Options now there's a clear indication about which entry options are compatible with adaptive caching, thanks to a chat with @celluj34.
Thanks Joe for the inspiration!