【问题标题】:Memory cached generic list removing without effect cached list内存缓存通用列表删除不影响缓存列表
【发布时间】:2018-11-10 20:57:58
【问题描述】:

我正在尝试从我的列表中删除一项。但是,我正在从缓存中获取列表。 在此之后,我将删除我的功能中的一项。这会影响我的缓存列表。如果我再次尝试从另一个页面的缓存中获取缓存列表。删除的项目丢失了怎么可能?

例子,

var IList list;
 if(condition)

 list=CacheManagement.GetFromCache();
 else
 list=SqlManagement.GetFromSql();


 list.removeall(x=>x.id==1);
 //end of my function

【问题讨论】:

    标签: c# memcached generic-list


    【解决方案1】:

    所以当你对列表进行更改时,它会反映到缓存中,因为引用(列表的内存地址)被复制到缓存中,所以任何更改实际上都会反映在缓存中。

    为避免这种情况,只需将列表中的Clone() 放入缓存即可。 (假设UpdateCache() 是设置缓存的方法)你可以这样做:

    UpdateCache(list.Clone());
    

    【讨论】:

    • 不,先生,您理解我的错误,也许我的解释是错误的对不起。我只是从缓存中获取列表并在代码中编辑。我在编辑后从不更新我的缓存。更新!我已经更新了我的问题,这是错误的。
    • 这就是为什么当您从缓存加载时它会返回。我懂土耳其语,如果你喜欢我们可以继续聊天讨论
    • 我会很高兴的。请。
    • 当您从内存缓存中获取对象时,您正在编辑缓存中的实际对象,而不是它的副本。这就是为什么当您在代码中删除时,您也会从缓存中的列表中删除该项目。这仅发生在内存缓存(堆内存)中,如果您在生产线上有多个服务器,请小心,您将失去缓存的一致性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2014-08-17
    • 2010-09-06
    相关资源
    最近更新 更多