首页 / PHP / php使用装饰模式无侵入式加缓存
php使用装饰模式无侵入式加缓存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php使用装饰模式无侵入式加缓存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2275字,纯文字阅读大概需要4分钟。
内容图文
<?php namespace App\Services; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; class CacheDecorator { // 公司组织列表缓存keyconst COMPANY_ORGANIZE_KEY = ‘company_organize_%s‘; privatestaticfunction setStringCacheStorage($key, $expireTime, string$data) { if ($expireTime) { Redis::setex($key, $expireTime, $data); } else { Redis::set($key, $data); } } /** * 装饰器获取缓存数据 * @param $cacheKey 缓存key * @param int $cacheTime 缓存时间 * @param object $obj 对象 * @param $method 缓存方法 * @param mixed ...$args 参数 * @return mixed */publicstaticfunction getStringCache($cacheKey, $expireTime, object$obj, $method, ...$args) { try { $cacheData = Redis::get($cacheKey); $cacheData = json_decode($cacheData, true); if (empty($cacheData) || !isset($cacheData[‘org_data‘]) || empty($cacheData[‘org_data‘])) { $cacheData = [ ‘org_data‘ => call_user_func_array([$obj, $method], $args) ]; self::setStringCacheStorage($cacheKey, $expireTime, json_encode($cacheData, JSON_UNESCAPED_UNICODE)); Log::info(‘从数据库获取数据‘, [ ‘class‘ => get_class($obj), ‘method‘ => $method, ‘args‘ => $args, ]); return$cacheData[‘org_data‘]; } else { Log::info(‘从缓存获取数据‘, [ ‘class‘ => get_class($obj), ‘method‘ => $method, ‘args‘ => $args, ]); return$cacheData[‘org_data‘]; } } catch (\Exception$e) { Log::error("redis缓存错误", [ ‘msg‘ => $e->getMessage(), ‘line‘ => $e->getLine(), ‘file‘ => $e->getFile(), ]); } Log::info(‘从数据库获取数据‘, [ ‘class‘ => get_class($obj), ‘method‘ => $method, ‘args‘ => $args, ]); returncall_user_func_array([$obj, $method], $args); } /** * 获取缓存key * @param $format * @param mixed ...$arg * @return string */publicstaticfunction getCacheKey($format, ...$arg) { returnsprintf($format, ...$arg); } }
调用
public function listOrganize(AuthOrganizeService $authOrganizeService) { // before直接调用数据库$list = $authOrganizeService->listCompanyOrganize(Auth::user()->company_id); // after 直接使用缓存,但是listCompanyOrganize这个方法是没有进行任何的改动$list = CacheDecorator::getStringCache( CacheDecorator::getCacheKey(CacheDecorator::COMPANY_ORGANIZE_KEY), 100, AuthOrganizeService, ‘listCompanyOrganize‘, 1 ); $res = [ ‘list‘ => $list, ‘total‘ => 1 //不分页 ]; return$this->success($res); }
原文:https://www.cnblogs.com/shiwenhu/p/12018844.html
内容总结
以上是互联网集市为您收集整理的php使用装饰模式无侵入式加缓存全部内容,希望文章能够帮你解决php使用装饰模式无侵入式加缓存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。