PDA

View Full Version : استفاده از کش در سبد خرید



bbc_sh
شنبه 05 مرداد 1387, 11:32 صبح
میشه درباره کش توی asp.net یه سری مقاله معرفی کنید.برای قسمت سبد خرید.ممنون

Chabok
دوشنبه 07 مرداد 1387, 19:14 عصر
با سلام
یک راهنمایی + نظر :
روی سبد خرید اگه کش بزارید که به روز نیست
چون باید با اضافه کردن کالا به سبد خرید اون رو به روز کنید . سبد خرید چون بخشی است که بیشتر از سایر بخش های یک فروشگاه تغییر میکنه کش زیاد به کارتون نمیاد .

اصولا کش برای قسمت هایی که اکثر اوقات ثابت هستن استفاده میشه . مثلا برای منوهای داینامیک یک سایت که اصولا همیشه در حال تغییر نیست .

موفق باشید .

bbc_sh
دوشنبه 07 مرداد 1387, 21:33 عصر
سلام
پس وقتی که توی یه فروشگاه مشتری کالایی رو به سبد خرید اضافه میکنه از چی استفاده میشه؟(منظورم قبل از پرداخت هزینه است) وقتی که مرتب چند کالا رو به سبد اضافه میکنه این کالا ها کجا نگهداری میشن؟

