ginnerpeace / illuminate-cache-database
此包已被废弃且不再维护。未建议替代包。
基于缓存的数据库查询。
v2.1.2
2019-10-28 15:20 UTC
Requires
- php: ^7.1.3
- illuminate/redis: ^5.1
- illuminate/support: ^5.1
- predis/predis: ~1.1
This package is auto-updated.
Last update: 2024-08-15 11:15:02 UTC
README
基于缓存的数据库查询。
入门
安装
使用composer。
composer require "ginnerpeace/illuminate-cache-database:~2.1"
将服务提供者添加到配置
通常。
<?php return [ // .... 'providers' => [ // ... Zeigo\Illuminate\CacheDatabase\RedisHashProvider::class, ], // Its optional. 'aliases' => [ // ... 'RedisHashQuery' => Zeigo\Illuminate\CacheDatabase\Facades\RedisHashQuery::class, ], // ... ];
Laravel 5.5之后,支持包自动发现。
{ "providers": [ "Zeigo\\Illuminate\\CacheDatabase\\RedisHashProvider" ], "aliases": { "RedisHashQuery": "Zeigo\\Illuminate\\CacheDatabase\\Facades\\RedisHashQuery" } }
Lumen
$app->register(Zeigo\Illuminate\CacheDatabase\LumenRedisHashProvider::class);
发布资源(仅限Laravel)
将配置复制到
config/hash-database.php
。
php artisan vendor:publish --provider="Zeigo\Illuminate\CacheDatabase\RedisHashProvider"
创建仓库
定义一个类,实现基本接口并编写一些查询。
<?php namespace DataRepository; use App\Models\User; use Zeigo\Illuminate\CacheDatabase\Contracts\RedisHashRepository; class Users implements RedisHashRepository { public function version(): string { return '1.0'; } /** TTL (seconds). */ public function ttl(): int { return 60; } public function fetch(array $ids, string $scope = null): array { // The $scope param is design for data sharding. // Use or not is up to u. // User::{$scope}()->find($ids) $result = User::whereType($scope)->find($ids, [ 'id', 'username', ]); if ($result->isEmpty()) { return []; } return $result->keyBy('id')->toArray(); } }
将可用的仓库追加到配置
在
config/hash-database.php
中映射自定义仓库。
return [ 'connection' => 'cache', 'prefix' => 'hash-database', 'repositories' => [ 'users' => DataRepository\Users::class, ], ];
享受
结果将保存到Redis散列表,TTL取决于
RedisHashRepository::ttl()
方法返回的值。
// Data from redis hash table: "hash-database:users" RedisHashQuery::table('users')->get([1, 2, 3]); // dump [ 1 => [ 'id' => 1, 'username' => 'First user', ], 2 => [ 'id' => 2, 'username' => 'Second user', ], // no data 3 => null, ]; // Data from redis hash table: "hash-database:users:scopeName" RedisHashQuery::from('scopeName', 'users')->find(9); [ 'id' => 9, 'username' => '999', ];