キャッシュの構成




キャッシュの設定方法

グローバル キャッシュ構成は、直接変更します。構成 ディレクトリの下にあるcache.phpファイル。

ThinkPHP は、think\Cache クラス (実際には think\facade\Cache クラスを使用するだけ) を使用して、キャッシュ機能のサポートを提供します。サポートされている組み込みキャッシュ タイプには、file、memcache、wincache、sqlite、redis が含まれます。 ThinkPHP のキャッシュ クラスは、PSR-6 および PSR-16 仕様に従っています。モデルおよびデータセット オブジェクト (PDOStatement オブジェクトを含む) の特殊な性質により、キャッシュはモデル オブジェクトとデータセット オブジェクトのキャッシュをサポートしません。

新しいバージョンのキャッシュはマルチチャネルをサポートしており、すべてのキャッシュ タイプと構成パラメータを事前に定義し、使用時にいつでも切り替えることができます。ファイル キャッシュ タイプはデフォルトで使用されます。例:

return [
    'default'    =>    'file',
    'stores'    =>    [
        // 文件缓存
        'file'   =>  [
            // 驱动方式
            'type'   => 'file',
            // 设置不同的缓存保存目录
            'path'   => '../runtime/file/',
        ],  
        // redis缓存
        'redis'   =>  [
            // 驱动方式
            'type'   => 'redis',
            // 服务器地址
            'host'       => '127.0.0.1',
        ],  
    ],
];

のように、redis キャッシュ サポートを追加できます。アプリケーションで 1 つのキャッシュ タイプのみを使用する必要がある場合は、それを直接構成でき、システムが自動的に初期化します。

return [
    // 缓存类型为File
    'type'  =>  'file', 
    // 全局缓存有效期(0为永久有效)
    'expire'=>  0, 
    // 缓存前缀
    'prefix'=>  'think',
     // 缓存目录
    'path'  =>  '../runtime/cache/',
];

キャッシュ パラメータは、キャッシュ方法によって異なります。一般的なキャッシュ パラメータは次のとおりです:

パラメータ説明
typeキャッシュ タイプ
expireキャッシュの有効期間 (デフォルトは0 永続キャッシュを表します)
prefixキャッシュ プレフィックス (デフォルトは空)
serializeキャッシュのシリアル化および逆シリアル化の方法

使用する

キャッシュを設定する

キャッシュの有効期間を設定する

// 缓存在3600秒之后过期
Cache::set('name', $value, 3600);

DateTime オブジェクトを使用して有効期限を設定できます。 time

Cache::set('name', $value, new DateTime('2019-10-01 12:00:00'));

設定が成功した場合は true を返し、そうでない場合は false を返します。

キャッシュの自動インクリメント

キャッシュされた数値タイプのデータの場合、自動インクリメント操作を使用できます。例:

Cache::set('name', 1);
// name自增(步进值为1)
Cache::inc('name');
// name自增(步进值为3)
Cache::inc('name',3);

数値のみ または、浮動小数点データに対してインクリメントおよびデクリメント演算を実行します。

キャッシュのデクリメント

キャッシュされた数値タイプのデータの場合は、デクリメント操作を使用できます。例:

// name自减(步进值为1)
Cache::dec('name');
// name自减(步进值为3)
Cache::dec('name',3);

Get Cache

キャッシュされたデータを取得するには、次を使用できます。

Cache::get('name');

name 値が存在しない場合は、デフォルトで false が返されます。

デフォルト値の指定をサポートします。例:

Cache::get('name','');

は、名前の値が存在しない場合、空の文字列が返されることを意味します。

キャッシュされたデータを追加する

キャッシュされたデータが配列の場合、プッシュ メソッドを通じてデータを追加できます。

Cache::set('name', [1,2,3]);
Cache::push('name', 4);
Cache::get('name'); // [1,2,3,4]

キャッシュの削除

Cache::delete('name');

キャッシュの取得と削除

Cache::pull('name');

名前の値が存在しない場合は、null を返します。

キャッシュをクリアします

Cache::clear();

キャッシュデータが存在しない場合は、キャッシュデータを書き込み、

Cache::remember('start_time', time());

を返します。 start_time キャッシュデータが存在しない場合、キャッシュされたデータは現在時刻に設定されます。

2 番目のパラメーターは、クロージャー メソッドを使用してキャッシュされたデータを取得でき、依存関係の注入をサポートします。

Cache::remember('start_time', function(Request $request){
    return $request->time();
});

remember メソッドの 3 番目のパラメータでは、キャッシュの有効期間を設定できます。

キャッシュ タグ

キャッシュ データのタグ付けをサポートします。例:

Cache::tag('tag')->set('name1','value1');
Cache::tag('tag')->set('name2','value2');

// 清除tag标签的缓存数据
Cache::tag('tag')->clear();

同時に複数のキャッシュ タグ操作の指定をサポートします

Cache::tag(['tag1', 'tag2'])->set('name1', 'value1');
Cache::tag(['tag1', 'tag2'])->set('name2', 'value2');

// 清除多个标签的缓存数据
Cache::tag(['tag1','tag2'])->clear();

キャッシュをタグに追加できます

Cache::tag('tag')->append('name3');

キャッシュ オブジェクトを取得します

キャッシュ オブジェクトを取得して、ドライバー クラスの高度なメソッドを呼び出すことができます。例:

// 获取缓存对象句柄
$handler = Cache::handler();

アシスタント機能

システムは、操作をキャッシュするためのアシスタント機能キャッシュを提供します。使用方法は次のとおりです:

