tarcisiojr/php-cache

此包的最新版本(0.0.1)没有可用的许可证信息。

基于 https://github.com/spatie/once 的方法缓存系统

0.0.1 2017-04-29 01:19 UTC

This package is not auto-updated.

Last update: 2024-09-23 06:21:47 UTC


README

Build Status codecov Latest Stable Version Total Downloads Latest Unstable Version composer.lock SensioLabsInsight

基于 once 包思想的库。此库允许缓存方法,并可以使用多种策略来控制缓存行为。

以下是一个简单的使用示例

<?php

class ClasseQualquer  {

    public function gerarNroAleatorio() {
        return Cache::create(function () {
            return rand(1, 100);
        })
            ->once()        // Cacheia o valor uma única vez.
            ->statefull()   // Cache existente apenas em nivel de request.
            ->scope(false)  // Cache do método entre instâncias.
            ->ttl(10)       // Tempo do cache sera de 10 segundos.
            ->get();        // Executa a obtenção do valor
    }
}

安装

编辑您的 composer.json 文件并添加以下依赖项


缓存系统接口

一些缓存策略使用自有的系统来缓存值。这些系统可以通过实现 PHP\Cache\API\CacheSystem 接口来配置自己的策略。

作为基本资源,存在两个实现

  • PHP\Cache\Core\System\FileCacheSystem:在这个持久化缓存系统中,值被保存在一个配置的 JSON 文件中,值将保持不变,直到文件被删除和/或其值被清除。

  • PHP\Cache\Core\System\StaticArrayCacheSystem:在这个系统中,值仅在脚本执行期间持久化,使用静态数组来维护。

使用

如果需要,请配置缓存系统

  • PHP\Cache\Core\Cache::setStateCacheSystem(CacheSystem):用于存储策略状态的缓存。如果希望在脚本执行之间保持此状态,则此必须是持久化缓存系统。

  • PHP\Cache\Core\Strategy\StatefullCacheStrategy::setCacheSystem(CacheSystem):Statefull 策略使用的持久化缓存。

  • PHP\Cache\Core\Strategy\StatelessCacheStrategy::setCacheSystem(CacheSystem):Stateless 策略使用的请求缓存。

然后,只需选择要缓存的方法(可以是静态的或不静态的)和/或函数,使用静态方法 PHP\Cache\Core\Cache::create 创建缓存实例。

从缓存实例中,您可以选择存储和过期策略,以及作用域。

最后,要获取缓存值(或未缓存值),只需执行方法 get()

示例

<?php

class ClasseQualquer  {

    public function gerarNroAleatorio() {
        return Cache::create(function () {
            return rand(1, 100);
        })
            ->once()        // Cacheia o valor uma única vez.
            ->statefull()   // Cache existente apenas em nivel de request.
            ->scope(false)  // Cache do método entre instâncias.
            ->ttl(10)       // Tempo do cache sera de 10 segundos.
            ->get();        // Executa a obtenção do valor
    }
}

遵循配置的策略,每次类 ClasseQualquergerarNroAleatorio 方法执行时,从第二次执行开始,返回的值将与第一次返回的值相同。此值将在 10 秒后过期,因为使用了 ttl(10) 策略,因此在此时间后将返回一个新的值。