PDA

View Full Version : یک سوال راجب Cache



theboy
شنبه 09 دی 1391, 17:18 عصر
سلام.
دوستان یه سوال برام پیش اومده.

ما دو جور می تونیم Cache رو ذخیره کنیم یکی تو کامپیوتر بازدید کننده یکی هم تو خود سرور(یه پوشه تو هاست). درست؟

خوب اگه من بیام کل یه صفحه رو توی سرور Cache کنم آیا اطلاعات این Cache برای همه هست؟(حتی کسانی که برای اولین بار می خوان صفحه رو باز کنند؟)

مثلا من یه صفحه دارم توش کلی queryهست! و نوشتم اگه کسی دیدیش Cache بشه. الان من دیدمش، شما هم یه ربع دیگه میای که ببینی، از همون Cache که توسط من ایجاد شده برای شما استفاده می شه؟ یا نه دوباره query ها از اول فرستاده میشن؟

bestirani2
شنبه 09 دی 1391, 17:37 عصر
بستگی به نوع سیستم کش داره
مثلاً کش Html فیزیکی درست کنی عیناً همون رو میبینه ولی از فایلی رو به صورت فیزیکی نباشه و یک سری داده های تعریف شده توسط برنامه باشه میشه واسه هر کاربر تفاوت ایجاد کرد
برای راحتی کار میتونید از یک فریم ورک استفاده کنید تا راحت هر کدام از این کار ها رو انجام بدید.

mamali-mohammad
شنبه 09 دی 1391, 17:41 عصر
به نظرم رو سیستم خود طرف بهتره
باعث میشه حجم بیخودی سرورت رو اشغال نکنه

rezaonline.net
شنبه 09 دی 1391, 17:51 عصر
ما دو جور می تونیم Cache رو ذخیره کنیم یکی تو کامپیوتر بازدید کننده یکی هم تو خود سرور(یه پوشه تو هاست). درست؟
شما دسترسی به کشی که توی مرورگر کاربر هست ندارید .
شما میتونید فقط به کوکی دسترسی داشته باشید .

در مورد کش هم بستگی به الگوی پیاده سازی شما داره ، من حدس میزنم تعریف شما از کش ، کش بصورت فایل هست .
انواع کش رو داریم mem , apc , zend , win که اکثرشون اطلاعات رو توی رم ذخیره میکنن ، هدف هم انتقال میزان بار از سی پی یو به رم هست .

کش در کل باید برروی اطلاعاتی باشه که دیر آپدیت میشن .

theboy
شنبه 09 دی 1391, 17:59 عصر
منظور من کشی هست که در php تعریف میشه:

ob_start();

این رو اگر در پوشه '/cache/' ذخیره کنم، فقط برای کسی که با بازدیدش ایجاد شده استفاده میشه یا برای همه استفاده می شه؟

theboy
شنبه 09 دی 1391, 18:02 عصر
بستگی به نوع سیستم کش داره
مثلاً کش Html فیزیکی درست کنی عیناً همون رو میبینه ولی از فایلی رو به صورت فیزیکی نباشه و یک سری داده های تعریف شده توسط برنامه باشه میشه واسه هر کاربر تفاوت ایجاد کرد
برای راحتی کار میتونید از یک فریم ورک استفاده کنید تا راحت هر کدام از این کار ها رو انجام بدید.
همون کش html فیزیکی میخوام!(چیزی که می خوام کاهش کوئری هاست).
اگر من اینو درست کنم، بعد خودم از صفحه بازدید کنم، بعدش شما بری بازدید کنی کش برای شما استفاده میشه دیگه نه؟ یا از اول برای شما کش جدید ساخته میشه و کوئری فرستاده میشه و....؟

rezaonline.net
شنبه 09 دی 1391, 18:29 عصر
ob_startکش نیست .
فقط بافر خروجی رو کنترل میکنه ، البته شما میتونید بافر خروجی رو بگیرید و ذخیره کنید توی یک فایل و بعدا بخونید ازش (ساده ترین و سطحی ترین نوع کش)

اگر من اینو درست کنم، بعد خودم از صفحه بازدید کنم، بعدش شما بری بازدید کنی کش برای شما استفاده میشه دیگه نه؟ یا از اول برای شما کش جدید ساخته میشه و کوئری فرستاده میشه و....؟
کش ربطی به بازدید کننده نداره .
کشی که شما میسازی یک فایل هست روی سرور .
کشی که قبلا ساخته شده برای همه استفاده میشه .

theboy
شنبه 09 دی 1391, 18:54 عصر
ob_startکش نیست .
فقط بافر خروجی رو کنترل میکنه ، البته شما میتونید بافر خروجی رو بگیرید و ذخیره کنید توی یک فایل و بعدا بخونید ازش (ساده ترین و سطحی ترین نوع کش)

کش ربطی به بازدید کننده نداره .
کشی که شما میسازی یک فایل هست روی سرور .
کشی که قبلا ساخته شده برای همه استفاده میشه .

دقیقا میخواستم به همین برسم!
پس اینطوری میشه تعداد query ها رو کاهش چشم گیری داد؟
مثلا اگه طوری تنظیم بشه که هر پست جدید که ارسال می کنم کش حذف بشه، و کش جدید ساخته بشه. اینطوری هم کوئری کم میشه و هم همه چیز عادیه!(چون هر پست جدید = کش اطلاعات جدید)
یعنی مثلا بین پست امروزم و پست فردام اگر 1000 تا بازدید(ip) داشته باشم و در صفحه 15 کوئری داشته باشم، به جای اینکه 15000کوئری ارسال بشه فقط 15 کوئری ارسال میشه!

