在开发中难免会遇到要批量删除一些缓存,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
}
下面是AOP的具体代码,可以看到是key的sacn每次获取10000个key
如果想修改可以自定义cache.php里的自定义driver,自己进行实现一些缓存删除的时间的通知等
比如要在删除某一个缓存的时候进行短信的通知,可以自己实现driver里的clearPrefix