$options = [
     // 缓存类型为File
    'type'   => 'File', 
     // 缓存有效期为永久有效
    'expire' => 0,
     // 指定缓存目录
    'path'   => APP_PATH . 'runtime/cache/', 
];

// 缓存初始化
// 不进行缓存初始化的话,默认使用配置文件中的缓存配置
$cache = cache($options);

// 设置缓存数据
cache('name', $value, 3600);
// 获取缓存数据
var_dump(cache('name'));
// 删除缓存数据
cache('name', NULL);

クロスアプリケーション キャッシュ

デフォルトでは、ファイル キャッシュ データは異なるアプリケーション間で区別されます。アプリケーション間でキャッシュしたい場合は、統一されたデータ キャッシュ パス ディレクトリを設定できます。

キャッシュ タイプの切り替え

キャッシュ タイプが指定されていない場合、デフォルトのキャッシュ構成がデフォルトで読み取られ、動的に切り替えることができます

// 使用文件缓存
Cache::set('name','value',3600);
Cache::get('name');

// 使用Redis缓存
Cache::store('redis')->set('name','value',3600);
Cache::store('redis')->get('name');

// 切换到文件缓存
Cache::store('default')->set('name','value',3600);
Cache::store('default')->get('name');

ハンドルを返したい場合現在のキャッシュ タイプ オブジェクトの

// 获取Redis对象 进行额外方法调用
Cache::store('redis')->handler();

を使用すると、複数のキャッシュ タイプを同時に使用できます

複数のキャッシュ タイプを同時に使用したい場合

return [
    // 使用复合缓存类型
    'type'  =>  'complex',
    // 默认使用的缓存
    'default'   =>  [
        // 驱动方式
        'type'   => 'file',
        // 缓存保存目录
        'path'   => '../runtime/default',
    ],
    // 文件缓存
    'file'   =>  [
        // 驱动方式
        'type'   => 'file',
        // 设置不同的缓存保存目录
        'path'   => '../runtime/file/',
    ],  
    // redis缓存
    'redis'   =>  [
        // 驱动方式
        'type'   => 'redis',
        // 服务器地址
        'host'       => '127.0.0.1',
    ],     
],

type が complex として設定された後、複数のキャッシュ タイプとキャッシュ構成をキャッシュできます。各キャッシュを構成する方法は以前と同じであり、異なるキャッシュ構成を構成できます同じタイプのキャッシュ タイプのパラメータ (異なるキャッシュ識別子を使用)。

return [
    // 缓存配置为复合类型
    'type'  =>  'complex', 
    'default'	=>	[
      'type'	=>	'file',
      // 全局缓存有效期(0为永久有效)
      'expire'=>  0, 
      // 缓存前缀
      'prefix'=>  'think',
       // 缓存目录
      'path'  =>  '../runtime/cache/',
    ],
    'redis'	=>	[
      'type'	=>	'redis',
      'host'	=>	'127.0.0.1',
      // 全局缓存有效期(0为永久有效)
      'expire'=>  0, 
      // 缓存前缀
      'prefix'=>  'think',
    ],    
    // 添加更多的缓存类型设置
];

キャッシュ タイプが指定されていない場合、デフォルトのキャッシュ構成がデフォルトで読み取られます。

// 使用文件缓存
Cache::set('name','value',3600);
Cache::get('name');

// 使用Redis缓存
Cache::store('redis')->set('name','value',3600);
Cache::store('redis')->get('name');

// 切换到文件缓存
Cache::store('default')->set('name','value',3600);
Cache::store('default')->get('name');

もう 1 つの方法は、connect メソッドを呼び出してキャッシュを動的に切り替えることです。

$options = [
    // 缓存类型为File
    'type'  =>  'File', 
    // 缓存有效期为永久有效
    'expire'=>  0, 
    //缓存前缀
    'prefix'=>  'think',
     // 指定缓存目录
    'path'  =>  '../runtime/cache/',
];
Cache::connect($options)->set('name','value',3600);
Cache::connect($options)->get('name');

現在のキャッシュ タイプ オブジェクトのハンドルを返したい場合は、

// 获取Redis对象 进行额外方法调用
Cache::store('redis')->handler();

カスタマイズされたドライバー

カスタマイズする必要がある場合は、を使用できます。キャッシュ ドライバーを使用する場合は、think\cache\Driver クラスを継承し、think\contract\CacheHandlerInterface インターフェイスを実装する必要があります。

interface CacheHandlerInterface
{
    /**
     * 判断缓存
     * @access public
     * @param  string $name 缓存变量名
     * @return bool
     */
    public function has($name): bool;

    /**
     * 读取缓存
     * @access public
     * @param  string $name 缓存变量名
     * @param  mixed  $default 默认值
     * @return mixed
     */
    public function get($name, $default = false);

    /**
     * 写入缓存
     * @access public
     * @param  string            $name 缓存变量名
     * @param  mixed             $value  存储数据
     * @param  integer|\DateTime $expire  有效时间(秒)
     * @return bool
     */
    public function set($name, $value, $expire = null): bool;

    /**
     * 自增缓存(针对数值缓存)
     * @access public
     * @param  string    $name 缓存变量名
     * @param  int       $step 步长
     * @return false|int
     */
    public function inc(string $name, int $step = 1);

    /**
     * 自减缓存(针对数值缓存)
     * @access public
     * @param  string    $name 缓存变量名
     * @param  int       $step 步长
     * @return false|int
     */
    public function dec(string $name, int $step = 1);

    /**
     * 删除缓存
     * @access public
     * @param  string $name 缓存变量名
     * @return bool
     */
    public function delete($name): bool;

    /**
     * 清除缓存
     * @access public
     * @return bool
     */
    public function clear(): bool;

}