hyperf/zh/cache.md
2019-03-21 13:42:28 +08:00

1.9 KiB
Raw Blame History

Cache

本模块是基于Aspect的缓存模块与SimpleCacheInterface不太一样。 https://github.com/hyperf-cloud/cache

安装

composer require hyperf/cache

默认配置

<?php

return [
    'default' => [
        'driver' => Hyperf\Cache\Driver\RedisDriver::class,
        'packer' => Hyperf\Cache\Packer\PhpSerializer::class,
    ],
];

使用

组件提供Cacheable注解作用于类方法可以配置对应的缓存前缀、失效时间、监听器和缓存组。 例如UserService提供一个user方法可以查询对应id的用户信息。当加上Cacheable注解后会自动生成对应的Redis缓存key值为user:id超时时间为9000秒。首次查询时会从DB中查后面查询时会从Cache中查。

<?php

namespace App\Services;

use App\Models\User;
use Hyperf\Cache\Annotation\Cacheable;

class UserService
{
    /**
     * @Cacheable(key="user", ttl=9000, listener="user-update")
     */
    public function user($id)
    {
        $user =  User::query()->where('id',$id)->first();

        if($user){
            return $user->toArray();
        }

        return null;
    }
}

清理缓存

当然如果我们DB中的数据改变了如果删除缓存呢这里就需要用到后面的监听器。下面新建一个Service提供一方法来帮我们处理缓存。

<?php

declare(strict_types=1);

namespace App\Service;

use Hyperf\Di\Annotation\Inject;
use Hyperf\Cache\Listener\DeleteListenerEvent;
use Psr\EventDispatcher\EventDispatcherInterface;

class SystemService
{
    /**
     * @Inject
     * @var EventDispatcherInterface
     */
    protected $dispatcher;

    public function flushCache($userId)
    {
        $this->dispatcher->dispatch(new DeleteListenerEvent('user-update', [$userId]));

        return true;
    }
}