把对象缓存到HttpRuntime.Cache里,你能安全地使用它吗?
每每勤勤恳恳,思来想去,趁还有激情,先把它记录下来。。。
定义一个Stu的类:
public class Stu
{
public string Name { get; set; }
public int Age { get; set; }
}
使用Stu类创建一个类实例变量stu,并把stu保存到缓存中
if ((Stu)HttpRuntime.Cache["myStu"] == null)
{
Stu stu= new Stu(){Name="yshuangj",Age=20};
HttpRuntime.Cache.Insert("myStu", stu);
}
现在,因业务逻辑的需要,获取缓存中的对象,并且对这个获取的对象进行修改,把Age改正确,由小鲜肉(20)改为老腊肉(30)
Stu temp = (Stu)HttpRuntime.Cache["myStu"];
temp.Age=30;
完了,这一个修改,直接修改了缓存中的stu,其它用户获取的值是更改后的值。 (Stu)HttpRuntime.Cache["myStu"]并不是新生成一个实例变量,只是返回了缓存对象的一个引用!!!
总结,不要把频繁修改的公共数据放入缓存,遵循最基本的缓存原则。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类