gpt4 book ai didi

c# - 如果我使用 Set 方法更新内存缓存,具有绝对到期时间,这是否意味着到期时间延长了?

转载 作者:行者123 更新时间:2023-11-30 17:36:17 28 4
gpt4 key购买 nike

我正在使用 MemoryCache存储一个数据表,其中包含大约 60 行。有时我只想“刷新”表格的一部分。所以我得到了我想根据这样的 id 刷新的行的集合:

var cachedDataSet = this.cache.Get(CacheKey) as DataSet;

var dataRows = cachedDataSet.Tables["MyTable"]
.AsEnumerable()
.Where(x => x.Field<int>("Id") == MyId)
.ToList<DataRow>();

然后我对此进行一些检查,并根据检查结果选择从数据库中获取数据,从缓存数据集中删除当前行并添加新数据。我尝试这样做:

var refreshedData = GetMyData(Id);
foreach (var row in dataRows)
{
cachedDataSet.Tables["MyTable"].Rows.Remove(row);
}

foreach (var row in refreshedData.Tables["MyTable"].Rows)
{
cachedDataSet.Tables["MyTable"].Rows.Add(row.ItemArray);
}

最后,我使用 Set method 将缓存的数据集添加回缓存中:

var policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddHours(12);
this.cache.Set(CacheKey, cachedDataSet, policy);

所以,我的主要问题是,如果我将缓存提取到数据集中,对其进行修改,然后使用新 CacheItemPolicy 的 Set 方法,这是否会有效地重置绝对过期时间?我的理解是,通过使用 set 方法,这将用新的缓存项覆盖现有的缓存项(如果存在),如果不存在则将其插入。所以,我猜它会覆盖缓存策略。如果是这样,有没有办法在覆盖值的同时不覆盖绝对过期?

最佳答案

是的,它将更新过期时间。您可以做的是将过期时间与项目本身一起存储在缓存中。所以

class CachedDataSet {
public DateTime ExpiresAt {get;set;}
public DataSet DataSet {get;set;}
}

然后在刷新时,首先从缓存中获取此项并将其 ExpiresAt 用作新的 AbsoluteExpiration 值。

关于c# - 如果我使用 Set 方法更新内存缓存,具有绝对到期时间,这是否意味着到期时间延长了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39851000/

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