业务需求
app客户端向服务端接口发送来json 数据 每天 发一次 清空缓存后会再次发送
出问题之前业务逻辑:
php 接口 首先将 json 转为数组 去重 在一张大表中插入不存在的数据
该用户已经存在 和新增的id
入另一种详情表
问题所在:
当用户因特殊情况清除缓存 导致app 发送json串 入库并发高 导致CPU 暴增到88% 并且居高不下
优化思路:
1、异步队列处理
2、redis 过滤(就是只处理当天第一次请求)
3、redis 辅助存储app名称(验证过后批量插入数据app名称表中)
4、拼接插入的以及新增的如详细表中
解决办法:
1、接口修改 redis 过滤 + 如list队列 并将结果存入redis中
首先 redis将之前的历史数据放在redis 哈希里面 中文为键名 id 为键值
<?php
namespace App\Http\Controllers\App;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
class OtherAppController extends Controller{
public function appTotal(Request $request)
{
// //历史数据入库
//$redis = Redis::connection('web_active');
// $app_name = DB::connection('phpLog')->table('app_set_name')->where("appName", '<>', ' ')->lists('id', 'appName');
// $str = '';
// foreach ($app_name as $key => $val) {
// $str.= "{$val} {$key} ";
// }
// $redis->hmset('app_name', $app_name);
// echo $str;exit;
$result = $request->input('res');
$list = json_decode($result, true);
if (empty ($list) || !is_array($list)) {
return json_encode(['result' => 'ERROR', 'msg' => 'parameter error']);
}
$data['uid'] = isset($list['uid']) ? $list['uid'] : '20001' ;
$data['time'] = date('Y-m-d');
$redis_key = 'log_app:'.$data['time'];
//redis 过滤
$redis = Redis::connection('web_active');
//redis 键值过期设置
if (empty($redis->exists($redis_key))) {
$redis->hset($redis_key, 1, 'start');
$redis->EXPIREAT($redis_key, strtotime($data['time'].'+2 day'));
}
//值确定
if ($redis->hexists($redis_key, $data['uid'])) {
return json_encode(['result' => 'SUCCESS']);
} else {
//推入队列
$redis->hset($redis_key, $data['uid'], $result);
$redis->rpush('log_app_list', $data['time'] . ':' . $data['uid']);
return json_encode(['result' => 'SUCCESS']);
}
}
}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何有效提升 java corn 表达式的性能?(如何优化java corn表达式的性能 )
- PHP数据类型转换常见误区解析
- 如何在 Java 中高效地创建列表?(如何在Java中创建列表)
- Java中dubbo的最佳实践案例有哪些?(java中dubbo有哪些最佳实践案例)
- 如何通过 Java 代码获取当前时间戳?(如何使用Java获取当前时间戳)
- 如何使用 Java 编写一个 circular 类?(怎么用java编写一个circular类)
- 在 Java 中如何安全地进行 SQL 拼接?(Java中怎么安全的进行SQL拼接)
- Java 的 enum 有哪些需要注意的事项?(java的enum的注意事项)
- 深入解析:如何有效提升PHP数据类型的转换效率
- 如何在 Java 中实现轮询?(java如何实现轮询)
猜你喜欢
AI推送时光机异步redis队列实现 数据入库的方法
数据库2024-04-02
Redis数据库队列怎么实现异步任务
数据库2024-04-22
Java实现异步延迟队列的方法详解
数据库2023-03-22
数据库同步到Redis的实现方法
数据库2024-04-02
redis实现消息队列的方法
数据库2024-04-02
PHP实现异步延迟消息队列的方法详解
数据库2024-04-02
redis实现数据同步的方法
数据库2024-04-02
python使用redis实现消息队列(异步)的实现完整例程
数据库2023-01-18
redis-shake同步redis数据的实现方法
数据库2024-04-02
Redis+Node.js如何实现一个能处理海量数据的异步任务队列系统
数据库2024-04-02
Redis实现延迟队列的方法是什么
数据库2023-07-05
Redis消息队列实现的方法是什么
数据库2024-04-22
redis队列实现高并发的方法是什么
数据库2024-04-09
redis的消息队列防止数据丢失的方法
数据库2024-04-02
redis缓存同步数据库的方法
数据库2024-04-02
PHP实现Redis数据库分表的方法
数据库2023-05-15
Redis优雅地实现延迟队列的方法分享
数据库2023-02-26
PHP实现Redis数据库分片的方法
数据库2023-05-17
PHP实现Redis数据库集群的方法
数据库2023-05-15
咦!没有更多了?去看看其它编程学习网 内容吧