gpt4 book ai didi

c# - 如何在 asp.net core 中遍历 MemoryCache?

转载 作者:行者123 更新时间:2023-11-30 13:14:34 24 4
gpt4 key购买 nike

IMemoryCache 中没有可用的方法允许遍历每个缓存的项目。我的项目很小,我不想使用 Redis 等其他选项。

namepsace    Microsoft.Extensions.Caching.Memory{
public static class CacheExtensions
{
public static object Get(this IMemoryCache cache, object key);
public static TItem Get<TItem>(this IMemoryCache cache, object key);
public static TItem GetOrCreate<TItem>(this IMemoryCache cache, object key, Func<ICacheEntry, TItem> factory);
[AsyncStateMachine(typeof(CacheExtensions.<GetOrCreateAsync>d__9<>))]
public static Task<TItem> GetOrCreateAsync<TItem>(this IMemoryCache cache, object key, Func<ICacheEntry, Task<TItem>> factory);
public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value);
public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value, DateTimeOffset absoluteExpiration);
public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value, TimeSpan absoluteExpirationRelativeToNow);
public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value, IChangeToken expirationToken);
public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value, MemoryCacheEntryOptions options);
public static bool TryGetValue<TItem>(this IMemoryCache cache, object key, out TItem value);
}
}

https://github.com/aspnet/Caching/blob/dev/src/Microsoft.Extensions.Caching.Memory/MemoryCache.cs

最佳答案

您应该缓存两种类型的项目。

  1. 您按原样缓存您的属性,abc.xyz-{0}
  2. 第二次缓存主键名下的属性列表,abc.xyz

示例代码:

cache.Set("abc.xyz-name", name, TimeSpan.FromMinutes(30));
cache.Set("abc.xyz-lastname", lastname, TimeSpan.FromMinutes(30));
cache.Set("abc.xyz-birthday", birthday, TimeSpan.FromMinutes(30));
cache.Set("abc.xyz", new List<string> { "abc.xyz-name", "abc.xyz-lastname", "abc.xyz-birthday" }, TimeSpan.FromMinutes(30));

删除时:

var keys = cache.Get<List<string>>("abc.xyz");
foreach(var key in keys)
cache.Remove(key);
cache.remove("abc.xyz");

大多数服务在注册时使用 IDistributedCache(在您的例子中是 MemoryDistributedCache - 再次注入(inject) IMemoryCache,即 MemoryCache类)。

在分布式缓存中,您无法遍历所有键,因为可能有数百万个键,如果您可以/将会遍历它,这将显着降低缓存服务的性能。

因此,当您将内存缓存替换为分布式缓存(例如 Redis)时,上述解决方案也很友好,可以随时使用。

关于c# - 如何在 asp.net core 中遍历 MemoryCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43673833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com