'cache'에 해당되는 글 2건

  1. 2010.12.23 Cache(캐시) 관련
  2. 2009.11.27 잘 바뀌지 않는 데이터에 대한 캐시(Cache) (1)

Cache(캐시) 관련

DotNet 2010.12.23 14:14 |
1. DB Trigger 를 통한 캐시 expire : 디비 수정시 트리거를 통해 WCF 호출=> App Server 의 캐시 삭제.
http://www.devsource.com/c/a/Using-VS/Introducing-SQL-Server-2005s-CLR-Integration/

2. AOP Cache : http://cache.codeplex.com/
3. http://cascadeofinsights.com/post/1410736927/introducing-attribute-based-caching
4. http://aopcachingcomponents.codeplex.com/


가장 중요한 것은 1번에 대한 처리..
1. DB 사용자가 쿼리르로 데이터를 변경하는 경우가 없다면, 즉 데이터의 변경이 항상 Biz 를 통해 발생한다면,
    Biz 메소드의 업데이트 부분(Detete,Add 포함)에서 캐시를 날리면 됨(혹은 업데이트)
2. 만약 DB 에 직접 접속해서 쿼리를 수행하는 경우(DBA)를 고려한다면, 트리거를 이용하는 방법 뿐일듯.

SQL Cache InValidation(http://www.15seconds.com/issue/060330.htm)
을 사용하면 DB
Notification
을 보내주는 군요.

제가 필요하다고 생각했던 부분이 이미 제공되네요.

http://www.dotnetcurry.com/ShowArticle.aspx?ID=263&AspxAutoDetectCookieSupport=1

그렇다면, WCF
IIS
호스팅하면, ASP.NET 캐싱을 그대로 사용할 수 있지 않을까요?

http://msdn.microsoft.com/ko-kr/library/ee230443.aspx

가능하네요..^^




신고

'DotNet' 카테고리의 다른 글

PostSharp 을 이용한 PropertyChanged 이벤트 주입하기  (3) 2011.03.18
Cache(캐시) 관련  (0) 2010.12.23
리소스 사용하기(삽질기)  (1) 2010.05.24
[링크]AOP  (2) 2010.05.17
C# 4.0 에 추가된 기능들  (0) 2010.04.30
VS2010 beta2 동영상  (0) 2010.01.28

댓글을 달아 주세요

네이버 맵을 이용한 화면을 만들어야 하는 일을 하던 중 몇가지 이슈가 생겼다.

맵에 표시할 마커(맵에 올라간 아이콘 같은 표시.)들의 좌표를 매번 네이버에 물어봐야 한다는 것이다.
맵에 올릴 마커의 갯수가 100개라면 페이지 로딩시 100번의 위치를 조회해야한다.
속도도 속도지만, 매번 같은 데이터를 질의 하는 것은 낭비다.
또한 네이버 api   의 일일 쿼리 제한이 걸려있다.

맵에 올릴 마커의 갱신주기는 몇주 이상이다.(잘 바뀌는 데이터가 아니다.)
그렇다면 네이에 질의한 좌표를 디비에 저장하면 한번 물어본 위치는 다시 물어볼 필요가 없을 것이다.

하지만 역시 매번 페이지를 표시할 때 마다 디비를 조회해야 한다.
거의 변하지 않는 데이터를 매번 디비에 질의하는 것은  문제가 있어보인다.

그래서 서버메모리에 한번 질의된 내용을 캐시하고 캐시는 1일 주기로 갱신하게 처리했다.
닷넷 HttpContext 에 Cache 클래스가 만들어져 있다.
이것을 이용해 질의 된 내용을 저장하고 하루 동안은 디비에서 값을 읽지 않고 메모리 내용을 그대로 보여주게 하였다.

    /// <summary>
    ///  캐시에 넣을 객체
    /// </summary>
    public class CachedMarkers
    {
        public DateTime UpdateDate; //캐시 날자기록
        public string JsonString; //캐시된 내용
    }
.....  이처럼 캐시에 저장할 객체를 하나 만들고..

    if (context.Cache["Markers"] != null)
    {
           CachedMarkers Markers = (CachedMarkers)context.Cache["Markers"];

           if (Markers.UpdateDate.Day == DateTime.Now.Day) // 캐시가 유효한가?


..... 캐시된 내용이 있고 캐시날자가 유효하면 캐시에 내용을 바로 쓰자

               // 캐시가 없거나 유효하지 않을 때 캐시 다시 만들기
               CachedMarkers NewMarkers = new CachedMarkers();

                NewMarkers.JsonString = GetMarkersToJosn(GetInfo());
                NewMarkers.UpdateDate = DateTime.Now;

                context.Cache.Remove("Markers");
                context.Cache.Add("Markers", NewMarkers, null, DateTime.Now.AddDays(1),
                    Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);


거의 정적인 데이터에 대해 이 방법을 사용하면 사람이 느낄정도의 속도 향상이 나타난다.

신고

댓글을 달아 주세요

  1. qq123456 2011.09.20 14:41 신고 Address Modify/Delete Reply

    Expensive looking clothing not making too much of a stress http://www.viviennewestwoodonsale.uk.com/ style will do wonders if worn with a little bit of plaid designs. It
    on your purse strings. The punk style patterns are still in http://www.westwoodjewellerystore.com/ calls for a day out with your friends at the trendiest parties.

티스토리 툴바