به نظرتون این روش مشکلی داره؟

bestirani2
شنبه 09 دی 1391, 18:56 عصر
همون کش html فیزیکی میخوام!(چیزی که می خوام کاهش کوئری هاست).
اگر من اینو درست کنم، بعد خودم از صفحه بازدید کنم، بعدش شما بری بازدید کنی کش برای شما استفاده میشه دیگه نه؟ یا از اول برای شما کش جدید ساخته میشه و کوئری فرستاده میشه و....؟
هر کی بار اول بره کش ایجاد میشه و برای همه استفاده میشه چون اساس این نوع کش بدین صورت است که در آدرس وارد شده فایل فیزیکی میسازد
مثلاً site.com/post/4
به صورت کاملاً فیزیکی در فولدر post/4 فایل index.php ایجاد میشه
این کش از نظر کاهش بار سرور بهترین است ولی انعطاف کمی دارد
فرض کنید شما برای اولین نفر با Admin وارد صفحه ای میشید که اطلاعات بیشتری نسبت به دیگر کاربرها وجود داره ، این ذخیره میشه و تمام کاربر ها میبینند و برعکسش یک کاربر عادی وارد میشه و شما با وارد کردن آدرس اطلاعات مربوط به ادمین رو نمیبینید
باید یک تیکه کد بنویسید که بعد از هر درخواست Html رو به صورت فیزیکی بسازه و بعد در صورت آپدیت و یا مثلاً ارسال کامنت جدید و ... یک دستور بنویسید که فایل مربوطه را پاک کنه تا با ورود دوباره به اون صفحه از نوع ساخته بشه

bestirani2
شنبه 09 دی 1391, 18:59 عصر
از دیگر موارد کش به صورت فایلینگ که میتونی انجام بدی اینه که کوئری هات را با یک فرمت دلخواه و بر اساس یک سری معیار برای زمان و ... با یک فرمت دلخواه ذخیره کنی و کلاس که با دستورات اس کیو ال کار میکنه در ابتدا بیاد کش رو بررسی کنه
کاری که فریم ورک ها انجام میدهند
در نهایت میتونی از کش های دیگه مثل APC استفاده کنی که کد رو کامپایل میکنه و میریزه تو رم و همچنین کوئری هایی رو هم که میخواهید رو براتون کش می کنه
در نهایت باید به نکاتی توجه داشته باشید تا نمایش سایت به مشکل بر نخوره و بروز بمونه

rezaonline.net
شنبه 09 دی 1391, 21:23 عصر
نتیجه گیری آخر اینکه روی کش باید مدیرت داشته باشه .
نمونه استفاده من از کش فایلی بصورتی هست که اطلاعات واکشی شده رو کش میکنم ، هیچ موقع نمیام کل صفحه رو کش کنم .
اطلاعات کش شده هم بصورت دسته بندی هستن مثلا کش نتایج کوئری های جداول category , tag , post به اسم content ذخیره میشه .
هر وقت روی جداول اینسرنت جدید یا آپدیت داشتم کش حذف میشه و در صورت درخواست خودکار ساخته میشه .

روش هم که جناب bestirani2 گفتن روشی هست که اکثر فریم ورک ها استفاده میکنن و روش خوبی هست .

پیشنهادم به شما اینه نحوه کارکرد کش رو توی فریم ورک هایی چون fuel , yii , ci بررسی کنید .
خودتون کاملا متوجه میشید

eshpilen
یک شنبه 10 دی 1391, 10:14 صبح
دقیقا میخواستم به همین برسم!
پس اینطوری میشه تعداد query ها رو کاهش چشم گیری داد؟
مثلا اگه طوری تنظیم بشه که هر پست جدید که ارسال می کنم کش حذف بشه، و کش جدید ساخته بشه. اینطوری هم کوئری کم میشه و هم همه چیز عادیه!(چون هر پست جدید = کش اطلاعات جدید)
یعنی مثلا بین پست امروزم و پست فردام اگر 1000 تا بازدید(ip) داشته باشم و در صفحه 15 کوئری داشته باشم، به جای اینکه 15000کوئری ارسال بشه فقط 15 کوئری ارسال میشه!

به نظرتون این روش مشکلی داره؟
هندل کردن 1000 بازدید در 24 ساعت برای ضعیف ترین سرورها هم نباید مشکلی باشه که بخواید نگرانش باشید.
البته احتمالا منظور شما از این اعداد فقط مثال بوده، اما منظور منم اینه که معمولا تا نیاز واقعی به این مسئله پیش نیامده ضرورتی نداره و معقول هم نیست که برید و وقت و انرژی بذارید و کدنویسی اضافه بکنید که باعث افزایش حجم و پیچیدگی برنامه و بالا رفتن احتمال باگ هم میشه.

رضا قربانی
یک شنبه 10 دی 1391, 10:51 صبح
من خودم آخرین باری که از این نوع کش کردن (ذخیره در فولدر هاست) استفاده کردم به این صورت بوده :
وارد ادمین میشدم مطالب و محصولات جدید رو میذاشتم -- و سپس یه لینک توی ادمین گذاشته بودم برای حذف محتویات کش و پاکسازی کش رو میزدم --- و میرفتم صفحه رو یکبار رفرش می کردم تا کش های جدید رو بسازه.

در کل اینگونه کش کردن رو پیشنهاد نمی کنم.