Cache

    1. <?php
    2. return [
    3. 'default' => [
    4. 'driver' => Hyperf\Cache\Driver\RedisDriver::class,
    5. 'packer' => Hyperf\Utils\Packer\PhpSerializer::class,
    6. 'prefix' => 'c:',
    7. ],
    8. ];

    如果您只想使用实现 Psr\SimpleCache\CacheInterface 缓存类,比如重写 EasyWeChat 缓存模块,可以很方便的从 Container 中获取相应对象。

    1. $cache = $container->get(Psr\SimpleCache\CacheInterface::class);

    注解方式

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

    1. <?php
    2. declare(strict_types=1);
    3. namespace App\Service;
    4. use Hyperf\Di\Annotation\Inject;
    5. use Psr\EventDispatcher\EventDispatcherInterface;
    6. {
    7. /**
    8. * @Inject
    9. * @var EventDispatcherInterface
    10. */
    11. protected $dispatcher;
    12. public function flushCache($userId)
    13. {
    14. $this->dispatcher->dispatch(new DeleteListenerEvent('user-update', [$userId]));
    15. return true;
    16. }
    17. }

    Cacheable

    1. use App\Models\User;
    2. use Hyperf\Cache\Annotation\Cacheable;
    3. /**
    4. * @Cacheable(prefix="user", ttl=7200, listener="USER_CACHE")
    5. */
    6. public function user(int $id): array
    7. {
    8. $user = User::query()->find($id);
    9. return [
    10. 'uuid' => $this->unique(),
    11. }

    当设置 value 后,框架会根据设置的规则,进行缓存 KEY 键命名。如下实例,当 $user->id = 1 时,缓存 KEY 为 c:userBook:_1

    1. use App\Models\User;
    2. use Hyperf\Cache\Annotation\CachePut;
    3. /**
    4. * @CachePut(prefix="user", ttl=3601)
    5. */
    6. public function updateUser(int $id)
    7. {
    8. $user = User::query()->find($id);
    9. $user->name = 'HyperfDoc';
    10. $user->save();
    11. return [
    12. 'user' => $user->toArray(),
    13. 'uuid' => $this->unique(),
    14. ];
    15. }

    CacheEvict

    CacheEvict 更容易理解了,当执行方法体后,会主动清理缓存。

    1. use Hyperf\Cache\Annotation\CacheEvict;
    2. /**
    3. * @CacheEvict(prefix="userBook", value="_#{id}")
    4. */
    5. public function updateUserBook(int $id)
    6. {
    7. return true;