adamcrampton / object-cache
Laravel 的 Redis 对象缓存
v4.2.6
2020-07-01 05:33 UTC
Requires
- php: >=7
- illuminate/support: >=5.5
- laravel/framework: >=5.8
- predis/predis: ^1.1
Requires (Dev)
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^4.8|^5.2|^7.0
This package is auto-updated.
Last update: 2024-09-29 05:35:40 UTC
README
这个 Laravel 扩展包允许你在 Redis 缓存中设置和忘记对象,带有自动化的 Middleware 和方便的预打包 TTL 设置。你所需要提供的只是 TTL、键名和用于重新生成值的方法的名称。
从 v3.x.x 升级
如果你是从 v3 版本升级,你需要对你的实现进行以下修改
- 创建一个 PHP 类来存储你的方法和方法配置,并将
$this->objects
数组和你的缓存方法迁移到新类中。确保将任何依赖迁移到新类。 - 将
methodClass
键添加到config/object_cache.php
文件中,并将该值设置为你在上一步中创建的完全命名空间类的名称。 - 删除你的对象缓存 Middleware。
- 将
app/Http/Kernel.php
中的 Middleware 设置更改为使用包的 Middleware:\AdamCrampton\ObjectCache\Middleware\CheckObjectCache::class
- 请参阅下面的配置部分以获取你可能没有设置的附加配置选项。
安装
- 在你的项目目录中运行
composer require adamcrampton/object-cache
- 将库服务提供者
AdamCrampton\ObjectCache\ObjectCacheServiceProvider::class
和外观'ObjectCache' => AdamCrampton\ObjectCache\ObjectCacheFacade::class
添加到config/app.php
- 为存储你的方法创建一个类,并添加
use AdamCrampton\ObjectCache\ObjectCache
的使用语句 - 将包的 Middleware
\AdamCrampton\ObjectCache\Middleware\CheckObjectCache::class
添加到app/Http/Kernel.php
- 配置你的路由以使用 Middleware - 查看 https://laravel.net.cn/docs/5.8/middleware#assigning-middleware-to-routes
- 运行
php artisan vendor:publish
- 这将在你的项目配置目录中添加一个object_cache.php
文件 - 将 Redis 主机添加到 .env 文件中(本地开发时使用 localhost - 确保你的环境已安装 Redis)
配置
配置可以在发布的 config/object_cache.php
文件中找到。
- 编辑 Redis 连接的
parameters
和options
值 - 查看 https://github.com/nrk/predis/wiki/Connection-Parameters - 将具有完全命名空间的类名称添加到
methodClass
键中 fallback
下的设置与获取助手(详情见下文)相关。如果你希望库在 Redis 获取失败时手动获取数据,请将此设置为 true。passRequest
选项强制助手将请求对象传递到你的缓存方法类构造函数(仅当此选项对你的应用程序是必需时设置为 true)- 将
logErrors
设置为 true 将启用获取助手记录从 Redis 获取值和/或回退尝试的任何失败尝试
用法
初始化连接
- 在类中添加
use AdamCrampton\ObjectCache\ObjectCache
- 声明一个用于连接的变量,例如
$redis = ObjectCache::init()
初始化后,你可以使用所有 Predis 命令。请参阅
Middleware
与包一起提供的CheckObjectCache中间件允许您添加要在每次请求上自动检查的缓存对象,如果缺失则设置。您需要添加一个$this->objects
数组(配置)以及每个对应的缓存存储类方法(如安装中所述)。
$this->objects
数组中的每个条目都需要3个值的数组。它们是
- cacheKey: Redis存储中对象的键名。
- cacheTtl: 使用预定义的命名TTL(见下文),或以秒为单位的TTL。
- cacheMethod: 如果未找到(即缺失或过期)时,重新生成缓存数据的名称(方法)。
使用缓存存储类的实现示例
use App\Models\PartPrice;
use AdamCrampton\ObjectCache\ObjectCache;
class CacheMethodStore
{
public $objects;
public function __construct()
{
$this->objectCache = new ObjectCache();
$this->objects = [
[
'cacheKey' => 'exampleKey',
'cacheTtl' => $this->objectCache->ttl['hours']['twentyFour'],
'cacheMethod' => 'setExample'
]
];
}
public function setExample()
{
return PartPrice::select(['part_id', 'price'])
->get()
->toJson();
}
}
获取助手
初始化后,您可以使用提供的助手从缓存中获取对象。您需要传入的两个参数是键和JSON解码选项。
如果您传入解码选项,请将其设置为'true'或'object'以获得正确的返回格式。示例
/**
* Fetch part data for the front end.
*
* @return array
*/
protected function buildPartData(Request $request)
{
return ObjectCache::get('dealer_123456_part_data', 'array');
}
预配置TTL
包中包含了一个方便的TTL值数组。要使用其中一个值,请按照上述方法初始化Redis连接,并使用适当的键名调用ttl
属性。此TTL数组的结构如下
'default' => [
'default' => 86400
],
'apc' => [
'default' => 86400
],
'array' => [
'default' => 86400
],
'database' => [
'default' => 86400
],
'file' => [
'default' => 86400
],
'memcached' => [
'default' => 86400
],
'redis' => [
'default' => 86400
],
'minutes' => [
'one' => 60,
'five' => 300,
'ten' => 600,
'fifteen' => 900,
'twenty' => 1200,
'thirty' => 1800,
'forty' => 2400,
'fortyFive' => 2700,
'fifty' => 3000,
'sixty' => 3600
],
'hours' => [
'one' => 3600,
'two' => 7200,
'three' => 10800,
'four' => 14400,
'five' => 18000,
'six' => 21600,
'seven' => 25200,
'eight' => 28800,
'nine' => 32400,
'ten' => 36000,
'eleven' => 39600,
'twelve' => 43200,
'twentyFour' => 86400
],
'days' => [
'one' => 86400,
'two' => 172800,
'three' => 259200,
'four' => 345600,
'five' => 432000,
'six' => 518400,
'seven' => 604800,
'fourteen' => 1209600,
'twentyEight' => 2419200
],
'weeks' => [
'one' => 604800,
'two' => 1209600,
'three' => 1814400,
'four' => 2419200,
'five' => 3024000,
'six' => 3628800
]
];