jaza_sa
دوشنبه 07 مرداد 1387, 21:52 عصر
سلام
منم با جناب Chabok (http://barnamenevis.org/forum/member.php?u=6919) موافقم . به نظرم در این زمینه نباید از Cache استفاده کرد
به نظرم اگر از Cookie ها یا Session استفاده کنید ، بهتره

موفق باشید

hadi000333
سه شنبه 08 مرداد 1387, 03:16 صبح
خیلی راحت می تونی از cache استفاده کنی در ضمن مخالف نظر دوستان هستم
برای ذخیره سبد خرید بهتره از profile استفاده کنی
و از cache dependency استفاده کنی تا سبد خرید همیشه بروز باشه
از طریق این video learning راحتتر از همه جا می تونی cache گذاری رو یاد بگیری
یه سر به این لینک بزن
http://www.asp.net/learn/videos/
این قسمت :
#3 | How Do I:
Make use of Caching?

bbc_sh
سه شنبه 08 مرداد 1387, 09:36 صبح
آقا بالاخره ما نفهمیدیم,catch یا sessien

twelve
سه شنبه 08 مرداد 1387, 11:42 صبح
آقا بالاخره ما نفهمیدیم,catch یا sessien
Cookie!!!!

Behrouz_Rad
سه شنبه 08 مرداد 1387, 12:48 عصر
البته نظرات دوستان محترمه اما فکر می کنم نظرات غیر کارشناسانه و بدون تحقیق برخی، ذهن دوستمون رو آشفته می کنه!
برای سبد خرید از Cache استفاده کنید.
کلاسی ایجاد کنید که مشخصه های محصول رو در خودش ذخیره می کنه. مشخصه هایی همچون نام محصول، قیمت، تعداد خریداری شده و ...
نقش Generic ها در دات نت در این حالت بسیار سازنده است. شما لیستی از محصولات از نوع کلاس رو در یک لیست Generic از نوع کلاس ذخیره و اون کلاس رو در Cache نگهداری می کنید.
هر فرد یک Cache جدا برای خودش در سیستم باید داشته باشه. نام Cache می تونه بر اساس نام کاربری کاربر باشه.
هر زمان که کاربر محصولی رو به منظور اضافه کردن به سبد خرید انتخاب کرد، شما Unboxing انجام میدید، لیست Generic رو بازیابی، یک محصول به اون اضافه و در نهایت مجددا Boxing و در Cache نگهداری می کنید.
توضیحات تئوری فوق رو با تلاش خودتون عملی بفرمایید.

موفق باشید

Chabok
سه شنبه 08 مرداد 1387, 23:03 عصر
با سلام

راستش چون من خودم روی فروشگاهی که نوشتم روند سبد خرید روی دیتابیس بود و ذهنم روی اون بود تصور کردم که دوستمون هم همین کار رو کردن و باز هم تصور کردم که مثل خودم سبد خرید یک یوزر کنترل است که میخواهند اون رو کش کنن .

برای همین عرض کردم که چون مدام تغییر میکنه کش کردنش فایده ای نداره .

نمیدونستم که کل سبد خرید رو میخوان بر مبنای کش انجام بدن .

باز هم معذرت . خدانگهدار

nazaninam
سه شنبه 08 مرداد 1387, 23:20 عصر
سلام
استاد راد در بحثی که قبلا در مورد سبد خرید شده بود شما پیشنهاد دیتابیس را داده بودید :
http://barnamenevis.org/forum/showpost.php?p=150889&postcount=2
آیا استفاده از کش و یک کلاس ژنریک به روش فوق ارجحیت داره ؟ میشه بیشتر توضیح بدید
ممنون

bbc_sh
چهارشنبه 09 مرداد 1387, 00:07 صبح
سلام
وقتی کاربری وارد محیط کاربری خودش میشه درواقع یه سشن داره دیگه.وقتی که برای سبد خرید از کش استفاده میشه آیا باید بازهم باید برای قسمت ورود کاربر از سشن استفاده کرد یا نه؟ ,همه قسمت ها با کش هست؟میشه یه منبع خوب معرفی کنید .اون ویدیویی که دوستمون گفت دیدم ,دقیقا مطمئن نیستم که به درد کار من میخوره ؟ازش چیزی دستگیرم نشد.

Behrouz_Rad
چهارشنبه 09 مرداد 1387, 00:37 صبح
در بحثی که قبلا در مورد سبد خرید شده بود شما پیشنهاد دیتابیس را داده بودید :
آیا استفاده از کش و یک کلاس ژنریک به روش فوق ارجحیت داره ؟

بله. ارجحیت داره.
یکی از مزایای Cache این هست که میشه برای اون زمان Expire تعیین کرد تا اگر بعد از مدت مشخصی به اون مراجعه صورت نگرفت خود به خود حذف بشه.

bbc_sh@
منبع خاصی وجود نداره. برنامه نویسی یعنی ایجاد و حل یک الگوریتم. این توضیحات، الگوریتم هستند و پیاده سازی اونها بر عهده ی خواننده است.

موفق باشید.

bbc_sh
چهارشنبه 09 مرداد 1387, 11:20 صبح
آیا نوع نوشتن سبد خرید(منظورم استفاده از catch, session ,یا....وحتی ذخیره سبد در پایگاه داده) به نوع اجناسی که در یک فروشگاه اینترنتی عرضه میشه بستگی داره؟چون فروشگاه من چیزهای جزئی مثل کتاب یا cd و...نیست وممکنه در هر دفعه از سفارش مبلغی که طرف خریداری میکنه بالای بیست میلیون باشه.

Behrouz_Rad
چهارشنبه 09 مرداد 1387, 17:45 عصر
شما چیزی به جز اطلاعات محصولات رو در Cache ذخیره نمی کنید.

bbc_sh
چهارشنبه 09 مرداد 1387, 22:57 عصر
وقتی که قراره مشخصات یک کالا توی گریدویو , و گریدویو هم در کش نگهداری بشه , حتما باید از دیتاست استفاده کرد؟

Behrouz_Rad
چهارشنبه 09 مرداد 1387, 23:41 عصر
نیازی به DataSet ندارید. کلاس شما حاوی داده های مورد نیاز هست . مشخصات محصولی که انتخاب میشه به عنوان یکی از آیتم های لیست Generic قرار می گیره و به راحتی قابل بازیابی هست.

موفق باشید.

bbc_sh
پنج شنبه 10 مرداد 1387, 00:15 صبح
منبعی درباره generic list هست؟باید برم C# کار کنم؟

Behrouz_Rad
پنج شنبه 10 مرداد 1387, 06:44 صبح
باور کن منبعی بهتر از گوگل و MSDN برای Generic وجود نداره:
http://www.google.com/search?hl=en&q=generic%2Bvb.net+OR+c%23&btnG=Google+Search

اگر با VB.NET کار می کنی نیازی به سویچ کردن به #C نیست. Generic ها در VB.NET هم با کلمه ی کلیدی Of و سپس نوع ساختمان داده مشخص میشن.
اگر با کمبود زمان مواجه هستی، به جای Generic از ArrayList استفاده کن هر چند که این کار هزینه ی Boxing و Unboxing به همراه داره.

موفق باشید.

Behrouz_Rad
پنج شنبه 10 مرداد 1387, 09:20 صبح
من امروز کدهای BehooRssGenerator رو منتشر کردم. در این کتابخانه از Generic ها استفاده کردم. می تونی ازش ایده بگیری.
http://www.barnamenevis.org/forum/showthread.php?t=101923

موفق باشید.

bbc_sh
جمعه 11 مرداد 1387, 11:12 صبح
اگه برای سبد خرید از session استفاده بشه محتویات سبد توی پایگاه داده ذخیره میشن؟

Behrouz_Rad
جمعه 11 مرداد 1387, 12:20 عصر
از Session می تونی استفاده کنی اما Cache در این حالت مورد کاربرد بیشتری داره.
پس از پایان خرید کاربر و ثبت سفارش ها، مطمئناً محتویات سبد خرید باید در دیتابیس ذخیره بشه.
البته این به طراحی و الگوریتم شما هم بستگی داره.

موفق باشید.

HamedNET
جمعه 11 مرداد 1387, 12:34 عصر
سشن سریع ترین راهه

Behrouz_Rad
جمعه 11 مرداد 1387, 14:11 عصر
سشن سریع ترین راهه

خیر. اینطور نیست.

mostafa_sgh
جمعه 11 مرداد 1387, 16:23 عصر
خیلی راحت می تونی از cache استفاده کنی در ضمن مخالف نظر دوستان هستم
برای ذخیره سبد خرید بهتره از profile استفاده کنی
و از cache dependency استفاده کنی تا سبد خرید همیشه بروز باشه
از طریق این video learning راحتتر از همه جا می تونی cache گذاری رو یاد بگیری
یه سر به این لینک بزن
http://www.asp.net/learn/videos/
این قسمت :
#3 | How Do I:
Make use of Caching?

سلام به همه دوستان

البته جنگ و جدال اصلاً تاثیری در روند پیشرفت کار دوستمون نداره .

من هم با نظر رئیسمون موافقم.

استفاده از Cache تو این مورد هم مطمئن تره و هم کارائیش بیشتره.

البته پیشنهاد میکنم برای یادگیری بیشتر :لبخند: به حرف دوستمون گوش کنید و یه سری به لینک بالا بزنید .( ?How Do I:Make Greater use of Caching )

bbc_sh
شنبه 12 مرداد 1387, 20:20 عصر
من ویدیو سایت asp.net رو دیدم.توی اون یه ساعت رو گذاشته بود توی کش که به مدت بیست ثانیه ثبت بود و بعد با زدن رفرش تغییر میکرد.حالا میخوام ببینم این روشی که توی ذهن من هست درست هست یا نه؟یه گریدویو توی کش که محتویات سبد خرید رو داره وقتی تغییر میکنه که یه کالای دیگه به سبد خرید اضافه بشه و وقتی از بین میره که کاربر از سیستم خارج بشه.تایمی که براش تنظیم میشه مثل همون مثاله باید تنظیم کرد؟

mostafa_sgh
شنبه 12 مرداد 1387, 23:35 عصر
خیر دوست عزیز

برای زمان Cache بوسیله این راه باید از راه زیر استفاده کنی ، البته به این مقاله فارسی یه سری بزنی حتماً متوجه میشی.

البته بستگی به نوع کارتون داره .



Cache.Insert("names", ds, cd,DateTime.Now.AddMinutes(60),TimeSpan.Ziro);


اینم لینکه مقاله : لینک (http://www.srco.ir/Articles/DocView.asp?ID=520)1 لینک2 (http://www.srco.ir/Articles/DocView.asp?ID=521)

موفق باشید

bbc_sh
یک شنبه 13 مرداد 1387, 21:53 عصر
وقتی کاربری وارد محیط کاربری خودش میشه من میخوام از سشن استفاده کنم و نمیخوام از کنترل های login استفاده کنم.حالا میخوام بدونم که این کار عملیه که برای این قسمت از سشن استفاده کنم و برای سبد خرید از کش؟

bbc_sh
دوشنبه 14 مرداد 1387, 22:16 عصر
کلاسی ایجاد کنید که مشخصه های محصول رو در خودش ذخیره می کنه. مشخصه هایی همچون نام محصول، قیمت، تعداد خریداری شده و ...
نقش Generic ها در دات نت در این حالت بسیار سازنده است. شما لیستی از محصولات از نوع کلاس رو در یک لیست Generic از نوع کلاس ذخیره و اون کلاس رو در Cache نگهداری می کنید.
.
وقتی که کلاس رو داخل جنریک لیست قرار میدیم, واسه اینه که مثلا یک شخص میتونه چندتا محصول سفارش بده؟(یعنی مشخصه های محصول تکرار میشه؟)

هر فرد یک Cache جدا برای خودش در سیستم باید داشته باشه. نام Cache می تونه بر اساس نام کاربری کاربر باشه
یعنی من برای محیط کاربری افراد نمیخواد از سشن استفاده کنم؟مستقیما توی کش ذخیره کنم؟(از کنترل های login استفاده نمیکنم)

Behrouz_Rad
سه شنبه 15 مرداد 1387, 09:06 صبح
وقتی که کلاس رو داخل جنریک لیست قرار میدیم, واسه اینه که مثلا یک شخص میتونه چندتا محصول سفارش بده؟

بله.


یعنی من برای محیط کاربری افراد نمیخواد از سشن استفاده کنم؟مستقیما توی کش ذخیره کنم؟

اصلاً فرض کن Session وجود نداره! بله در Cache ذخیره کنید.

DotNet_King
سه شنبه 15 مرداد 1387, 10:00 صبح
بله.

اصلاً فرض کن Session وجود نداره! بله در Cache ذخیره کنید.


عذر می خوام من از اول در جریان این تاپیک نبودم ولی از این جمله شما میشه نتیجه گرفت که استفاده از کش برای ذخیره داده ها بهتر از سیشنه؟ میشه بگید تو چه مواقعی بهتره؟ یا اصلا همیشه کش بهتره؟

موفق باشید

bbc_sh
سه شنبه 15 مرداد 1387, 10:11 صبح
اصلاً فرض کن Session وجود نداره! بله در Cache ذخیره کنید.
مشخصات کاربری که وارد میشه (یوزر و پسورد و مشخصات فردی)تو پایگاه داده ذخیره میشه دیگه؟

Behrouz_Rad
سه شنبه 15 مرداد 1387, 10:16 صبح
متوجه نشدم...
شما یک دور به طور کامل الگوریتمی که در ذهنت هست رو توضیح بده تا با هم بررسی کنیم ببینیم چه تفاوت هایی در ذهن من و شما هست.
فقط خواهشاً خوب توضیح بدید که جای ابهامی باقی نمونه.

متشکرم.

bbc_sh
سه شنبه 15 مرداد 1387, 15:38 عصر
سلام.ممنون که حوصله به خرج میدید.
وقتی که کاربر روی باتن سفارش کلیک میکنه ,چک میشه که آیا کاربر وارد محیط کاربری خودش شده یا نه(اگه وارد شده باشه که هیچ ,اگه کاربر جدید باشه عضو سایت میشه ویک سری مشخصات رو وارد میکنه توی یه فرم)(از کنترل های login استفاده نمیکنم)حالا اگه کاربر عضو سایت شده باشه , من میخوام که وقتی رو ی سفارش محصول کلیک میکنه ,این محصول به سبد خریدش اضافه بشه و یه پیام هم روی صفحه مشاهده کنه که محصول به سبد خرید اضافه شده و میتونید برای انجام تغییرات به سبد خرید برید.(بعد از کلیک روی سفارش پرش نکنه به سبد خرید) . وقتی کاربر به سبد خرید میره این محصولات هنوز به پایگاه داده اضافه نشده ,کاربر مقدار محصول رو مشخص میکنه ,همچنین میتونه محصولات رو حذف کنه و وقتی که کلید ثبت سفارش رو زد محصولات به پایگاه داده اضافه میشن.توی قسمت مدیریت مدیر سیستم چک میکنه که آیا سفارش قابل قبول هست یا نه, اگه بود که لینک ارسال به بانک برای اون کاربر فعال میشه.(یه جوری به اون کاربر خبر داده میشه). من نام کاربری افراد رو میدونم چه طوری میشه تو سشن نگهداشت ولی توی کش نمیدونم.نمیدونم توی صفحات بعد چه طوری این نام کاربری چک میشه؟در ضمن هر کاربری یه کنترل پنل داره که میتونه مشخصات خودش رو تغییر بده.همینطور اون گریدویویی که توی سبد خرید هیت و همچنین توی کش قرار میگیه هم نمیدونو چه طوری باید باشه.در ضمن وقتی که کاربر محصولی رو سفارش داد تا قبل از پرداخت اینترنتی باید سبد خرید و اون محصولاتی رو که سفارش داده ببینه ولی نتونه تغییرات بده.

Behrouz_Rad
سه شنبه 15 مرداد 1387, 19:27 عصر
عرض شود که شما همش میگید نمی دونم! ;)
اجازه بده به شیوه ای متفاوت پاسخت رو بدم :)

