From a996dd0902baf35f373370aa63b4f477f1559472 Mon Sep 17 00:00:00 2001 From: youda Date: Fri, 18 Apr 2025 14:03:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/Goods.php | 26 ++++++++++++++++++++++++-- app/api/controller/Index.php | 22 +++++++++++++++++++++- app/api/controller/Infinite.php | 33 +++++++++++++++++++++++++-------- 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/app/api/controller/Goods.php b/app/api/controller/Goods.php index 3e36538..3f2a3d7 100755 --- a/app/api/controller/Goods.php +++ b/app/api/controller/Goods.php @@ -56,11 +56,26 @@ class Goods extends Base */ public function goods(Request $request) { + $type_str = request()->param('type', -1); + $user_id = $this->getUserId(); + $page = request()->param('page', 1); + + // 获取Redis实例并检查缓存 + $redis = (new \app\common\server\RedisHelper())->getRedis(); + $cache_key = "goods_list_{$type_str}_{$user_id}_{$page}"; + $cache_data = $redis->get($cache_key); + + // 如果缓存存在,直接返回缓存数据 + if ($cache_data) { + $cached_data = json_decode($cache_data, true); + return $this->renderSuccess('请求成功', $cached_data); + } + $whe = []; $whe[] = ['status', '=', 1]; $whe[] = ['show_is', '=', 0]; + $paginate = 15; - $type_str = request()->param('type', -1); // 1一番赏 2无限赏 3擂台赏 4抽卡机 5积分赏 6全局赏 7福利盲盒 8领主赏 9连击赏 10 商品赏 // 使用映射数组简化类型条件判断 @@ -94,7 +109,6 @@ class Goods extends Base $whe[] = ['type', 'in', [2, 6, 8, 16]]; } - $user_id = $this->getUserId(); if ($user_id == 0) { //充值金额 $whe[] = ['unlock_amount', '=', 0]; @@ -135,6 +149,10 @@ class Goods extends Base 'data' => [], 'last_page' => $goods->lastPage(), ]; + + // 缓存空结果,避免重复查询 + $redis->set($cache_key, json_encode($new_data), 300); + return $this->renderSuccess('请求成功', $new_data); } @@ -224,6 +242,10 @@ class Goods extends Base 'data' => $goods->items(), 'last_page' => $goods->lastPage(), ]; + + // 将结果缓存到Redis,设置过期时间为30秒(30秒) + $redis->set($cache_key, json_encode($new_data), 30); + return $this->renderSuccess('请求成功', $new_data); } diff --git a/app/api/controller/Index.php b/app/api/controller/Index.php index c3f809c..6b24fae 100755 --- a/app/api/controller/Index.php +++ b/app/api/controller/Index.php @@ -79,8 +79,20 @@ class Index extends Base { // 设置header - $type = \request()->param('type/d', 0); + + // 使用Redis缓存 + $redis = (new \app\common\server\RedisHelper())->getRedis(); + $cacheKey = 'danye:content:' . $type; + + // 尝试从缓存获取数据 + $cacheData = $redis->get($cacheKey); + if ($cacheData) { + $cacheData = json_decode($cacheData, true); + return json(['status' => 1, 'msg' => '请求成功', 'data' => $cacheData['content'], 'is_image_optimizer' => $cacheData['is_image_optimizer']]); + } + + // 缓存不存在,查询数据库 $info = Danye::where(['id' => $type])->find(); $is_image_optimizer = 0; if ($info) { @@ -90,6 +102,14 @@ class Index extends Base } else { $content = ''; } + + // 存入Redis缓存,设置过期时间为60秒(10分钟) + $cacheData = [ + 'content' => $content, + 'is_image_optimizer' => $is_image_optimizer + ]; + $redis->setex($cacheKey, 600, json_encode($cacheData)); + // return $this->renderSuccess("请求成功", $content); return json(['status' => 1, 'msg' => '请求成功', 'data' => $content, 'is_image_optimizer' => $is_image_optimizer]); } diff --git a/app/api/controller/Infinite.php b/app/api/controller/Infinite.php index 35a3efc..f97aa28 100755 --- a/app/api/controller/Infinite.php +++ b/app/api/controller/Infinite.php @@ -35,6 +35,18 @@ class Infinite extends Base { $user_id = $this->getUserId(); $goods_id = request()->param('goods_id/d', 0); + + // 获取Redis实例并检查缓存 + $redis = (new \app\common\server\RedisHelper())->getRedis(); + $cache_key = "infinite_goodsdetail_{$goods_id}_{$user_id}"; + $cache_data = $redis->get($cache_key); + + // 如果缓存存在,直接返回缓存数据 + if ($cache_data) { + $cached_data = json_decode($cache_data, true); + return $this->renderSuccess("请求成功", $cached_data); + } + $goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,addtime,rage_is,rage,item_card_id,lingzhu_is,lingzhu_shang_id,is_shou_zhe,daily_xiangou,quanju_xiangou') ->where(['id' => $goods_id]) ->find(); @@ -59,14 +71,15 @@ class Infinite extends Base $goods['item_card'] = $item_card; $goods['item_card_info'] = '重抽卡说明: 怒气值达到' . $goods['rage'] . '时, 获得重抽卡'; //当前盒子的怒气值 - $user_rage = Db::name('user_rage')->field('id,rage')->where(['user_id' => $user_info['id'], 'goods_id' => $goods_id])->find(); - $goods['user_rage'] = $user_rage ? $user_rage['rage'] : 0; - //怒气值进度 - if (!$user_rage || $user_rage['rage'] <= 0) { - $goods['user_rage_schedule'] = 0; - } else { - $goods['user_rage_schedule'] = round($user_rage['rage'] / $goods['rage'] * 100); - ; + if ($user_id > 0) { + $user_rage = Db::name('user_rage')->field('id,rage')->where(['user_id' => $user_id, 'goods_id' => $goods_id])->find(); + $goods['user_rage'] = $user_rage ? $user_rage['rage'] : 0; + //怒气值进度 + if (!$user_rage || $user_rage['rage'] <= 0) { + $goods['user_rage_schedule'] = 0; + } else { + $goods['user_rage_schedule'] = round($user_rage['rage'] / $goods['rage'] * 100); + } } } } @@ -180,6 +193,10 @@ class Infinite extends Base 'danye_id' => $type1, 'limitInfo' => $limitInfo ]; + + // 将原始数据缓存到Redis,设置过期时间为60秒(3分钟) + $redis->set($cache_key, json_encode($new_data), 180); + return $this->renderSuccess("请求成功", $new_data); }