Laravel中Redis的使用
安装
Composer 安装 predis/predis 包:
composer require predis/predis
配置
redis的配置文件是:config/database.php
'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
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:
'default' => env('CACHE_DRIVER', 'redis'),
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
],
config/database.php:
'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'),
],
],
测试
创建一个控制器:
php artisan make:controller RedisTest\RedisController
路由配置:
// use App\Http\Controllers\RedisTest\RedisController;
// Route::get('/testRedis',[RedisController::class,'testRedis']);
Route::get('/testRedis', 'RedisTest\RedisController@testRedis');
测试:
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');
//输出:"lisi"
$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缓存系统
缓存的使用
public function index()
{
$key = 'lisi';
$values1 = Cache::get($key); //直接读取cache,无数据则返回null
$values2 = Cache::get($key, 'default'); //直接读取cache,无数据默认返回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');
//获取和存储(从缓存中获取一个数据,而当请求的缓存项不存在时,程序能为你存储一个默认值) rememberForever 永久储存
$value = Cache::remember('users', 100, function () {
return Users::all()->where('name', 'lisi')->toArray();
});
//在缓存中存储数据
$value = 'bfxsz...';
Cache::put($key, $value, 10); //缓存存在10s
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'); //访问配置值
}
原子锁(使用原子锁来确保在一台服务器上每次只有一个远程任务在执行)
$lock = Cache::lock('fo', 10);
if ($lock->get()) {
//获取锁定10秒
$lock->release();
}
//get 方法也可以接收一个闭包。在闭包执行之后,Laravel 将会自动释放锁
Cache::lock('foo')->get(function () {
// 获取无限期锁并自动释放...
});
try {
$lock->block(5);
// 等待最多5秒后获取的锁...
} catch (LockTimeoutException $e) {
// 无法获取锁...
} finally {
optional($lock)->release();
}
Cache::lock('foo', 10)->block(5, function () {
// 等待最多5秒后获取的锁...
});