کلاً برای اینکه بتونید با چیزی کار کنید نیاز به یک سری حداقل ها هست.
دلیل اینکه من از تدریس ASP.NET متنفرم اینه که فردی که هیچ چیزی از وب نمی دونه، میاد سر کلاس مینشینه و میخواد برنامه نویسی وب یاد بگیره... من باید برای اون HTML، JavaScript، SQL Server، C#، VB.NET، ساختار ASP.NET و هزاران مسئله ی دیگه رو تشریح کنم!

شما تا حالا کلاس ایجاد کردی؟ سعی کردی که وقتی چیز جدیدی معرفی میشه سمتش بری؟ آیا اصلا علاقه به یادگیری داری یا صرفاً به برنامه نویسی با دید مادی نگاه می کنی؟ آیا همیشه سعی کردی که به دانسته های قبلی اکتفا کنی و ترس و عدم حوصله باعث شده که به سمت مطالب جدید نری؟! چرا از Membership استفاده نمی کنی؟ آیا فکر می کنی کار با اون پیچیده ست؟ چرا با وجود اینکه چند هفته است که می دونی باید از Cache استفاده کنی همچنان نمی دونی که چطور باید ازش استفاده کنی؟ آیا مشکل زبان داری؟... اگر جوابت به تمامی سوالات من مثبته، پس شما اون "حداقل ها" رو نداری.

