Когда я кешу объекта HttpContext Cache
, мой объект исчезает при следующем чтении, и я должен повторно вставить объект во второй раз (не всегда, но в 90% случаев). После этого объект остается без проблем.Почему я должен поместить свой объект дважды в HttpContext Cache, прежде чем он сохранит его навсегда?
Вот что произошло:
- Начать отладку MVC проекта
- Прочитайте возраст из кэша
- возраст нулевой поэтому я поставил 50 в переменной, а затем вставьте его в cache
CacheItemRemovedCallback
выполняется сразу же после завершения реакции на клиента. ЗначениеCacheItemRemovedReason
являетсяRemoved
- обновления нажмите пользователь сразу
- Прочитайте возраст из кэша
- возраст по-прежнему нулевой так я поставил 50 в переменной, а затем вставьте его в кэш
- The пользователь немедленно нажмет обновить
- Прочтите возраст из кеша
- возраст наконец!
Почему у Cache
есть эта проблема, чтобы сохранить объект в кеше на первой вставке?
Это поведение существует в .Net framework 3.5, 4.0, 4.5, 4.5.2
.
Вот код:
public class HomeController : Controller
{
public ActionResult Index()
{
int? age = this.HttpContext.Cache.Get("age") as int?;
if (age == null)
{
age = 50;
this.HttpContext.Cache.Add("age", age, null, DateTime.Now.AddHours(5), TimeSpan.Zero, CacheItemPriority.Default, new CacheItemRemovedCallback(this.CacheItemRemovedCallback));
}
return View();
}
public void CacheItemRemovedCallback(String key, Object value, CacheItemRemovedReason reason)
{
}
}
Есть ли причина, по которой вы не указали продолжительность кеша в Insert()? Этот предмет может быть взломан раньше, чем вы думаете. – StingyJack
Поскольку это не требуется для этого, и с тех пор во второй раз, когда объект кэшируется навсегда, я понимаю, что без указания продолжительности кэша значение по умолчанию заключается в том, чтобы сохранить объект бесконечно. –
Кэш никогда не бывает постоянным. Infinity не является значением по умолчанию, и в кеше будут удалены элементы, если они больше не нужны. Поставьте время в 1 час для кеша, и вы должны увидеть этот пункт в первый раз, когда вы его ожидаете. – StingyJack