Class CacheSyncService
Default implementation of ICacheSyncService that synchronizes caches across servers.
Inheritance
Namespace: Umbraco.Cms.Core
Assembly: Umbraco.Core.dll
Syntax
public class CacheSyncService : ICacheSyncService
Constructors
View SourceCacheSyncService(IMachineInfoFactory, CacheRefresherCollection, ICacheInstructionService)
Initializes a new instance of the CacheSyncService class.
Declaration
public CacheSyncService(IMachineInfoFactory machineInfoFactory, CacheRefresherCollection cacheRefreshers, ICacheInstructionService cacheInstructionService)
Parameters
| Type | Name | Description |
|---|---|---|
| IMachineInfoFactory | machineInfoFactory | The factory for getting machine information. |
| CacheRefresherCollection | cacheRefreshers | The collection of cache refreshers. |
| ICacheInstructionService | cacheInstructionService | The service for processing cache instructions. |
Methods
View SourceSyncAll(CancellationToken)
Synchronizes all caches including both isolated caches and published content caches.
Declaration
public void SyncAll(CancellationToken cancellationToken = default)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | cancellationToken | A token to monitor for cancellation requests. |
Remarks
This method clears all isolated caches (repositories and services) and published content caches (IPublishedContentCache, route caching, etc.) to ensure complete cache consistency across the cluster.
SyncInternal(CancellationToken)
Synchronizes only isolated caches without affecting the published content cache layer.
Declaration
public void SyncInternal(CancellationToken cancellationToken)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | cancellationToken | A token to monitor for cancellation requests. |
Remarks
This method clears only the isolated caches used by repositories and services, leaving the published content cache layer to SyncAll(CancellationToken). Payload instructions run only RefreshInternal(string), and id-based instructions run their in-memory refresh. The synchronization itself takes no in-process or distributed locks and writes nothing to the database, so it is safe to call while holding distributed locks as long as every refresher honours the same contract on RefreshInternal(string); the caller's next repository read reloads the cleared entries from the database.