【Laravel】使用Redis作为缓存客户端

首先

为了在使用Laravel实现的应用程序中引入数据缓存,我们选择了Redis。
虽然作为缓存客户端有多种选择(如memcached和MongoDB等NoSQL),但由于Redis在官方文档中也有提到,并且看起来更容易安装和使用,所以我们选择了Redis。

关于Redis

按照AWS官方对Redis的描述,Redis是一个基于内存的键值数据存储系统。由于数据存储在内存中,与关系型数据库相比,它可以实现更快的数据读写速度。与RDB相比,Redis更注重性能的特定数据存储被称为NoSQL,而Redis也属于这个范畴。

环境

    • Laravel 6.5

 

    Redis 6.2.3

引入Laravel

有关环境设置的方法,请参考官方文件。

关于应用程序的Redis配置,请在config/database.php中查找。
其中包含了Redis的键值。

'redis' => [

    'client' => env('REDIS_CLIENT', 'phpredis'),

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],

    'cache' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],

],

关于应用程序内缓存的设置,已经在config/cache.php文件中进行了说明。
有关缓存存储信息,会在stores键中进行记录。
stores键中不仅包含redis,还包括memcached、dynamodb等各种缓存客户端的信息。

/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
*/

'stores' => [

    // 割愛

    'redis' => [
        'driver' => 'redis',
        'connection' => 'cache',
    ],

    // 割愛

],

driverの項目の値がredisの場合、キャッシュクライアントは指定された接続先になります。

'cache' => [
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', null),
    'port' => env('REDIS_PORT', 6379),
    'database' => env('REDIS_CACHE_DB', 1),
],

将其设置为连接目标。

主要的缓存操作方法

使用Laravel的Cahce Facade进行缓存操作。

use Illuminate\Support\Facades\Cache;

class Cache
{
    $key = 'hoge';
    $value = 'fuga';

    /* 
     * キャッシュの取得
     * 'hoge'というkeyで設定されているvalueを取得する。
     * keyが存在しない場合、nullを返却する
     */
    Cache::store('redis')->get($key); 

    /* 
     * キャッシュの登録
     * 第1引数:key
     * 第2引数:value
     * 第3引数:登録するキャッシュの有効期限(秒)
     * key:valueのペアでキャッシュを登録する。有効期限を過ぎると、key:valueはRedisから削除される
     */
    Cache::store('redis')->put($key, $value, 1800);

    /* 
     * キャッシュの削除
     * 指定したkeyのキャッシュが存在すれば削除する
     */
    Cache::store('redis')->forget($key);

    /* 
     * キャッシュの削除
     * 指定したkeyのキャッシュが存在すればtrue、存在しなければfalseを返す
     */
    Cache::store('redis')->has($key);

    /* 
     * キャッシュの全削除
     */
    Cache::store('redis')->flush();

}

如果想要查看已注册的密钥清单,

没有在Cache门面上注册的键的列表确认命令,因此需要进入服务器,使用redis-cli命令直接从redis客户端进行确认。

$ redis-cli
127.0.0.1:6379> keys "*"
(empty list or set)

在Laravel应用程序中,我在缓存中注册了键值对,但是却显示为空列表或空集合。。。

导致这个问题的原因是什么?

Redis与RDB一样,有数据库的概念,数据库通过索引来进行区分,索引从0开始递增。
当通过redis-cli进入redis客户端时,默认为db:0。
顺便说一下,默认情况下数据库索引设置为0到15。

中設定されているデータベース.phpのcache設定で、キャッシュクライアントの接続先を指定しています。

'cache' => [
    '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(‘REDIS_CACHE_DB’)` 进行任何设置,那么 Redis 数据库的索引将为1。
本次我们假设 `env(‘REDIS_CACHE_DB’)` 未进行任何设置。

在redis-cli中,可以使用select命令切换到任意索引的数据库。

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>

由于显示为[1],所以成功切换了数据库。

顺便提一下,索引默认只能从0到15,如果指定超过这个范围的数字将会报错。

127.0.0.1:6379[1]> select 16
(error) ERR invalid DB index

如果要增加数据库数量,请编辑redis.conf文件。

databases データベース数

我会写下来。

再次检查缓存的键。

127.0.0.1:6379[1]> keys "*"
// 登録したキャッシュの一覧が表示される。。

顺便说一下,在redis-cli中,你可以使用”-n [index]”选项来指定要进入的redis客户端的数据库。

$ redis-cli -n 1 
127.0.0.1:6379[1]>

最后

通过使用Cache门面模式,实现了对缓存的CRUD操作变得简单易行。

bannerAds