Laravel-də keş və sessiya məlumatlarının bir-birindən ayrılması

Emil Hüseynov

"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:

Redis-də verilənlər bazasının siyahısı

İndiki halda keş məlumatları db0, sessiya məlumatları isə db2 verilənlər bazasında saxlanılır.

Şərh yazmaq üçün hesabınıza daxil olun.

0
0