نمیدونم راهتون به API چت بات ها خورده یا نه
ولی یه مشکلی که شاید داشته باشید این هست که
وقتی میخواید سوال کاربر و OpenAi بدید تا جواب بهتون بده .
تو حالت عادی که rest api کال میکنید . به این صورت
احتمالا خیلی طول میکشه
چون باید تمام جواب و پردازش کنه یه جا درستش کنه و بهتون برگردونه
هرچی جواب بزرگ تر باشه ، مدت زمان انتظار کاربر شما بالا تر میره .
و این میتونه اون رضایت و حس کاربری که موقع کار با چت بات ها دارن با پلتفرم شما نداشته باشن
البته از نظر فرانتی امده بودن بهش انیمیشن داده بودن ،
وقتی جواب از API میرسید همه رو یه جا چاپ نمیکرد
مثل همون چت بات ها با انیمیشن چاپ میکرد
ولی این باعث نمیشد جواب زودتر جنریت بشه و باز اون انتظار زیاد بود
خیلی وقت پیش گزارش کرده بودن که این حالت اصلا مورد رضایت کلاینت ها نیست .
امروز راه حلی براش یه جا دیدم ، جالب بود .
راه حلی که براش پیدا شد و پیاده سازی شد اینجوری بود .
برای اینکه بتونید سریعتر به کاربر جواب نشون بدید و دقیقا همون حس چت بات هارو بهش بدید، استفاده از استریم اونت
پلتفرم هایی مثل openAi این قابلیت و دارن که درخواست بدی به صورت استریم بهت جواب بدن .
ولی از طرفی شما هم باید بتونید اینو پشت صحنه بگیرید و به فرانت خودتون هم به صورت استریم نشون بدید .
برای این کار شما یه endpoint میخواید که به صورت SSE به فرانت شما وصل بشه .
بعد شما درخواستش رو به openAi میدید و میگید به صورت استریم بهم جواب بده .
وقتی جواب و میگیرید پارس میکنید و با همون SSE به فرانت خودتون بر میگردونید .
حالا کاربر شما میتونه به صورت ریل تایم جوابی که جنریت میشه رو ببینه و دقیقا همون حس رضایت چت بات واقعی رو داشته باشه .
در تصاویر هم میتونید نمونه کد سمپل رو ببنید .
شاید در آینده به دردتون خورد😊
@panicdev
ولی یه مشکلی که شاید داشته باشید این هست که
وقتی میخواید سوال کاربر و OpenAi بدید تا جواب بهتون بده .
تو حالت عادی که rest api کال میکنید . به این صورت
$client = OpenAI::client(config('services.openai.key'));
$response = $client->chat()->create([
'model' => 'gpt-4o',
'messages' => $messages,
]);
return response()->json([
'message' => $response
->choices[0]
->message,
], 200);
احتمالا خیلی طول میکشه
چون باید تمام جواب و پردازش کنه یه جا درستش کنه و بهتون برگردونه
هرچی جواب بزرگ تر باشه ، مدت زمان انتظار کاربر شما بالا تر میره .
و این میتونه اون رضایت و حس کاربری که موقع کار با چت بات ها دارن با پلتفرم شما نداشته باشن
البته از نظر فرانتی امده بودن بهش انیمیشن داده بودن ،
وقتی جواب از API میرسید همه رو یه جا چاپ نمیکرد
مثل همون چت بات ها با انیمیشن چاپ میکرد
ولی این باعث نمیشد جواب زودتر جنریت بشه و باز اون انتظار زیاد بود
خیلی وقت پیش گزارش کرده بودن که این حالت اصلا مورد رضایت کلاینت ها نیست .
امروز راه حلی براش یه جا دیدم ، جالب بود .
راه حلی که براش پیدا شد و پیاده سازی شد اینجوری بود .
برای اینکه بتونید سریعتر به کاربر جواب نشون بدید و دقیقا همون حس چت بات هارو بهش بدید، استفاده از استریم اونت
پلتفرم هایی مثل openAi این قابلیت و دارن که درخواست بدی به صورت استریم بهت جواب بدن .
ولی از طرفی شما هم باید بتونید اینو پشت صحنه بگیرید و به فرانت خودتون هم به صورت استریم نشون بدید .
برای این کار شما یه endpoint میخواید که به صورت SSE به فرانت شما وصل بشه .
بعد شما درخواستش رو به openAi میدید و میگید به صورت استریم بهم جواب بده .
وقتی جواب و میگیرید پارس میکنید و با همون SSE به فرانت خودتون بر میگردونید .
حالا کاربر شما میتونه به صورت ریل تایم جوابی که جنریت میشه رو ببینه و دقیقا همون حس رضایت چت بات واقعی رو داشته باشه .
در تصاویر هم میتونید نمونه کد سمپل رو ببنید .
شاید در آینده به دردتون خورد
@panicdev
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6🕊1
چرا لاراول sail استفاده نکنیم ...
اگر شما هم با تعداد متعددی پروژه همزمان کار میکنید یا بین پروژه های لاراولی زیاد سوئیچ میشید .
اجرا همزمان پروژه ها با sail منابع زیادی میطلبه یا باید یکی رو down کنید بعد یکی رو up یا کانفیگ و پورت متفاوت برای هرکدوم روی env ست کنید .
ولی از همه مهم تر که من دیروز باهاش برخورد کردم
اشغال فضای زیادی دیسک هست .
برای هر پروژه لاراولی که بخواید با sail اون رو راه اندازی کنید
از اول یه image براش بیلد میشه و دوباره تمام کانتیر های mysql , redis و ... براش از اول ساخته میشه .
مسئله اول ،اون سردرد موقع هر بار بیلد و pull که به جای خودش
ولی در این بین کلی image دارید هر بار به اضافه کلی volume
من وقتی دیروز فضای دیکسم به شدت پر شده بود امدم تمیز کاری کنم
وقتی یه docker prune زدم ۴۵ گیگ فضا ازاد شد!
اینجا بود که فهمیدم برای دولوپری که تو تمام پروژه ها تمام enviroment اش تقریبا یکی هست
خیلی زیاد داره فضا و اینترنت مصرف میشه .
خوب به این فک کردم بریم سراغ جایگزین .
همونطور که میدونید هستن ابزار هایی مثل herd , longhorn , valet که یا برای ویندوز یا قشر پولدار خانواده اپل
و چیز به درد بخوری پیدا نکردم که یکبار اجرا بشه و تمام پروژه ها رو ساپورت کنه . و همش در حال سوئیچ نباشم .
در اخر به این نتیجه رسیدم باید برگردم به خودم یه چیزی بزنم .
که تهش شد این ریپازیتوری ساده .
https://github.com/mohaphez/larasaur
شما با استفاده از این یه پوشه دارید به اسم
بعد داخلش یه فولدر میسازید
بعد یه
این تمام کامند هایی که نیاز دارید بهتون میده
حالا پروژه هاتون میره داخل پوشه
مثلا با این ساختار
همه چی امادست
اول یه دستور up میزنید
که بیلد اولیه گرفته بشه و سرویس ها بیاد بالا
بعد داخل هر پروژه که دارید یا جدید میسازید داخل خود مسیرش مثلا
یه دستور
میزنید این براتون یه کانفیگ nginx میسازه میندازه برای داکر و یه دامین با پسوند
مثلا این میشه
و تمام
کلا بعد از این دیگه هر چی پروژه میسازید یه addsite میزنید و یه دستور restart
بعد همه چی امادست .
هم روی محیط ایزولست هم در مصرف اینترنت و وقت صرفه جویی شده هم فضای کمتری میگیره
هم روی سیستمتون نیاز به نصب دپندسی های زیادی ندارید برای راه اندازی lamp
گذاشتم شاید به درد شما هم خورد .
الان فقط زمانی سراغ sail میرم که پروژه واقعا محیط متفاوت خاصی بخواد مثل php 7.4
@panicdev
اگر شما هم با تعداد متعددی پروژه همزمان کار میکنید یا بین پروژه های لاراولی زیاد سوئیچ میشید .
اجرا همزمان پروژه ها با sail منابع زیادی میطلبه یا باید یکی رو down کنید بعد یکی رو up یا کانفیگ و پورت متفاوت برای هرکدوم روی env ست کنید .
ولی از همه مهم تر که من دیروز باهاش برخورد کردم
اشغال فضای زیادی دیسک هست .
برای هر پروژه لاراولی که بخواید با sail اون رو راه اندازی کنید
از اول یه image براش بیلد میشه و دوباره تمام کانتیر های mysql , redis و ... براش از اول ساخته میشه .
مسئله اول ،اون سردرد موقع هر بار بیلد و pull که به جای خودش
ولی در این بین کلی image دارید هر بار به اضافه کلی volume
من وقتی دیروز فضای دیکسم به شدت پر شده بود امدم تمیز کاری کنم
وقتی یه docker prune زدم ۴۵ گیگ فضا ازاد شد!
اینجا بود که فهمیدم برای دولوپری که تو تمام پروژه ها تمام enviroment اش تقریبا یکی هست
خیلی زیاد داره فضا و اینترنت مصرف میشه .
خوب به این فک کردم بریم سراغ جایگزین .
همونطور که میدونید هستن ابزار هایی مثل herd , longhorn , valet که یا برای ویندوز یا قشر پولدار خانواده اپل
و چیز به درد بخوری پیدا نکردم که یکبار اجرا بشه و تمام پروژه ها رو ساپورت کنه . و همش در حال سوئیچ نباشم .
در اخر به این نتیجه رسیدم باید برگردم به خودم یه چیزی بزنم .
که تهش شد این ریپازیتوری ساده .
https://github.com/mohaphez/larasaur
شما با استفاده از این یه پوشه دارید به اسم
projects مثلا بعد داخلش یه فولدر میسازید
dev-env و فایل های این ریپازیتوری میره داخلش بعد یه
bash install-dev-shortcuts.sh
این تمام کامند هایی که نیاز دارید بهتون میده
حالا پروژه هاتون میره داخل پوشه
projects مثلا با این ساختار
~/projects/
├── dev-env/
├── x/
│ ├── a-laravel/
│ └── b-laravel/
├── y/
│ ├── c-laravel/
│ └── v-laravel/
└── z/
├── h-old-laravel/
└── b-new-laravel/
همه چی امادست
اول یه دستور up میزنید
up
که بیلد اولیه گرفته بشه و سرویس ها بیاد بالا
بعد داخل هر پروژه که دارید یا جدید میسازید داخل خود مسیرش مثلا
cd ~/projects/a-laravel
یه دستور
addsite
میزنید این براتون یه کانفیگ nginx میسازه میندازه برای داکر و یه دامین با پسوند
.local میسازه مثلا این میشه
a-laravel.local
و تمام
کلا بعد از این دیگه هر چی پروژه میسازید یه addsite میزنید و یه دستور restart
بعد همه چی امادست .
هم روی محیط ایزولست هم در مصرف اینترنت و وقت صرفه جویی شده هم فضای کمتری میگیره
هم روی سیستمتون نیاز به نصب دپندسی های زیادی ندارید برای راه اندازی lamp
گذاشتم شاید به درد شما هم خورد .
الان فقط زمانی سراغ sail میرم که پروژه واقعا محیط متفاوت خاصی بخواد مثل php 7.4
@panicdev
🔥13👍3❤🔥1
🎯 وقتی شرطی نوشتن قشنگتر میشه!
🤔 میدونی Conditionable چیه؟
یه Trait جدیده که به کلاس Fluent اضافه شده و بهت اجازه میده توی زنجیرهی متدها (method chaining) شرط بذاری، بدون اینکه if/else وسط کدت بیاد و ظاهرشو به هم بزنه.
🔁 قبل از Conditionable:
✅ بعد از Conditionable:
زیبا نیست؟ 😍
📦 مثال واقعی توی API Resource:
همه چیز شرطیه، ولی هنوز قشنگ و قابلخونده! 🔥
🧠 نتیجهگیری:
با when() و unless()، میتونی شرطها رو تو دل همون زنجیره بنویسی و خوندن کدت رو فوقالعاده راحت کنی.
لاراول بازم یه قدم دیگه برای تجربه بهتر توسعهدهنده برداشته. 👨💻💚
منبع : مقاله
@panicdev
🤔 میدونی Conditionable چیه؟
یه Trait جدیده که به کلاس Fluent اضافه شده و بهت اجازه میده توی زنجیرهی متدها (method chaining) شرط بذاری، بدون اینکه if/else وسط کدت بیاد و ظاهرشو به هم بزنه.
🔁 قبل از Conditionable:
$data = Fluent::make([
'name' => 'Michael Nabil',
'developer' => true,
'posts' => 25,
]);
if (auth()->isAdmin()) {
$data = $data->set('role', 'admin');
} else {
$data = $data->forget('posts');
}
✅ بعد از Conditionable:
$data = Fluent::make([...])
->when(auth()->isAdmin(), fn ($d) => $d->set('role', 'admin'))
->unless(auth()->isAdmin(), fn ($d) => $d->forget('posts'));
زیبا نیست؟ 😍
📦 مثال واقعی توی API Resource:
return Fluent::make([
'id' => $user->id,
'name' => $user->name,
])
->when($request->user()->can('view-statistics'), fn ($d) =>
$d->set('post_count', $user->posts()->count())
->set('comment_count', $user->comments()->count()))
->when($user->isVerified(), fn ($d) =>
$d->set('verified', true)
->set('verification_date', $user->verified_at->toDateString()))
->unless($request->includesPersonalData(), fn ($d) =>
$d->forget('email'))
->toArray();
همه چیز شرطیه، ولی هنوز قشنگ و قابلخونده! 🔥
🧠 نتیجهگیری:
با when() و unless()، میتونی شرطها رو تو دل همون زنجیره بنویسی و خوندن کدت رو فوقالعاده راحت کنی.
لاراول بازم یه قدم دیگه برای تجربه بهتر توسعهدهنده برداشته. 👨💻💚
منبع : مقاله
@panicdev
👍22👎3👌2🔥1
اگه دوس دارید با مفهوم اسکوپ و کوئری رجیستری توی لاراول عمیقا آشنا بشید و بتونید مثل یه Pro Player ازشون استفاده کنید این مقاله زیبا و کامل رو از دست 👀
https://laravel-news.com/query-scopes
https://laravel-news.com/query-scopes
Laravel News
Learn to master Query Scopes in Laravel - Laravel News
In this article, we're going to take a look at local query scopes and global query scopes
🔥9
🚀 متد Dispatch در Laravel یعنی چی؟ پشت صحنهاش چیه؟
وقتی توی لاراول مینویسی:
داری یه job رو میفرستی به صف (queue)، ولی پشت پرده کلی داستان اتفاق میافته که فهمیدنش میتونه کمکت کنه حرفهایتر کار کنی 👇
🔹 اولین مرحله:
لاراول با dispatch()، Bus::dispatch() یا helper با نام dispatch() شروع میکنه. اینها همه از کامپوننت Bus استفاده میکنن تا job رو آمادهی ارسال کنن.
🔹 چطوری آماده میکنه؟
بسته به نوع job، یکی از این ۳ شیء ساخته میشه:
متد PendingDispatch —> برای job معمولی
متد PendingChain —> برای jobهای زنجیرهای
متد PendingBatch —> برای batchها
🔐 جاب یکتا (Unique):
اگه job از ShouldBeUnique استفاده کنه، لاراول بررسی میکنه که توی صف، همین job با همون شناسه (ID) وجود داره یا نه.
اگه باشه و هنوز پردازش نشده، job جدید ارسال نمیشه.
✅ فقط برای job معمولی فعاله، نه chain یا batch.
🔄 وقتی از chain یا batch استفاده میکنی:
توی chain همه jobها به اولین job چسبیدان.
توی batch اطلاعاتشون توی دیتابیس ذخیره میشه.
💾 بعد از این آمادهسازیها، اگه dispatch بعد از commit تنظیم شده باشه:
لاراول صبر میکنه تا همه تراکنشهای دیتابیس تموم شن (موفقیتآمیز).
اگه rollback شه، job هم اصلاً فرستاده نمیشه.
🧬 تبدیل job به payload:
لاراول باید یه payload بسازه که شامل اینا میشه:
تنظیمات مثل maxTries, timeout, retryUntil
سریالایز کردن job با serialize() (و تبدیل مدلها با trait مخصوص)
رمزنگاری job اگه از ShouldBeEncrypted استفاده کرده باشه
اجرای hookها مثل Queue::createPayloadUsing()
در نهایت تبدیل به JSON و ارسال به صف (database, Redis, SQS و...)
📬 برای event listener، mail, notification و broadcastها:
اگه ShouldQueue رو پیادهسازی کرده باشن، مستقیم میان توی queue (و نه Bus).
یعنی قابلیتهایی مثل unique، chain یا batch اینجا اعمال نمیشن.
🧠 و اما closure؟
اگه بخوای یه closure رو بفرستی به صف، Laravel با SerializableClosure سریالایزش میکنه، رمزنگاریش میکنه و با job مخصوصش (CallQueuedClosure) میفرسته صف.
🎯 جمعبندی:
دستور Job dispatch فقط یه خط نیست! یه مکانیزم کامل پشتشه که با قدرت و امنیت بالا job رو آماده میکنه، serialize و encrypt میکنه، و با دقت میفرسته صف. یاد گرفتنش کمک میکنه کدت تمیزتر و قابل کنترلتر باشه 💪
🔗 منبع : مقاله
@panicdev
وقتی توی لاراول مینویسی:
MyJob::dispatch($data);
داری یه job رو میفرستی به صف (queue)، ولی پشت پرده کلی داستان اتفاق میافته که فهمیدنش میتونه کمکت کنه حرفهایتر کار کنی 👇
🔹 اولین مرحله:
لاراول با dispatch()، Bus::dispatch() یا helper با نام dispatch() شروع میکنه. اینها همه از کامپوننت Bus استفاده میکنن تا job رو آمادهی ارسال کنن.
🔹 چطوری آماده میکنه؟
بسته به نوع job، یکی از این ۳ شیء ساخته میشه:
متد PendingDispatch —> برای job معمولی
متد PendingChain —> برای jobهای زنجیرهای
متد PendingBatch —> برای batchها
🔐 جاب یکتا (Unique):
اگه job از ShouldBeUnique استفاده کنه، لاراول بررسی میکنه که توی صف، همین job با همون شناسه (ID) وجود داره یا نه.
اگه باشه و هنوز پردازش نشده، job جدید ارسال نمیشه.
✅ فقط برای job معمولی فعاله، نه chain یا batch.
🔄 وقتی از chain یا batch استفاده میکنی:
Bus::chain([...]);
Bus::batch([...]);
توی chain همه jobها به اولین job چسبیدان.
توی batch اطلاعاتشون توی دیتابیس ذخیره میشه.
💾 بعد از این آمادهسازیها، اگه dispatch بعد از commit تنظیم شده باشه:
لاراول صبر میکنه تا همه تراکنشهای دیتابیس تموم شن (موفقیتآمیز).
اگه rollback شه، job هم اصلاً فرستاده نمیشه.
🧬 تبدیل job به payload:
لاراول باید یه payload بسازه که شامل اینا میشه:
تنظیمات مثل maxTries, timeout, retryUntil
سریالایز کردن job با serialize() (و تبدیل مدلها با trait مخصوص)
رمزنگاری job اگه از ShouldBeEncrypted استفاده کرده باشه
اجرای hookها مثل Queue::createPayloadUsing()
در نهایت تبدیل به JSON و ارسال به صف (database, Redis, SQS و...)
📬 برای event listener، mail, notification و broadcastها:
اگه ShouldQueue رو پیادهسازی کرده باشن، مستقیم میان توی queue (و نه Bus).
یعنی قابلیتهایی مثل unique، chain یا batch اینجا اعمال نمیشن.
🧠 و اما closure؟
اگه بخوای یه closure رو بفرستی به صف، Laravel با SerializableClosure سریالایزش میکنه، رمزنگاریش میکنه و با job مخصوصش (CallQueuedClosure) میفرسته صف.
🎯 جمعبندی:
دستور Job dispatch فقط یه خط نیست! یه مکانیزم کامل پشتشه که با قدرت و امنیت بالا job رو آماده میکنه، serialize و encrypt میکنه، و با دقت میفرسته صف. یاد گرفتنش کمک میکنه کدت تمیزتر و قابل کنترلتر باشه 💪
🔗 منبع : مقاله
@panicdev
👌13👍1
تجربه کسی که راه زیادی رو رفته تا گلوگاه های یک زیرساخت و شناسایی کنه برای اینکه بتونه پاسخگوئه یک میلیون یوزر باشه .
https://medium.com/@kanishks772/scaling-to-1-million-users-the-architecture-i-wish-i-knew-sooner-39c688ded2f1
https://medium.com/@kanishks772/scaling-to-1-million-users-the-architecture-i-wish-i-knew-sooner-39c688ded2f1
Medium
Scaling to 1 Million Users: The Architecture I Wish I Knew Sooner
When we launched, we were happy just having 100 daily users. But within months, we hit 10,000, then 100,000. And scaling problems piled up…
14👍2🔥1
دوتا پکیج زیبا ببینیم ، هم کاراییشون زیباست هم سورس کدشون
https://prismphp.com
https://laragent.ai
خودم به شخصه prism پسندیدم ، ولی خوب laragent هم تحت توسعست ، احتمالا به زودی چیزای بهتری و بیشتری ساپورت کنه .
@panicdev
https://prismphp.com
https://laragent.ai
خودم به شخصه prism پسندیدم ، ولی خوب laragent هم تحت توسعست ، احتمالا به زودی چیزای بهتری و بیشتری ساپورت کنه .
@panicdev
Prismphp
Prism is a powerful Laravel package for integrating Large Language Models (LLMs) into your applications.
👍12
🔥 حافظه رم Redis پر شد؟ باید چه کار کنیم؟
همون طور که میدونید Redis یه پایگاه داده سریع و درونحافظهایه که خیلی وقتا بهعنوان کش (Cache) استفاده میشه.
اما سؤال مهم: وقتی حافظه Redis پر شد، چه اتفاقی میافته؟ 🤔
📦 ردیس چندین پالسی حذف داده (Eviction Policy) داره که میتونی با maxmemory-policy تنظیمشون کنی.
بیا با هم این سیاستها رو مرور کنیم:
🔒 1. پالسی noeviction (بدون حذف):
✅ هیچ دادهای حذف نمیشه.
❌ اگه حافظه پر باشه، خطا میده و کلید جدیدی نمیذاره.
📌 مناسب برای مواقعی که حذف داده اصلاً مجاز نیست.
🧠 2. پالسی volatile-lru:
✅ فقط کلیدهایی که expire دارن و کمتر استفاده شدن حذف میشن.
📌 خوب برای دادههای موقتی و نه چندان مهم.
📊 3. پالسی allkeys-lru:
✅ کلیدهایی که کمتر استفاده شدن حذف میشن، فرقی نداره expire دارن یا نه.
📌 ایدهآل برای کشهایی که دسترسی بهشون الگوی مشخصی نداره.
🎲 4. پالسی volatile-random:
✅ یه کلید رندوم که expire داره حذف میشه.
📌 ساده، ولی شاید کلید مهمی رو حذف کنه.
🎲 5. پالسی allkeys-random:
✅ هر کلیدی ممکنه رندوم حذف شه، چه expire داشته باشه چه نه.
📌 برای سیستمهای خیلی حساس توصیه نمیشه.
⏳ 6.پالسی volatile-ttl:
✅ کلیدی که زودتر expire میشه اول حذف میشه.
📌 منطقی برای دادههایی که زمان مصرفشون مهمه.
📉 7. پالسی volatile-lfu:
✅ کلیدهایی با expire که کم استفاده شدن حذف میشن.
📌 خوب برای حفظ دادههای پرکاربرد و حذف دادههای کممصرف.
📉 8. پالسی allkeys-lfu:
✅ هر کلیدی (با یا بدون expire) که کم استفاده شده باشه حذف میشه.
📌 برای کشهایی که رفتار مصرف دادههاش مدام تغییر میکنه عالیه.
@panicdev
همون طور که میدونید Redis یه پایگاه داده سریع و درونحافظهایه که خیلی وقتا بهعنوان کش (Cache) استفاده میشه.
اما سؤال مهم: وقتی حافظه Redis پر شد، چه اتفاقی میافته؟ 🤔
📦 ردیس چندین پالسی حذف داده (Eviction Policy) داره که میتونی با maxmemory-policy تنظیمشون کنی.
بیا با هم این سیاستها رو مرور کنیم:
🔒 1. پالسی noeviction (بدون حذف):
✅ هیچ دادهای حذف نمیشه.
❌ اگه حافظه پر باشه، خطا میده و کلید جدیدی نمیذاره.
📌 مناسب برای مواقعی که حذف داده اصلاً مجاز نیست.
🧠 2. پالسی volatile-lru:
✅ فقط کلیدهایی که expire دارن و کمتر استفاده شدن حذف میشن.
📌 خوب برای دادههای موقتی و نه چندان مهم.
📊 3. پالسی allkeys-lru:
✅ کلیدهایی که کمتر استفاده شدن حذف میشن، فرقی نداره expire دارن یا نه.
📌 ایدهآل برای کشهایی که دسترسی بهشون الگوی مشخصی نداره.
🎲 4. پالسی volatile-random:
✅ یه کلید رندوم که expire داره حذف میشه.
📌 ساده، ولی شاید کلید مهمی رو حذف کنه.
🎲 5. پالسی allkeys-random:
✅ هر کلیدی ممکنه رندوم حذف شه، چه expire داشته باشه چه نه.
📌 برای سیستمهای خیلی حساس توصیه نمیشه.
⏳ 6.پالسی volatile-ttl:
✅ کلیدی که زودتر expire میشه اول حذف میشه.
📌 منطقی برای دادههایی که زمان مصرفشون مهمه.
📉 7. پالسی volatile-lfu:
✅ کلیدهایی با expire که کم استفاده شدن حذف میشن.
📌 خوب برای حفظ دادههای پرکاربرد و حذف دادههای کممصرف.
📉 8. پالسی allkeys-lfu:
✅ هر کلیدی (با یا بدون expire) که کم استفاده شده باشه حذف میشه.
📌 برای کشهایی که رفتار مصرف دادههاش مدام تغییر میکنه عالیه.
@panicdev
🔥11👍2
استخدام برنامهنویس ارشد (Full-Stack (PHP
شرط بررسی رزومه:
حداقل ۵ سال سابقه کار حرفهای در حوزه توسعه نرمافزار و برنامهنویسی
حقوق:
+۵۰ میلیون تومان
* طبیعتا بسته به تخصص و رزومه میتونید عدد مدنظرتون رو پیشنهاد بدید و محدودیتی وجود نداره)
مهارتهای فنی مورد نیاز:
تسلط کامل به PHP
آشنایی عمیق با معماری نرمافزار (Software Architecture)
آشنایی با Redis
تجربه در طراحی و توسعه API
آشنایی با Docker
و ...
https://jobinja.ir/1370018
شرط بررسی رزومه:
حداقل ۵ سال سابقه کار حرفهای در حوزه توسعه نرمافزار و برنامهنویسی
حقوق:
+۵۰ میلیون تومان
* طبیعتا بسته به تخصص و رزومه میتونید عدد مدنظرتون رو پیشنهاد بدید و محدودیتی وجود نداره)
مهارتهای فنی مورد نیاز:
تسلط کامل به PHP
آشنایی عمیق با معماری نرمافزار (Software Architecture)
آشنایی با Redis
تجربه در طراحی و توسعه API
آشنایی با Docker
و ...
https://jobinja.ir/1370018
🔥3
دوستان کسی تاحالا کورس سافت اسکیل از جایی شرکت کرده؟ نتیجهش چی بوده؟
کلا چطوری سافت اسکیل هاتون رو بهبود میدید؟
کلا چطوری سافت اسکیل هاتون رو بهبود میدید؟
این سه تا وصله فعلا
https://news.1rj.ru/str/proxy?server=151.244.85.30&port=70&secret=eed77db43ee3721f0fcb40a4ff63b5cd276D656469612E737465616D706F77657265642E636F6D
https://news.1rj.ru/str/proxy?server=151.244.85.66&port=85&secret=ee00ff000fffff00fff5555ffffffffff56D656469612E737465616D706F77657265642E636F6D
https://news.1rj.ru/str/proxy?server=151.244.85.48&port=443&secret=eed77db43ee3721f0fcb40a4ff63b5cd276D656469612E737465616D706F77657265642E636F6D
https://news.1rj.ru/str/proxy?server=151.244.85.30&port=70&secret=eed77db43ee3721f0fcb40a4ff63b5cd276D656469612E737465616D706F77657265642E636F6D
https://news.1rj.ru/str/proxy?server=151.244.85.66&port=85&secret=ee00ff000fffff00fff5555ffffffffff56D656469612E737465616D706F77657265642E636F6D
https://news.1rj.ru/str/proxy?server=151.244.85.48&port=443&secret=eed77db43ee3721f0fcb40a4ff63b5cd276D656469612E737465616D706F77657265642E636F6D
❤🔥4👍1👌1🕊1
⚠️ Update: #Iran has now been disconnected from the global internet for 36 hours; live metrics show national connectivity remains in the low few percent of ordinary levels with only a handful of users able to connect via multi-hop VPNs 📉
🔗 NetBlocks (@netblocks)
🔗 NetBlocks (@netblocks)