>  기사  >  백엔드 개발  >  .net 캐시 - 파일 기반 캐싱

.net 캐시 - 파일 기반 캐싱

黄舟
黄舟원래의
2017-02-24 10:46:462335검색


1. .Net 캐싱에 대한 기본 지식

.net에서 지원되는 두 가지 종속성:


tbody> table>

만료 시간

CacheDependency

SqlDependency

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

表示对于SQL数据库的依赖

CacheDependency td>

SqlDependency

绝对过期时间

滑动过期时间

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

 

一个时间间隔,类型为TimeSpan

파일 또는 디렉터리에 대한 종속성을 나타냅니다

SQL 데이터베이스에 대한 종속성을 나타냅니다

절대 만료 시간

슬라이딩 만료 시간

특정 시점, 유형은 DateTime입니다.

A TimeSpan 유형의 시간 간격


우선순위: CacheItemPriority

많은 양의 데이터를 캐싱해야 하기 때문에 메모리가 제한되어 있을 경우 필요 시 중요하지 않은 데이터를 캐싱할 수 있도록 캐싱된 데이터를 우선적으로 처리해야 합니다. 우선순위는 캐시된 데이터의 중요도를 지정하는 데 사용됩니다. 중요한 데이터는 장기간 메모리에 보관될 수 있습니다.

삭제 알림

캐시된 데이터가 메모리에서 제거될 때 제공 가능 호출하는 알림 메커니즘 CacheItemRemovedCallback 대리자의 정의를 준수해야 하는 사용자 정의 메서드를 다시 사용합니다. .

특별 참고 사항:

1. 콜백 타이밍은 예측할 수 없으며 가정할 수 없습니다. 콜백 메서드의 실행 스레드에 HttpContext의 컨텍스트가 있는 경우 요청 컨텍스트가 없을 때 Cache 개체에 대한 참조를 얻으려면 HttpRuntime의 캐시 속성을 통해 애플리케이션의 캐시를 사용할 수 있습니다.


2. 페이지에서 콜백 메소드로 인스턴스 메소드를 사용할 수 없습니다. 페이지에서 콜백 메소드를 차단하는 경우 콜백 메소드를 가리키는 참조가 가비지 수집 메커니즘을 방해하므로 메모리가 빨리 소모됩니다.


3. 콜백 메소드는 일반적으로 사용자 정의 클래스의 정적 메소드를 사용하거나 페이지 객체의 정적 메소드를 사용하여 구현됩니다.

두 번째, 파일 기반 캐싱 예시

먼저 테스트 페이지에 라벨을 추가하세요.

  <asp:Label Text="" runat="server" id="label1"/>
다음으로 캐시 관리 클래스를 추가합니다.

<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>
여기서는 캐시의 Add 메소드와 Insert 메소드를 구분합니다.


Add 호출 시 추가할 캐시 항목이 존재하면 호출이 실패하지만 삽입을 사용하면 새로 삽입된 값이 원래 값을 덮어씁니다.


webform1에서 테스트할 줄을 추가합니다:
 protected void Page_Load(object sender, EventArgs e)
        {
                this.label1.Text = CacheManager.Message;   //获取缓存

        }
파일의 내용을 읽은 것을 볼 수 있습니다. 5초 후에 만료되도록 설정되어 있으므로 5초 후에 새로 고칩니다. 그러나 여러 테스트를 통해 새로 고침 후 만료가 발생하는 정확한 시간이 5초가 아니라는 사실을 확인했으며 타이밍도 확인했습니다. 콜백은 예측할 수 없습니다. 위 내용은 .net 캐시 - 파일 기반 캐시 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.