نقل قول: Cache در Asp.net
اين روش بر روي سايت هايي با حجم بالا نتيجه چشم گيري داره(لوستر بايد چشمگير باشه!)
اگه شما صفحه اي که شامل نمايش محصولات هست رو 20 ثانيه کش کنيد يعني تعداد عملايت را محدود کرده ايد(حدود 3 فرمان در دقيقه(
بدون کش به ازاي هر فرمان يک بار بايد به سرور مراجعه شود
البته اين بدان معني نيست .!(کدوم معني؟)
اگر سيستم مبع داده را ضعيف ببينه آن را release ميکنه
با وجود اين خاصيت مي توانيم بدون ترس از کش استفاده کنيم
در قسمت اول در مورد varybyparam صحبت نکردم.کسي هم نپرسيد!
ما مقدار آن را برابر None قرار داديم
اين بدان معناست که شما احتياج به نگهداري يک کپي از صفحه را داريد.
حالا تصور کنيد ورود به آن صفحه با querystring باشد.
به نظر شما آيا کش براي يک کاري به اين پويايي کاربرد داره؟
وقتي که اطلاعات را به کوئري استرينگ وارد شويد.صفحاتي که در کش داريد expire ميشوند.
براي اين منظور مقدار varybyparam attribute را برابر "*"
وقتي اطلاعات را مي فرستيم asp.net ابتتدا querystring را امتحان مي کند که آيا با قبلي يکي است و اگر بله آيا داخل کش است يا نه.
اگه جواب هردو درست باشد صفحه از کش ارسال مي شود در غير اين صورت يک کپي جديد داخل کش گذاشته ميشود.
modify کردن cache :
<%@ outpucache duration="30" cacheprofile="pro1" varybyparam="None" %>
in web config :
<system.web>
<caching>
<outputcachesetting>
<outputcacheprofile>
<add name="pro1" duration="60" />
</outputcacheprofile>
</outputcachesetting>
</caching>
</system.web>
نقل قول: Cache در Asp.net
نکاتي پيرامون کش :
the cache object is thread-safe :براي هر بار اضافه کردن کش نيازي به lock&unlock کردن آن نيست
اگر آبجکتي داشته بتشيم که بيشتر از يک کلاينت به آن دسترسي داشته باشد که ممکن است داده invalid وارد کند.
items in the cache are removed automaticlly : اگر داده expire شده باشد آنها را رها مي کند.
the cache object is support dependencies : شما مي توانييد link شي کش را به يک ديتابيس -جدول -فايل.
اگر اين منبع تغيير تغيير کند شيء کش شما به صورت خودکار نامعتبر و آزاد مي شود.
نقل قول: Cache در Asp.net
دستتون درد نکه بابت مطالب مفیدتون
نقل قول: Cache در Asp.net
یک سوال برام پیش اومده شما از مزایای cache گفتین می خواستم بدونم معایب استفاده از ان جیه؟
نقل قول: Cache در Asp.net
راستش دوست عزیز عرض کنم به نظر بنده اگه به موقع و به جا ازش استفاده بشه عیبی نداره بلکه عالیه
درضمن همیشه کش کردن هزینه بره و حافظه رو اشغال میکنه
ولی ما باید اینو فدا کنیم برای بالا بردن کارایی
توی صفحه اخبارتون مثلا از این قضیه استفاده کننید تا رضایت بینندگان سایتتون رو ببینید
نقل قول: Cache در Asp.net
راه دوم :
اضافه کردن ايتم به کش است به روش زير:
cache.insert("ItemName",object,dependency,تاري خ انقضا, مدت زمان اعتبار بدون استفاده)
ItemName:نام ايتم مود نظر براي اضافه کردن به کش است
Object:مقداري است که به ايتم نسبت داده مي شود
dependency : بعدا توضيح ميدم
تاريخ انقضا: مدت زماني که اعتبار دارد
مدت زمان اعتبار بدون استفاده:مدت زماني که بعد از استفاده نشده از آن وشي آزاد مي شود.
exp:
cache.insert("myitem","Farshad",nothing,datetime.m axvalue,timespan.minute(10))
مقدار فرشاد را داخل متغيير myitem ميريزد و اگر پس از 10 دقيقه اگر استفاده نشود آزاد مي شود.
نقل قول: Cache در Asp.net
در اين مثال ديتا ستي را پر ميکنيم و آن را کش ميکنيم و در صفحه ديگر اطلاعات آن راباز خواني ميکنيم.
مثال : پر کردن اطلاعات درون ديتاست-اضافه کردن به کش'
'In Form 1
'In Button_Click
Dim cnn As New sqlconnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True")
Dim dap As New SqlDataAdapter(" SELECT * FROM [Alphabetical list of products]", cnn)
Dim ds As New Data.DataSet
dap.Fill(ds)
Cache.Insert("ds", ds)
Response.Redirect("default2.aspx")
باز خواني از کش و نمايش'
'In Form 2
'In form_Load
Dim ds As Data.DataSet
ds = CType(Cache("ds"), Data.DataSet)
For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
Response.Write(ds.Tables(0).Rows(i)(1).ToString)
Next
نقل قول: Cache در Asp.net
Cache Dependency :در مورد اين موضع گفتم بعدا بحث ميکنم .
اين مورد به شما اجازه مي دهد که يک Cache Item رو به يک يا چند منبع خاص نسبت دهديد.
اما اين کار چه فايده اي داره؟
فرض کنيد يک ديتا ست رو پر کردين از يک جدول
اما اين جدول شما تغيير کردن
نفري که ميخواد از صفحه استفاده کنه اطلاعات جديد رئ نميبينه
اما اگر از cache dependency استفاده کنيد و اون ديتابيس رو بهش نسبت بدين به محض تغير در داخل آن اين ايتم به طور خود کار پاک مي شود.
کد :
Dim CD1 as new CacheDependency(server.mappath("1.xml"))
cache.insert("myitem",ds,CD1)
Combine Cache Dependency(aggrigate Cache Dependency):
حالا فرض کنيد بخواين ايتم خودتون رو به چند منبع وابسته کيند به روش زي عمل ميکنيد .
کد :
Dim CD1 as new CacheDependency(server.mappath("1.xml"))
Dim CD2 as new CacheDependency(server.mappath("2.xml"))
Dim CD() as new CacheDependency={CD1,CD2}
Dim ACD as new aggrigateCatcheDependency()
Acd.add(CD)
cache.insert("myitem",ds,Acd)
نقل قول: Cache در Asp.net
چجوری می تونم اطلاعات رو تا موقعی که توی دیتابیس آپدیت نشدن کش کنم و وقتی که آپدیت شدن توی صفحه هم اطلاعات جدید بیاد؟!
نقل قول: Cache در Asp.net
چه تفاوتي بين نگهداري اطلاعات توي cach يا نگهداي اونها توي session هست؟ كدوم يكي كارايي بالاتري دارند و فشار كمتري رو به منابه وب سرور وارد مي كنند؟
من يه سيستم تحت وب دارم كه براي نگهداري داده هاي بزرگم(خيلي بزرگم) مثل يك جدولي كه از sql بازيابي كردم، از session استفاده مي كنم. آيا اين كار اشتباه نيست؟ راهكار بهتر كدومه؟
نقل قول: Cache در Asp.net
از کد زیر برای cache در page استفاده می کنم
<%@ outputcache duration="20" varyByParam="None" %>
اما برای مدت زمان زیاد مثلا چهار ساعت جواب نمیده
برای چهار ساعت duration را برابر 14400 قرار میدم
اما عملا کمتر از 20 دقیقه تو حافظه نگه میداره.
چند تا مثال برای Cache در Asp.net