۷ M
استفاده از دیتابیس redis
جامعه پی اچ پی ایجاد شده در ۰۶ اردیبهشت ۱۴۰۲

سلام استاد وقت بخیر.

استاد من میخوام به فرض از دیتابیس redis استتفاده کنم.

چطور میتونم بهش کانکت بشم داخل لاراول

سلام،

برای اتصال به دیتابیس Redis از Laravel، اول باید `predis/predis` را به پروژه Laravel خودتون اضافه کنید. شما می‌تونید این کار رو با دستور زیر انجام بدید.

composer require predis/predis

بعد از نصب `predis`،در فایل `config/database.php` پارامترهای اتصال به دیتابیس Redis رو تنظیم کنید. به عنوان مثال، اگر می‌خواهید از Redis به عنوان دیتابیس کش استفاده کنید، می‌تونید پارامترهای زیر رو در فایل `config/database.php` تنظیم کنید:

'redis' => [
  'client' => 'predis',
  'default' => [
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', 6379),
    'database' => env('REDIS_DB', 0),
  ],
  'cache' => [
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', 6379),
    'database' => env('REDIS_CACHE_DB', 1),
  ],
],

در این تنظیمات، شما می‌تونید مقادیر `host`، `port`، `password` و `database` رو بر اساس تنظیمات دیتابیس Redis خودتون تنظیم کنید. پس از تنظیم این پارامترها، می‌تونید به دیتابیس Redis از طریق `Redis` facade در Laravel دسترسی داشته باشید. به عنوان مثال، برای نوشتن یک مقدار در دیتابیس Redis، می‌تونید از کد زیر استفاده کنید:

use Illuminate\\Support\\Facades\\Redis;
Redis::set('name', 'Redis');

برای خوندن مقدار مخزن Redis، می‌توانید از کد زیر استفاده کنید:

use Illuminate\\Support\\Facades\\Redis;
$name = Redis::get('name');

با این کار، شما می‌تونید از دیتابیس Redis در پروژه Laravel خودتون استفاده کنید.

احمدرضا فاطمی کیا ۰۶ اردیبهشت ۱۴۰۲، ۱۶:۰۷

یه سوال دیگه.

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

M ۰۶ اردیبهشت ۱۴۰۲، ۱۶:۱۰

و یه مورد دیگه این هست که مثلا چطور میشه یه صفحه html رو توی کش redis ذخیره کرد

M ۰۶ اردیبهشت ۱۴۰۲، ۱۷:۱۴

Redis می‌تونه به عنوان یک دیتابیس برای ذخیره تمامی اطلاعات استفاده بشه، نه فقط به عنوان یک دیتابیس کش. در واقع Redis یک دیتابیس نوع کلید-مقدار (key-value) هست که می‌تونه برای ذخیره و بازیابی هر نوع اطلاعاتی از جمله رشته، لیست، مجموعه، هش، مجموعه مرتب و ... استفاده بشه. همچنین، Redis از دو نوع دیسک و حافظه‌ی پرسرعت استفاده می‌کنه که این ویژگی اون رو برای کاربردهایی که نیاز به سرعت بالا دارند مناسب می‌کنه.

در مورد ذخیره کردن یک صفحه HTML در Redis، می‌تونید از دو روش زیر استفاده کنید:

۱- ذخیره‌ی صفحه به عنوان یک رشته در Redis:

در این روش، شما می‌تونید صفحه HTML رو به صورت یک رشته در Redis ذخیره کنید. به عنوان مثال، می‌تونید کد زیر رو برای ذخیره کردن صفحه HTML به عنوان یک رشته در Redis استفاده کنید:

use Illuminate\\Support\\Facades\\Redis;
$html = '
Hello, world!
';
Redis::set('page:home', $html);

در این کد، رشته‌ی HTML صفحه‌ی اصلی وب سایت رو در کلید `page:home` در Redis ذخیره می‌کنیم. برای بازیابی این صفحه، می‌تونید از کد زیر استفاده کنید:

use Illuminate\\Support\\Facades\\Redis;
$html = Redis::get('page:home');
echo $html;


۲- ذخیره‌ی صفحه به عنوان یک فایل در سیستم فایل، و این فایل رو با نامش در Redis ذخیره کنید:

برای این کار، می‌تونید از کد زیر استفاده کنید:

use Illuminate\\Support\\Facades\\Storage;
use Illuminate\\Support\\Facades\\Redis;
$html = '
Hello, world!
';
$filename = 'home.html';
Storage::put($filename, $html);
Redis::set('page:home', $filename);

در این کد، رشته‌ی HTML صفحه‌ی اصلی وب سایت رو به عنوان یک فایل با نام `home.html` در سیستم فایل ذخیره می‌کنیم. سپس نام این فایل رو در کلید `page:home` در Redis ذخیره می‌کنیم. برای بازیابی این صفحه، می‌تونید از کد زیر استفاده کنید:

use Illuminate\\Support\\Facades\\Storage;
use Illuminate\\Support\\Facades\\Redis;
$filename = Redis::get('page:home');
$html = Storage::get($filename);
echo $html;

در این کد، ابتدا نام فایل رو از Redis بازیابی می‌کنیم، سپس با استفاده از نام فایل، محتوای فایل رو از سیستم فایل بازیابی می‌کنیم و در نهایت محتوای صفحه HTML رو نمایش می‌دهیم.

احمدرضا فاطمی کیا ۰۶ اردیبهشت ۱۴۰۲، ۱۷:۵۱

الان مثلا برا ارسال یه صفحه html با لاراول میشه اینطور عمل کرد؟

use Illuminate\\Support\\Facades\\Redis;
$html = viwe('admin.user.index');
Redis::set('page:home', $html);
M ۰۶ اردیبهشت ۱۴۰۲، ۱۷:۵۶

خیر view() یک تابعی هست که صفحات HTML رو پردازش می‌کنه و خروجی رو تولید می‌کنه. اما ما نیاز به رشته html و کد html داریم.

برای اینکار باید متد render()رو روی ویو صدا بزنید.

use Illuminate\\Support\\Facades\\Redis;
$html = view('admin.user.index')->render();
Redis::set('page:home', $html);


پیشنهاد میکنم مستندات خود لاراول هم مطالعه بکنید:

https://laravel.com/docs/10.x/cache

بهترین پاسخ
احمدرضا فاطمی کیا ۰۶ اردیبهشت ۱۴۰۲، ۱۸:۳۱

خیلی ممنون تشکر

M ۰۶ اردیبهشت ۱۴۰۲، ۱۸:۵۳