限时 5折! 详情

hyperf 实战之缓存(二)

924 0 0

最近疫情比较紧迫,朋友圈也看到阳了的小伙伴也越来越多。还是要提一句,不要不当回事,不是感冒发烧那么简单,大家一定要做好自身防护,有条件的多备一些各地卫健委推荐的中药预防方和治疗方。

最近也在医院陪护,文章更新的有点慢,大家谅解。

上文我们主要看了 Simple Cache 的各种操作,接上文,我们今天继续看看 hyperf 的缓存操作。

第二种很 java, 通过注解实现的方式,注解的基本使用参考官方文档 https://hyperf.wiki/3.0/#/zh-cn/cache?id=注... ,主要涉及 Cacheable、CacheAhead、CachePut 和 CacheEvict 4种。

文档提供的注解缓存,用起来是很方便,但是也有很多问题,比如缓存的 key 怎么动态添加变量,有同学说用 Cacheable.value 就好了,那如果我们有个常量 APP_VERSION ,接口需要根据版本缓存不同的数据呢?再比如,如果测试环境不想加缓存,正式环境才开启缓存或者测试环境缓存1分钟,正式环境缓存1小时呢?总的来说略微不那么灵活。那有没有一种更灵活,既不需要 get set 又能避免这些问题的方案呢?

下面我们来说点文档上没有的。

找到 hyperf/cache 组件的 CacheManager 类,不难发现 CacheManager 对外提供了一个 call 方法,即 Hyperf\Cache\CacheManager::call(),如下

public function call($callback, string $key, int $ttl = 3600, $config = 'default')
{
    // ①、获取驱动
    $driver = $this->getDriver($config);

    // ②、get
    // 以redis为例,实现了 get 和 unpack,参考 Hyperf\Cache\Driver\RedisDriver::fetch
    // 

去购买

还有90%的精彩内容,购买继续阅读