hyperf中的缓存之CacheEvict

hyperf中的缓存之CacheEvict_第1张图片

在开发中难免会遇到要批量删除一些缓存,hyperf的注解中提供了关于缓存的几个注解如下

Cacheable 生成缓存的,根据你的返回值生成缓存

参数($prefix, $value, $ttl, $listener, $offset, $group, $collect)

CachePut 更新缓存

参数($prefix, $value, $ttl, $offset, $group, $collect)

CacheEvict 注解是来删除缓存的,CacheEvict注解是基于AOP的机制实现的

参数($prefix, $value, $all, $group, $collect)

 

一般我们定义缓存的时候会定义成关键业务的名称加 : 在redis的工具中 :代表的是一个目录的

比如我们要定一个班级里的满分学生的的缓存  Class:100

在hyperf框架中定义逻辑的时候只需要加上注解

#[Cacheable(prefix: 'class:100', value: "_#{params.classId}", ttl: 60)]
public function student(array $params)
{
    return ['张三','李四',,,,];
}

CachePut 当我们想更新缓存时,可以调用相关方法,,比如官方提供的例子

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

/**
 * @CachePut(prefix="user", ttl=3601)
 */
public function updateUser(int $id)
{
    $user = User::query()->find($id);
    $user->name = 'HyperfDoc';
    $user->save();

    return [
        'user' => $user->toArray(),
        'uuid' => $this->unique(),
    ];
}

主要记录一下CacheEvict的用法

#[CacheEvict(prefix: 'class', all: true)]

all 为true的时候是代表要把以class:开头的所有的key都删除掉

value 有值时 是指删除指定的key

需要注意的是,所有的key都要是以class:开头的,prefix的值不需要带:

//删除之后删除所有缓存class:开头的缓存
#[CacheEvict(prefix: 'class', all: true)]
public function delete()
{
    return true 
}

hyperf中的缓存之CacheEvict_第2张图片

 下面是AOP的具体代码,可以看到是key的sacn每次获取10000个key

hyperf中的缓存之CacheEvict_第3张图片

 hyperf中的缓存之CacheEvict_第4张图片

 如果想修改可以自定义cache.php里的自定义driver,自己进行实现一些缓存删除的时间的通知等

比如要在删除某一个缓存的时候进行短信的通知,可以自己实现driver里的clearPrefix

你可能感兴趣的:(hyperf,php,swoole,缓存,redis,数据库)