FastAdmin 现在使用的还是 ThinkPHP 5.0.24 版本,相比于现在的 ThinkPHP 最新版,在缓存方面还是有些不足的地方,比如缓存 Tag 的处理。默认的前缀是 tag_
,如果你使用一些可视化工具,是没办法呈现一个文件夹架构的,只能看到一堆 tag_
开头的文件,这样就很难找到自己想要的缓存文件了。
不过我们这里要讲的是另外一个问题,在我们鉴权场景中,我们会将 Token 打上一个带有 UID 的 Tag,但 FastAdmin 是没办法自动清除这些 Tag 的,如果我们不进行清除那会占用一个内存空间,到一个程度后会触发 Redis 的一些释放操作(这里要看你规则是 LUR 还是什么之类的,如果你的热点或者永久性缓存数据被清空了,那就是灾难性问题了),所以我们需要另外一个脚本,定期在非高峰期进行一个检测,如果发现这个 Tag 下没有任何记录了,那就将这个 Tag 进行删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 public function index ( ) { $handle = \think\Cache ::$handler ; if (!$handle instanceof \think\cache\driver\Redis){ throw new \Exception ('非 Redis 驱动' ); } $tags = $handle ->handler ()->keys ('tag_*' ); foreach ($tags as $tag ) { $info = $handle ->handler ()->get ($tag ); if (!$info ) { continue ; } $token_keys = explode (',' , $info ); $exists = false ; foreach ($token_keys as $token_key ) { if ($handle ->handler ()->exists ($tag )) { $exists = true ; break ; } } if ($exists ) { continue ; } $handle ->handler ()->expire ($tag , 1 ); } return 'success' ; }