在此之前,有一些預備工作要做的
Redis driver
按照官方建議 用phpredis
redis是可以設定他在他一個db內的,例如我的全站設定檔是在db3,我的客戶暫存是在db1,預設是在db0
當我在連線設定沒有指定,預設會跑到db0,那為什麼要分呢?因為redis是沒有辦法做特徵全部刪除的,例如他無法做到刪除key name 為abc_開頭的資料 ,我必須要知道keyname的完整名稱,這樣如果我的網站站存檔要全部更新的話,就很麻煩,你可能還要跑資料庫迴圈把相關資料叫出來,不能爽快的flushdb…,但如果你今天把資料分門別類,那你就可以對db3下達flush指令,這樣效率會高一點,而且你要改小部分資料的時候,在沒有看code的情況下,透過工具也比較好找,例如我只要改一個設定檔案,我只要透過Medis之類的GUI工具就可以修改,不需要半夜打電話叫工程師起床尿尿 叫他看一下他設定的key name是什麼
在config/database.php 內 記錄了redis的設定
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'db1' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' =>'1',
],
'db2' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' =>'2',
],
'db3' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' =>'3',
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
這裡的陣列中,我設定了幾個索引名稱,這個在後來的連線上會用到
設定連線
$setobj = Redis::connection('db3');
$rf=[];
if($setobj->exists($key)){
$rf['exist']=1;
$rf['rs']=$setobj->get($key);
}else{
$rf['exist']=0;
}
對應到上面的索引設定,我就是從db3裡面撈取資料,而不是從預設的db0撈取,這樣不同的程式甚至是不同的功能,就可以共用同一個redis,而不會互相影響到