فکر می کنی برای من کاری داره که یک نمونه ی آماده از یک برنامه ی ساده ی سبد خرید رو واست بنویسم؟ اون موقع تو خوشحال میشی و کارت هم راه میفته و برای من دعا می کنی! اما آخرش چی؟ تضمین میدی که فردا سناریوی جدیدی به وجود نیاد؟ من به شخصه سعی می کنم علاوه بر اینکه به دوستان در حل مشکلاتشون کمک کنم، اون چیزهایی رو هم که بر حسب تجربه ی چندین ساله در بخش معنوی! برنامه نویسی یاد گرفتم انتقال بدم... اکثر دوستان در این فروم می دونن که من به کسی کد نمیدم! چرا؟ به جای اون الگوریتم رو تشریح می کنم و دوست دارم که دوست من تلاش کنه و خودش جواب سوالش رو به دست بیاره، اینجوری رضایت و احساس بهتر و بیشتری رو احساس می کنه. من هم در کنارشم و به اون کمک می کنم. :)
من پیشنهاد می کنم که شما اون حداقل ها رو یاد بگیرید و بعداً سوالتون رو بپرسید نه به صورتی که بخواید فردی برای تمامی سناریوی شما کد بده.

ببخشید که طولانی شد...
برادر شما: بهروز راد ;)

