ginnerpeace/illuminate-cache-database

此包已被废弃且不再维护。未建议替代包。

基于缓存的数据库查询。

v2.1.2 2019-10-28 15:20 UTC

This package is auto-updated.

Last update: 2024-08-15 11:15:02 UTC


README

Total Downloads Latest Stable Version Latest Unstable Version License

基于缓存的数据库查询。

入门

安装

使用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',
];