"Laravel"də keş və sessiya məlumatlarını saxlamaq üçün müxtəlif variantlar əlçatandır. "Redis" texnologiyası onlardan biridir.
Populyar verilənlər bazası idarəetmə sistemlərindən (VBİS) biri olan "Redis" məlumatı əməli yaddaşda (RAM) saxlayır. Nəticədə sərt disk istifadə edən sistemlərdən daha sürətli işləyir. "Redis" məlumatları saxlamaq üçün "indeks-qiymət" modelindən istifadə edir:
İndeks | Qiymət |
---|---|
ekursdev_database_ekursdev_cache_countOfCourse | 1 |
İndeks-qiymət modeli məlumatı sürətli axtarmağa imkan verir. Buna görə "Redis" çox vaxt yüksək sürət tələb olunan məsələlərin həllində istifadə olunur. Məsələn, keş və sessiyanın saxlanılması. O, serverə düşən yükü azaltmağa kömək edir və informasiyaya daha sürətli girişi təmin edir.
"Laravel"də .env
faylında keş və sessiya məlumatlarının qiymətini redis təyin edin:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
Sonra "Composer" vasitəsilə "predis" paketini quraşdırmaq lazımdır. Burda ətraflı yazılıb.
config
qovluğundakı database.php
faylında standart "Redis" tənzimlənməsi:
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
'persistent' => env('REDIS_PERSISTENT', false),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
Bu halda problem ondadır ki, keş və sessiya məlumatları eyni "REDIS" bazasında saxlanılır. Ona görə keş məlumatları siz və ya skript tərəfindən sıfırlandıqda, həmçinin sessiya məlumatları silinir. Bu an öz hesabına daxil olmuş istifadəçilər hesabdan çıxarılır. Əlbəttə, bu, yaxşı hal deyil.
Yaxşı xəbər odur ki, "Redis"də məlumatları məntiqi şəkildə ayırmaq mümkündür. Standart verilənlər bazasının qiyməti 0-dır, lakin yeni verilənlər bazası yaradıb ona 0-16 aralığında başqa qiymət təyin etmək mümkündür. Verilənlər bazası bir-birindən asılı deyil.
config/database.php
faylında "redis" bölməsinə yeni "session"
bağlantısı əlavə edirik:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
'persistent' => env('REDIS_PERSISTENT', false),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
'session' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => 2
]
],
Həmçinin "client"
indeksinin qiymətini dəyişib "predis"
yazın, çünki həmin paketi quraşdırmışıq.
Yeni "session"
bağlantısını "redis"ə "tanıtdırmaq" lazımdır. Bu məqsədlə config/session.php
faylını açın və "connection"
indeksinin qiymətini dəyişib "session
" yazın:
'connection' => 'session',
Bundan sonra php artisan cache:clear
əmri ilə keşi sıfırladıqda istifadəçilərin sessiya məlumatları silinməyəcək.
"Redis" serverə qoşulub özünüz yoxlaya bilərsiniz. INFO keyspace
əmri verilənlər bazasının siyahısını göstərir:
İndiki halda keş məlumatları db0
, sessiya məlumatları isə db2
verilənlər bazasında saxlanılır.