J'ai donc un processus qui fonctionne à minuit qui définit un point de départ et de fin d'un objet flash. Cela n'a besoin que d'exécuter une fois par jour, alors je me cache évidemment le jeu de résultats.
Cependant, le problème que je suis en cours est, si les données sont toujours en cache après midnite, cela ne tire pas dans les données les plus correctes. , jusqu'à ce que le cache expire. P>
J'ai essentiellement besoin du cache d'expirer à 11h59:59, de sorte qu'à 12h00, il reçoit les données correctes. P>
Je suppose Une dépendance au cache SQL sur la table que je tire les données de ce serait idéal, mais je n'ai jamais défini cela auparavant. p>
existe un moyen de dire au cache de supprimer un élément spécifique à la norme exacte ? P>
Merci gars! p>
- expiration absolue --- p>
Je pense que je l'ai eu: P>
DateTime expireWeights = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999);
Cache.Insert("CacheItemName", itemToCache, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration);
3 Réponses :
Si vous regardez ici , sous «Dépendance temporelle», il montre comment définir l'élément à expirer à une heure précise. Est-ce ce que vous cherchez? P>
Pas vraiment. Les dépendances à base de temps ne sont pas absolues. Je ne peux pas le dire de ne pas clarifier exactement la norme, je peux seulement dire "le clair en 10 minutes ou 2 heures"?
Un meilleur lien serait: msdn.microsoft.com/en-us/Library/ 4Y13WYK9.aspx - Cependant, vous devrez travailler à chaque heure d'installation à chaque fois que vous insérez l'élément, la date d'aujourd'hui, l'heure de 23:59:59 et assurez-vous que vous définissez le calendrier sur cache. Oslididingexpiration code>
@Jackm: OK, mais si vous connaissez l'heure actuelle, vous pouvez calculer trivialement combien de minutes jusqu'à minuit. De plus, ce que Zhaphe a déclaré à propos de NoslididingXpiration exactement correct.
Vous pouvez définir un temps d'absoluexpiration sur l'objet cache, qui est une date d'heure. P>
Vous pouvez également combiner une absoluexpiration avec une expendance sqlcached. p>
En ce qui concerne la question de ce qui ne tire pas les nouvelles données lorsque le cache expire: vous pouvez filer un cacheItemRemovedCallback pour recevoir une notification de la date à laquelle il expire, et rafraîchissez le cache à ce moment-là. P>
Alors quelque chose comme ça? DateTime expireweights = nouvelle dateTime (DateTime.now.year, DateTime.now.month, DateTime.Now.day, 23, 59, 59, 999); Cache.insert ("cachetitemnameamame", liste, null, expire poids lourds, system.web.caching.cache.noslididingexpiration);
Bien sûr, sauf que j'utiliserais utcnow au lieu de maintenant et j'en utiliserais une seule instance au lieu de créer trois autres.
Je ne comprends pas pourquoi vous avez un problème avec une expiration absolue? Vous pouvez indiquer la datetime exacte dans laquelle l'élément expirera du cache. Par conséquent, la ligne de code suivante insérera "MyObject" dans le cache sous la clé "MyKey" et expirera à minuit le lendemain (peu importe quand il entre dans le cache).
Cache.Insert("MyKey", myObject, null, DateTime.Today.AddDays(1), TimeSpan.Zero);
Je suppose que ma confusion était si vous ajoutez des jours, s'il était entré à 13h, cela expirerait le lendemain à 13h00.
Oui, si vous ajoutez des jours à DateTime.Now, alors oui, mais si vous ajoutez des jours à DateTime.Today, il aura déjà dépouillé le temps libre.
Ou peut-être datetime.today.addseconds (86399) pour obtenir 23:59:59? Dunno. On dirait que tirer le mois de la journée et l'année de DateTime.utcnow pourrait être un peu plus propre. Vraiment le même résultat final, cependant.
En outre, si vous en avez besoin pour expirer à 23: 59: 59.999 au lieu de minuit le lendemain, vous pouvez utiliser System.DateTime.today.Addddays (1) .Addmilliseconds (-1) Je trouve un lot "plus gentil" que de bâtir Une date utilisant l'année, le mois, la journée, l'heure, la minute, la seconde, le milliseconde comme vous l'avez dans vos modifications.
Une autre option ... si elle doit être dans UTC, vous pouvez toujours utiliser system.datetime.utcnow.date.adddays (1) .Addmilliseconds (-1)
+1 question intéressante. Je suis également intéressé par la réponse.
L'absoluteeexpiration est une date d'heure, pas un delta. Voir ma réponse ci-dessous.
N'oubliez pas de choisir une réponse ...