Срок действия кэша веб-службы asp.net продлен - PullRequest
1 голос
/ 26 мая 2011

Я ничего не нашел, поэтому я не верю, что то, что я хочу, возможно. Я хочу сбросить скользящий срок действия переменной кэша при каждом обращении к ней.

public class MyCache
{
public static object CachedItem
{
    get
    {
        string key = "item11"; // users share the object at this key
        object o = Cache[key];

        //re-set the timer janky way
        //triggers callback, which I dont want
        o = (o == null) ? new object() : Cache.Remove(key);
        Cache.Add(key, o, null, Cache.NoAbs..., new TimeSpan(0,5,0), High, Removed);

        return o;
    }
}

private static void Removed(string key, object value, CacheItemRemovedReason reason)
{
    // audit MySql table
    // no good because Cache.Remove is getting called manually a lot.
}
}

На практике элемент кэша - это список сообщений в чате. Когда сообщение добавлено, я хочу, чтобы чат оставался в живых немного дольше. Также приветствуются альтернативные методы.

1 Ответ

2 голосов
/ 26 мая 2011

Объект кеша по своему дизайну будет автоматически сбрасывать срок действия при каждом обращении к нему. Все, что вам нужно сделать, это попытаться получить объект, если он равен нулю, установить его со скользящим сроком действия, как у вас сейчас, если нет, вернуть его. Просто получив его, срок действия сбрасывается. Вот так

public static object CachedItem
{
    get
    {
        string key = "item11"; // users share the object at this key
        object o = Cache[key];
        if (o == null)
        {
            o = {Get from some source};
            Cache.Add(key, o, null, Cache.NoAbs..., new TimeSpan(0,5,0), High, Removed);
        }

        return o;
    }
}
...