gpt4 book ai didi

asp.net - 缓存 DTO 或缓存来自昂贵资源的数据

转载 作者:行者123 更新时间:2023-12-04 06:57:36 24 4
gpt4 key购买 nike

我有一个返回 DTO 的 WebService。 Web 服务从昂贵的资源中获取数据以填充 DTO。在这个简单的例子中,几个 WebService 方法可能会命中同一个 ExpensiveResourceProvider 方法。执行缓存以最大化缓存命中率的最佳位置在哪里?在网络服务还是在 ExpensiveResourceProvider?我应该注意到,来自 ExpensiveResourceProvider 的一些数据经常更改,不应长时间缓存。

public class MyWebService : System.Web.Services.WebService
{
public MyDTO GetObject1And2()
{
MyDTO dto12 = HttpRuntime.Cache.Get("dto12") as MyDTO;
if(dto12 == null){
dto12 = new MyDTO();
dto12.Object1 = ExpensiveResourceProvider.GetObject1();
dto12.Object2 = ExpensiveResourceProvider.GetObject2();
HttpRuntime.Cache.Insert("dto12", dto12);
}
return dto12;
}
public MyDTO GetObject2And3()
{
MyDTO dto23 = HttpRuntime.Cache.Get("dto23") as MyDTO;
if (dto23 == null)
{
dto23 = new MyDTO();
dto23.Object2 = ExpensiveResourceProvider.GetObject2();
dto23.Object3 = ExpensiveResourceProvider.GetObject3();
HttpRuntime.Cache.Insert("dto23", dto23);
}
return dto23;
}
public MyDTO GetObject1And3()
{
MyDTO dto13 = HttpRuntime.Cache.Get("dto13") as MyDTO;
if (dto13 == null)
{
dto13 = new MyDTO();
dto13.Object1 = ExpensiveResourceProvider.GetObject1();
dto13.Object3 = ExpensiveResourceProvider.GetObject3();
HttpRuntime.Cache.Insert("dto13", dto13);
}
return dto13;
}
}
public class ExpensiveResourceProvider
{
public static object GetObject1()
{
object obj1 = HttpRuntime.Cache.Get("object1") as object;
if(obj1 == null){
obj1 = new object();
HttpRuntime.Cache.Insert("object1", obj1);
}
return obj1;
}
public static object GetObject2()
{
object obj2 = HttpRuntime.Cache.Get("object2") as object;
if (obj2 == null)
{
obj2 = new object();
HttpRuntime.Cache.Insert("object2", obj2);
}
return obj2;
}
public static object GetObject3()
{
object obj3 = HttpRuntime.Cache.Get("object3") as object;
if (obj3 == null)
{
obj3 = new object();
HttpRuntime.Cache.Insert("object3", obj3);
}
return obj3;
}
}
public class MyDTO
{
public object Object1 { get; set; }
public object Object2 { get; set; }
public object Object3 { get; set; }
}

最佳答案

数据的波动性是缓存位置的关键。根据您的缓存机制,您将有不同的方式来通知您的数据已过时并且是时候刷新它了。假设您的缓存机制提供了回调委托(delegate),在这种情况下,您的委托(delegate)应该与通常填充缓存的代码位于同一层(最好是与开始填充缓存的代码相同)。话虽如此,您的缓存似乎最好留给您的 ExpensiveResourceProvider。

关于asp.net - 缓存 DTO 或缓存来自昂贵资源的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358164/

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