bbc_sh
جمعه 18 مرداد 1387, 11:01 صبح
سلام
من از شما کد نخواستم.خودتون گفتید الگوریتم رو تشریح کن منم تشریح کردم.به دلایلی نمیتونم از membership و کنترل های login استفاده کنم(دلیلش کد نوشتن و بلد نبودن نیست)تا آلان هم هرچی یاد گرفتم در عرض یه مدت کوتاه خودم دنبالش رفتم.مشکل زبان هم ندارم .اگه شما اینطوری با یکی که تازه برنامه نویسی رو شروع کرده برخورد کنید, بیچاره دپرس میشه برنامه نویسی رو کنار میذاره ,ولی من جنبه ی خیلی بالایی دارم.اگر هم میبینید اینطوری سوال میپرسم شاید به خاطر کمبود وقتی هست که دارم.الآن هم فقط یه مشکل دارم.چون میخوام از سشن برای محیط کاربری افراد استفاده کنم و گریدویو رو هم که شامل آیتم های انتخابی کاربر هست رو هم توی کش نگهداری کنم و باید نام کش رو هم بر اساس نام کاربری افراد انتخاب کنم .آیا میشه اون نامی که توی سشن هست رو انتساب داد به نام کش.برای کار با کش مقاله زیاد خوندم با همین سه چهار خط کد نوشتن برای کش کار من راه میفته؟
ممنون

