【Laravel 7&Redis】Laravel 7中 Redis的使用

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秒后获取的锁...
        });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值