首頁  >  文章  >  後端開發  >  .net快取-基於檔案的緩存

.net快取-基於檔案的緩存

黄舟
黄舟原創
2017-02-24 10:46:462329瀏覽


一,.Net中的快取基礎知識

.net中支援的兩種依賴:


ache

SqlDependency表示對於SQL資料庫的依賴滑動過期時間

表示對於檔案或目錄的依賴

絕對過期時間


一個特定的時間點,類型為DateTime         由於我們需要快取大量的數據,在記憶體有限的情況下,必須對快取的資料進行優先分類,以便在需要的時候,將不重要的資料從快取中移除。優先權用來指定快取資料的重要性,重要的資料可以更長時間地保存在記憶體中。  特別注意:
.

優先權  :   CacheItemPriority

 

刪除通知

        當被快取的資料從記憶中移除的時候,可以提供一個通知機制,來回呼使用者定義的方法,方法必須符合CacheRemoallbackItemRemoback的方法。 。


        1,回呼的時機是不可預知的,不能假定回調發生時,回調方法的執行緒存在線程的存在,Http物件的引用,可以透過HttpRuntime的cache屬性來使用應用程式的cache.

        2,不能在頁面上使用實例方法來作為回呼方法,當擋在頁面上使用回調方法時,由於指向回調方法時,由於指向回調方法的方法引用會阻止垃圾回收機制,因此會造成記憶體很快就耗光。

        3,一般透過在自訂類別的靜態方法實現回呼方法,或使用頁面物件的靜態方法來實現。 二,基於檔案的快取範例


先在測試頁上加label::接合著

  <asp:Label Text="" runat="server" id="label1"/>

這裡,區別下cache的Add方法和Insert方法:


      在呼叫Add的時候,如果要加入的快取項目存在的話,則會呼叫失敗;但是如果用insert插入,則新插入的valueue值會覆寫原來的value值。

     在webform1中,加入一行測試下:

<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>

5s後我們刷新下:

但是多次測試我們會發現,刷新後出現過期的準確時間並不是5s,同時驗證了

回調的時機是不可預知的

 以上就是.net快取-基於檔案的快取的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn