把对象缓存到HttpRuntime.Cache里,你能安全地使用它吗?

本文通过一个具体的.NET示例展示了将频繁更新的对象存入缓存可能导致的问题。当从缓存中取出对象并修改其属性时,实际上修改的是缓存中的原始对象,这可能会导致数据一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每每勤勤恳恳,思来想去,趁还有激情,先把它记录下来。。。

定义一个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"]并不是新生成一个实例变量,只是返回了缓存对象的一个引用!!!

 

总结,不要把频繁修改的公共数据放入缓存,遵循最基本的缓存原则。

 

转载于:https://www.cnblogs.com/yshuangj/p/7920735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值