zoukankan      html  css  js  c++  java
  • laravel5.5缓存系统

    Laravel 为各种后端缓存提供丰富而统一的 API,而其配置信息位于 config/cache.php 文件中,Laravel 默认使用 file 缓存驱动,将序列化的缓存对象保存在文件系统中。

    1 Redis的配置

    这里仅探讨redis缓存配置的一些内容

    1.1 安装PRedis

    PRedis是PHP访问redis的扩展包,只需要下载原码即可,不需要安装PHP扩展(如php-redis.so)。我们使用composer安装

    composer require predis/predis 1.0.*
    

    1.2 配置

    • 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储。
    • 当你在执行命令 php artisan cache:clear 的时候,会把 Session 也连带清除了,导致所有用户需要重新登录。
    • 我们的目的是让缓存,也就是默认的 Redis 存储到 0 号数据库,Session 存储在 1 号数据库。('database' => 0,'database' => 1)

    1.2.1 配置redis数据库

    应用的Redis配置位于config/database.php,你可以基于环境随意修改该数组,只需要给每个Redis服务器一个名字并指定该Redis服务器使用的主机和接口。

    'redis' => [
    
        'cluster' => false,
    
        //默认的redis服务器
        'default' => [
            'host'     => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port'     => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    
        //供session使用的
        'session' => [
            'host'     => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port'     => env('REDIS_PORT', 6379),
            'database' => 1,
        ],
    
        //配置更多的redis服务器...
    
    ],
    

    1.2.2 更改session的配置

    • 方式1 修改 config/session.php
     'driver' => env('SESSION_DRIVER', 'redis'),  //指定session使用的方式
    
    • 方式2 开发环境下可以修改 .env 文件的配置
    SESSION_DRIVER=redis
    

    测试一下,执行以下命令后检查下是否退出登录:

    php artisan cache:clear
    

    1.2.3 更改cache配置

    修改config/cache.php 文件

    'default' => env('CACHE_DRIVER', 'redis'),
    
    'stores' => [
        'apc' => [
            'driver' => 'apc',
        ],
        'file' => [
        	'driver' => 'file',
        	'path'   => storage_path('framework/cache'),
        ],
        // 其它一些配置省略了...
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],
    ],
    

    分析:

    • 配置文件
    //config/database.php文件 配置redis连接
    
    // config/session.php文件 更改session方式
    'driver' => env('SESSION_DRIVER', 'redis')
    
    //config/cache.php文件 更改缓存方式
    'default' => env('CACHE_DRIVER', 'redis')
    
    
    • .env文件
    CACHE_DRIVER=file
    SESSION_DRIVER=redis
    
    REDIS_HOST=192.168.1.248
    REDIS_PASSWORD=null
    REDIS_PORT=6379
    

    .env可以方便的配置我们的开发环境,但是正式环境建议更改对应配置文件

    1.3 使用redis

    我们可以在Redis门面上以静态方法的方式调用Redis客户端提供的任何命令( Redis命令大全 ),然后Laravel使用魔术方法将命令传递给Redis服务器并返回获取的结果。

    使用前提是引入Redis门面

    use IlluminateSupportFacadesRedis;
    

    一些基本使用

    Redis::set('key','value');  //存入redis
    Redis::get('key');  //获取redis中的值
    Redis::lLen('key');  //队列的长度
    Redis::rpop('key');  //右侧出队列
    Redis::rpush('key','value');  //右侧存入队列
    Redis::exists($key)  //redis是否存在这个键
    

    2 缓存的使用

    你可以使用 Cache facade 来访问缓存

    // 通过store方法访问各种缓存存储
    $value = Cache::store('file')->get('foo');
    Cache::store('redis')->put('bar', 'baz', 10);
    
    // 从缓存中获取数据
    $value = Cache::get('key');
    $value = Cache::get('key', 'default');
    // 你甚至可以传递 Closure 作为默认值。如果指定的数据不存在于缓存中,将返回 Closure 的结果
    $value = Cache::get('key', function () {
        return DB::table(...)->get();
    });
    
    // 确认项目是否存在
    Cache::has('key')
    
    // 递增与递减值,第二个可选参数,用来指示要递增或递减值的数量
    Cache::increment('key');
    Cache::increment('key', $amount);
    Cache::decrement('key');
    Cache::decrement('key', $amount);
    
    // 有时你可能想从缓存中找出一个数据,而当在请求的数据不存在时,程序能为你存储默认值
    $value = Cache::remember('users', $minutes, function () {
        return DB::table('users')->get();
    });
    
    // 使用 rememberForever 方法从缓存中查找数据或永久存储它
    $value = Cache::rememberForever('users', function() {
        return DB::table('users')->get();
    });
    
    // 从缓存中获取到数据之后再删除它,和 get 方法一样,如果缓存中不存在该数据, 则返回 null
    $value = Cache::pull('key');
    
    // put 方法来将数据存储到缓存中,你需要使用第三个参数来设定缓存的过期时间:
    Cache::put('key', 'value', $minutes);
    // 除了以整数形式传递过期的分钟数,还可以传递一个 DateTime 实例来表示该数据的过期时间:
    $expiresAt = Carbon::now()->addMinutes(10);
    Cache::put('key', 'value', $expiresAt);
    
    // 只存储没有的数据, 果存放成功返回 true ,否则返回 false :
    Cache::add('key', 'value', $minutes);
    
    // 数据永久存储,这些缓存数据不会过期,所以必须通过 forget 方法从缓存中手动删除它们:
    Cache::forever('key', 'value');
    
    // 删除缓存中数据
    Cache::forget('key');
    
    // 清空所有缓存,慎用
    Cache::flush();
    

    还可以使用cache辅助函数

    $value = cache('key');
    
    cache(['key' => 'value'], $minutes);
    
    cache(['key' => 'value'], Carbon::now()->addSeconds(10));
    

    3. 缓存标记

    缓存标记并不支持使用 file 或 database 的缓存驱动。

    1.写入

    所谓的缓存标记,就是对缓存的数据打上相关的标记,以便清空所有被分配指定标记的缓存值。你可以通过传入标记名称的有序数组来为缓存数据写入标记。

    Cache::tags(['people', 'artists'])->put('John', $john, $minutes);
    
    Cache::tags(['people', 'authors'])->put('Anne', $anne, $minutes);
    

    2.访问

    若要获取一个被标记的缓存数据,请将相同的有序标记数组传递给 tags 方法,然后调用 get 方法来获取你要检索的键:

    $john = Cache::tags(['people', 'artists'])->get('John');
    
    $anne = Cache::tags(['people', 'authors'])->get('Anne');
    

    3.移除

    你可以清空有单个标记或是一组标记的所有缓存数据。例如,下面的语句会删除被标记为 people、authors 或两者都有的缓存。所以,Anne 与 John 都会从缓存被删除:

    Cache::tags(['people', 'authors'])->flush();
    

    相比之下,下面的语句只会删除被标记为 authors 的缓存,所以 Anne 会被移除,但 John 不会:

    Cache::tags('authors')->flush();
    
  • 相关阅读:
    Opencv之像素值的获取
    亚像素级角点检测
    Shi-Tomasi角点检测
    卡尔曼滤波
    Harris角点检测理论
    ROS2GO 与WIN10 双系统安装
    数字集成电路物理设计学习总结——物理设计建库域验证
    跨时钟域信号传输(二)——数据信号篇
    跨时钟域信号传输(一)——控制信号篇
    亚稳态与多时钟切换
  • 原文地址:https://www.cnblogs.com/redirect/p/8658760.html
Copyright © 2011-2022 走看看