Cache .net - mise en cache basée sur les fichiers

黄舟
Libérer: 2017-02-24 10:46:46
original
2329 Les gens l'ont consulté


1. Connaissance de base de la mise en cache dans .Net

Deux dépendances prises en charge dans .net :


tbody> table>

Délai d'expiration

CacheDependency

SqlDependency

表示对于文件或者目录的依赖

表示对于SQL数据库的依赖

CacheDependency td>

SqlDependency

绝对过期时间

滑动过期时间

一个特定的时间点,类型为DateTime

 

一个时间间隔,类型为TimeSpan

Indique une dépendance à l'égard de fichiers ou de répertoires

Indique une dépendance à la base de données SQL

Délai d'expiration absolu

Délai d'expiration glissant

Un moment spécifique, tapez DateTime

A intervalle de temps de type TimeSpan


Priorité : CacheItemPriority

Puisque nous devons mettre en cache une grande quantité de données, lorsque la mémoire est limitée, nous devons donner la priorité aux données mises en cache afin que les données sans importance puissent être mises en cache en cas de besoin. La priorité est utilisée pour spécifier l'importance des données mises en cache. Les données importantes peuvent être conservées en mémoire pendant une période plus longue.

Notification de suppression

Peut être fournie lorsque les données mises en cache sont supprimées de la mémoire Un mécanisme de notification à appeler renvoie les méthodes définies par l’utilisateur, qui doivent être conformes à la définition du délégué CacheItemRemovedCallback. .

  <asp:Label Text="" runat="server" id="label1"/>
Copier après la connexion

Remarque spéciale :

1. Le moment d'un rappel est imprévisible et ne peut être présumé se produire. Lorsque, le thread d'exécution de la méthode de rappel a le contexte de HttpContext. Afin d'obtenir une référence à l'objet Cache lorsqu'il n'y a pas de contexte de requête, vous pouvez utiliser le cache de l'application via l'attribut cache de HttpRuntime.

<span style="font-size:14px;">namespace 基于文件的缓存依赖
{
    public class CacheManager
    {
        public static string Message {

            get {
                HttpContext context = HttpContext.Current;

                //首先从缓存中获取
                string message = context.Cache["Message"] as string;

                //如果缓存中没有数据
                if (message==null)
                {
                    string path = context.Server.MapPath("TestFileCache.txt");
                    message = System.IO.File.ReadAllText(path);

                    //将信息保存到缓存中,设置响应的过期时间为1分钟
                    context.Cache.Add(
                        "Message",
                        message,
                        new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖
                        System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间
                        new TimeSpan(0, 0, 5),//缓存的时间
                        System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级
                        Callback); //过期时的回调
                    
                }

                return message;
            }
        
        }


        /// <summary>
        /// Callbacks the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        /// <param name="reason">The reason.</param>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks>
        private static void Callback(
            
            string key,
            Object value,
            System.Web.Caching.CacheItemRemovedReason reason
            //原因
            ) {

                if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)
                {
                   HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期");
                    
                }
                }
           
        
        }

}</span>
Copier après la connexion

2. Vous ne pouvez pas utiliser de méthodes d'instance comme méthodes de rappel sur la page. Lors du blocage de la méthode de rappel sur la page, la référence pointant vers la méthode de rappel empêchera le mécanisme de récupération de place, donc. la mémoire sera rapidement épuisée.

3. La méthode de rappel est généralement implémentée via la méthode statique de la classe personnalisée, ou en utilisant la méthode statique de l'objet page.

Deuxième exemple de mise en cache basée sur des fichiers

Ajoutez d'abord une étiquette sur la page de test :
 protected void Page_Load(object sender, EventArgs e)
        {
                this.label1.Text = CacheManager.Message;   //获取缓存

        }
Copier après la connexion

Ensuite, ajoutez la classe de gestion du cache :

Ici, distinguer la méthode Add et la méthode Insert du cache :

Lors de l'appel à Add, si l'élément de cache à ajouter existe Si tel est le cas, l'appel échouera ; mais si insert est utilisé, la valeur nouvellement insérée écrasera la valeur d'origine.


Dans webform1, ajoutez une ligne à tester : Vous pouvez voir que le contenu du fichier a été lu. Comme il doit expirer après 5 s, nous l'actualisons après 5 s : . Cependant, grâce à plusieurs tests, nous avons constaté que l'heure exacte d'expiration après l'actualisation n'est pas de 5 secondes, et nous avons également vérifié que le timing de le rappel n'est pas acceptable. Prédictif . Ce qui précède est le contenu du cache .net - cache basé sur des fichiers. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!