我欲乘风九万里
梦的起点
心灵之声
珊瑚礁
编码之舞
梦中的微风
项目编码
聚合登录文档
建议
AI助手
项目重构-缓存组件
#### 记性不好,做个备份,下次新项目的话可以直接用 ```php <?php namespace lib; use Closure; use support\Redis; trait DataCache { /** * null结果不做缓存 只有非null结果才做缓存 * @param Closure $callback 回调 * @param mixed &$cache 静态缓存 * @param $string|array $redisKey redisKey 名 * @param ..mixed ...$params 回调入参 * @return mixed */ protected function getCachedResult(Closure $callback, &$cache, $redisKey, ...$params) { $key = ''; $orginParams = $params; foreach ($params as &$v) { if (is_string($v)) { $key .= $v . ':'; } else { $key .= json_encode($v) . ':'; $v = json_encode($v); } } $key = rtrim($key, ':'); if (isset($cache[$key])) { return $cache[$key]; } if (empty($cache)) { $cache = null; } if (!empty($cache) && count($cache) > 1000) {//极端情况自动清理内存 $cache = null; } //get from redis if (!empty($redisKey) && $this->isRedisOn($redisKey)) { $ret = Redis::get($this->getRedisKey($redisKey, ...$params)); if (!empty($ret)) { $cache[$key] = json_decode($ret, true);; return $cache[$key]; } } $ret = $callback(...$orginParams); if ($ret !== null) { $cache[$key] = $ret; if (!empty($redisKey)) { Redis::set($this->getRedisKey($redisKey, ...$params), json_encode($ret), 'EX', $this->getRedisTtl($redisKey)); } } return $ret; } /** * 是否读取 * @param $redisKey * @return mixed|true */ private function isRedisOn($redisKey) { if (is_array($redisKey)) { return $redisKey['on'] ?? true; } return true; } /** * 删除缓存 * @param $redisKey * @param ...$params * @return int */ protected function delRedisCache($redisKey, ...$params) { return Redis::del($this->getRedisKey($redisKey, ...$params)); } /** * 设置过期时间 * @param $redisKey * @return int|mixed */ private function getRedisTtl($redisKey) { if (is_array($redisKey)) { return $redisKey['ttl'] ?? 86400; } return 86400; } /** * 获取redisKey * @param $redisKey * @param ...$params * @return mixed */ protected function getRedisKey($redisKey, ...$params) { if (is_array($redisKey)) { return call_user_func('sprintf', $redisKey['key'], ...$params); } return call_user_func('sprintf', $redisKey, ...$params); } } ```
ysian
我雾化科所
1
聚合登录之创建应用篇
2024-07-30
644
0
2
php函数之match
2024-07-29
581
0
3
聚合登录之常见问题
2024-07-30
489
0
4
聚合登录之前后端示例代码
2024-07-30
483
0
5
聚合登录之获取登录链接
2024-07-30
422
0
6
服务器瘦身
2023-11-01
413
5
7
centos下升级openssl
2023-11-30
412
0
8
我的第一篇博客
2023-09-28
401
0
9
supervisor的安装与使用
2023-11-02
382
0
10
editor.md 代码块没有下拉框
2023-10-06
351
2
PHP [9]
linux [4]
sh [1]
闲谈 [1]
css [2]
redis [2]
Cluster集群 [1]
git [1]
centos [1]
webman [2]
工具 [1]
OAuth2.0 [1]
项目 [1]
初始化 [1]
thinkphp [1]
Nginx [1]
往事 [1]
Mysql [1]
支付宝 [2]
抖音 [2]
qq [2]
聚合 [1]
登录 [1]
聚合登录 [4]
cache [1]
html [1]
queue [1]
Workerman版本
4.1.15
Webman版本
1.5.9
PHP版本
8.3.6
MYSQL版本
8.2.24
操作系统
CENTOS