-
-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathCacheOptions.cs
More file actions
64 lines (57 loc) · 3.34 KB
/
Copy pathCacheOptions.cs
File metadata and controls
64 lines (57 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
namespace NpgsqlRest;
public class CacheOptions
{
/// <summary>
/// Default routine cache object. Inject custom cache object to override default cache. Set to null to disable caching.
/// </summary>
public IRoutineCache? DefaultRoutineCache { get; set; } = new RoutineCache();
/// <summary>
/// When cache is enabled, this value sets the interval in minutes for cache pruning (removing expired entries). Default is 1 minute.
/// </summary>
public int MemoryCachePruneIntervalSeconds { get; set; } = 60;
/// <summary>
/// Maximum number of rows that can be cached for set-returning functions.
/// If a result set exceeds this limit, it will not be cached (but will still be returned).
/// Set to 0 to disable caching for sets entirely. Set to null for unlimited (use with caution).
/// Default is 1000 rows.
/// </summary>
public int? MaxCacheableRows { get; set; } = 1000;
/// <summary>
/// When true, cache keys longer than HashKeyThreshold characters are hashed to a fixed-length SHA256 string.
/// This reduces memory usage for long cache keys and improves Redis performance with large keys.
/// Default is false (cache keys are stored as-is).
/// </summary>
public bool UseHashedCacheKeys { get; set; } = false;
/// <summary>
/// Cache keys longer than this threshold (in characters) will be hashed when UseHashedCacheKeys is true.
/// Keys shorter than this threshold are stored as-is for better debuggability.
/// Default is 256 characters.
/// </summary>
public int HashKeyThreshold { get; set; } = 256;
/// <summary>
/// When set, creates an additional invalidation endpoint for each cached endpoint.
/// The invalidation endpoint has the same path with this suffix appended.
/// For example, if a cached endpoint is /api/my-endpoint/ and this is set to "invalidate",
/// an invalidation endpoint /api/my-endpoint/invalidate will be created.
/// Calling the invalidation endpoint with the same parameters removes the cached entry.
/// Invalidation routes through the endpoint's resolved cache (profile or root).
/// Default is null (no invalidation endpoints created).
/// </summary>
public string? InvalidateCacheSuffix { get; set; } = null;
/// <summary>
/// Optional named caching profiles. An endpoint opts into a profile via the <c>@cache_profile <name></c>
/// comment annotation; that endpoint then uses the profile's <see cref="CacheProfile.Cache"/> instance and
/// inherits the profile's <see cref="CacheProfile.Expiration"/>, <see cref="CacheProfile.Parameters"/>, and
/// <see cref="CacheProfile.When"/> defaults.
///
/// Endpoints without <c>@cache_profile</c> continue to use <see cref="DefaultRoutineCache"/>.
///
/// Unknown profile names referenced by endpoints cause startup to fail (collected and reported as a single
/// error listing every unresolved name and the offending endpoints).
///
/// Cache key prefix: entries written under a profile are prefixed with the profile name to prevent collisions
/// when two profiles share the same backend (e.g., two Memory profiles). Entries written under the default
/// (root) cache have no prefix and are wire-compatible with prior versions.
/// </summary>
public Dictionary<string, CacheProfile>? Profiles { get; set; }
}