Laravel中Redis的使用
安装
Composer 安装 predis/predis 包:
1
| composer require predis/predis
|
配置
redis的配置文件是:config/database.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| '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'), ],
'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'), ],
],
|
.env配置cache
1 2 3 4 5 6 7 8 9
| BROADCAST_DRIVER=log CACHE_DRIVER=redis QUEUE_CONNECTION=sync SESSION_DRIVER=redis SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379
|
config/cache.php:
1 2 3 4 5 6
| 'default' => env('CACHE_DRIVER', 'redis'),
'redis' => [ 'driver' => 'redis', 'connection' => 'cache', ],
|
config/database.php:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 'redis' => [
...
'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'), ],
],
|
测试
创建一个控制器:
1
| php artisan make:controller RedisTest\RedisController
|
路由配置:
1 2 3 4
|
Route::get('/testRedis', 'RedisTest\RedisController@testRedis');
|
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| namespace App\Http\Controllers\RedisTest;
use App\Http\Controllers\Controller; use App\Models\Users; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redis;
class RedisController extends Controller { public function testRedis() { Redis::set('name', 'lisi'); $values = Redis::get('name'); $userinfo = Users::find(1)->toArray(); Redis::set('user_key', json_encode($userinfo)); if (Redis::exists('user_key')) { $values = Redis::get('user_key'); dd(json_decode($values)); } else { $values = Users::find(1); dd($values); }
} }
|
参考:laravel缓存系统
缓存的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| public function index() { $key = 'lisi'; $values1 = Cache::get($key); $values2 = Cache::get($key, 'default');
if (Cache::has($key)) { $data = Cache::get($key); dd('缓存中的数据:', $data[0]); } else { $data = Users::all()->where('name', 'lisi')->toArray(); Cache::forever($key, $data); dd('数据库中的数据:', $data[0]); } if (!Cache::has($key)) { Cache::forever('a_num', 10); }
$c = Cache::increment('a_num'); $d = Cache::increment('a_num', 1); $c = Cache::decrement('a_num'); $d = Cache::decrement('a_num', 2);
$value = Cache::pull('users');
$value = Cache::remember('users', 100, function () { return Users::all()->where('name', 'lisi')->toArray(); });
$value = 'bfxsz...'; Cache::put($key, $value, 10); Cache::put('uid1995', '1分钟后删除', now()->addMinutes(1)); Cache::forever('uid2020', '数据永远保存:【Cache::forever(\'uid2020\', \'数据永久储存:【】\')】');
Cache::add('users_ad', '123456', 100);
Cache::forget('key');
Cache::flush();
$value = config('app.timezone'); }
|
原子锁(使用原子锁来确保在一台服务器上每次只有一个远程任务在执行)
1 2 3 4 5 6 7 8 9 10
| $lock = Cache::lock('fo', 10); if ($lock->get()) { $lock->release(); }
Cache::lock('foo')->get(function () { });
|
1 2 3 4 5 6 7 8 9 10 11 12
| try { $lock->block(5); } catch (LockTimeoutException $e) { } finally { optional($lock)->release(); }
Cache::lock('foo', 10)->block(5, function () { });
|