Behrouz_Rad
جمعه 18 مرداد 1387, 15:07 عصر
OK. as you relax.


آیا میشه اون نامی که توی سشن هست رو انتساب داد به نام کش

از متد Insert کلاس Cache برای قرار دادن کلاس در Cache استفاده کن. پارامتر اول متد Insert، نام Cache رو می پذیره که باید برابر با نام کاربری کاربر قرار بدی. در حالتی که مد نظرت هست، Session رو به پارامتر اول این متد نسبت بده.

برای دسترسی به آیتم(های) Cache شده به شکل ذیل عمل کن:


myGenericClass<type> bbc_sh = (myGenericClass<type>) Cache["myCache"];

موفق باشید.

bbc_sh
یک شنبه 20 مرداد 1387, 21:07 عصر
شما Unboxing انجام میدید، لیست Generic رو بازیابی، یک محصول به اون اضافه و در نهایت مجددا Boxing و در Cache نگهداری می کنید.
منظورتون از این جمله چیه؟

bbc_sh
یک شنبه 20 مرداد 1387, 22:37 عصر
public class basketitem
{
private string strproductid;
private string strproductname;
private int intquantity;
private decimal decunitprice;

public string productid
{
get { return strproductid; }
set { strproductid = value; }
}
public string productname
{
get { return strproductname; }
set { strproductname = value; }
}
public decimal unitprice
{
get { return decunitprice; }
set { decunitprice = value; }
}
public int quantity
{
get { return intquantity; }
set { intquantity = value; }
}
}
فقط همین یه کلاس کافی هست؟میتونم توی کد بیهایند فرمم اینو توی جنریک قرار بدم دیگه؟

bbc_sh
جمعه 25 مرداد 1387, 22:33 عصر
توی یکی از فریوم های سایت asp.net خوندم که نوشته بود:
The cache is designed to improve the performance of application and the data be cached should not be changed frequently. If the user changes the shopping cart frequently, it would be better that we save the data in the session or database.
میخوام ببینم درسته؟

Behrouz_Rad
یک شنبه 27 مرداد 1387, 15:28 عصر
فقط همین یه کلاس کافی هست؟

تحلیل و شناسایی موجودیت ها و اعضای اونها بر عهده ی شماست من از ساختار پروژه ی شما اطلاعی ندارم.


میتونم توی کد بیهایند فرمم اینو توی جنریک قرار بدم دیگه؟

بله می تونید. خواستن توانستن است.


توی یکی از فریوم های سایت asp.net خوندم که نوشته بود:
The cache is designed to improve the performance of application and the data be cached should not be changed frequently. If the user changes the shopping cart frequently, it would be better that we save the data in the session or database.
میخوام ببینم درسته؟

یک الگوریتم لزوماً از یک طریق قابل پیاده سازی نیست. با توجه به معیارهای مختلفی که ابزارهای موجود در اختیار ما قرار میدن و بررسی مزایا و معایب هر کدوم، بهترین رو انتخاب می کنیم.
نظر من بر روی Cache هست. دیتابیس سربار Connection به سیستم تحمیل می کنه و Session هم علاوه بر متکی بودن به کوکی و خطر Session Hijacking که البته چندان مهم نیست، کنترل زمان انقضای ضعیفی داره در صورتی که Cache کنترل کاملی در این زمینه ارائه می کنه.

موفق باشید.

mehdi_RM
چهارشنبه 03 مهر 1387, 12:40 عصر
نقل قول:
شما Unboxing انجام میدید، لیست Generic رو بازیابی، یک محصول به اون اضافه و در نهایت مجددا Boxing و در Cache نگهداری می کنید.


منظورتون از این جمله چیه؟

Behrouz_Rad
چهارشنبه 03 مهر 1387, 12:50 عصر
Boxing یعنی تبدیل نوع اصلی به نوع دیگه.
Unboxing یعنی تبدیل نوع دیگه به نوع اولیه.