是的,ASP.NET MVC 5 支持线程安全的缓存。可以使用 System.Runtime.Caching.MemoryCache 类来实现线程安全的缓存。下面是一个示例代码:
public class CacheManager
{
private static readonly object _locker = new object();
private static MemoryCache _cache;
static CacheManager()
{
_cache = new MemoryCache("MyCache");
}
public static T GetOrSet(string key, Func getItemCallback, int durationSeconds)
{
var item = _cache.Get(key);
if (item == null)
{
lock (_locker)
{
item = _cache.Get(key);
if (item == null)
{
item = getItemCallback();
if (item != null)
{
_cache.Set(key, item, DateTimeOffset.Now.AddSeconds(durationSeconds));
}
}
}
}
return (T)item;
}
public static void Remove(string key)
{
_cache.Remove(key);
}
}
使用 GetOrSet 方法来获取缓存对象,如果缓存中不存在,则调用 getItemCallback 方法来获取,并将结果缓存一段时间。在获取缓存对象时采用 double checked locking,确保线程安全。如果需要移除缓存对象,可以调用 Remove 方法。