当前位置: 首页 > news >正文

Ngx+Lua+Redis 快速存储POST数据

系统几万台设备有windows有安卓还有linux系统,每个设备三分钟就会向服务器post设备的硬件信息,数据格式json,后台管理界面只需要最新的数据,不需要历史数据,业务逻辑非常简单,PHP代码就几行,已经优化到极致了,但是架不住频率太高了。服务器负载就被这个的简单逻辑给耗尽。历史原因客户端已经不可能修改,只能在服务端进行优化了。

做法也很简单就是不用php-fpm,nginx接收到数据,直接把post数据存储到redis里面,供管理后台直接使用。
ngx如何连接redis请参考我的另一篇文件
Ngx+Lua+Redis 实时IP黑名单系统icon-default.png?t=O83Ahttps://blog.csdn.net/hangbobo/article/details/142763400在这里我只接上代码

local my_cache = ngx.shared.my_cache
local redis_connect=loadstring(my_cache:get("redis_connect"))
local red=redis_connect()
red:hincrby('store_ip:02','hardware',1)local auth_header = ngx.req.get_headers()["Authorization"]
if string.len(auth_header) > 8 thenlocal token = string.sub(auth_header,8)if string.len(token) > 0 thenngx.req.read_body() local data = ngx.req.get_body_data()local cjson = require "cjson.safe"local obj = cjson.decode(data)obj.time=os.date("%Y-%m-%d %H:%M:%S", ngx.time())data=cjson.encode(obj)red:hset('hardware',token,data)ngx.say('{"msg":"succeed","status_code":200,"data":['..data..']}')ngx.exit(200)end
end
ngx.exit(404)

解析json代码并增加当前时间这个是非必须的,只是为了验证数据是不是最新提交的。
我的设备唯id是,通过header头的”Authorization“ 传递的,你需要结合你你的实际代码。

代码存储为 /www/server/nginx/conf/hardware.lua
nginx配置

lua_shared_dict my_cache 10m;
server
{listen 80;listen 443 ssl;http2 on;...........default_type 'application/json';    access_by_lua_file /www/server/nginx/conf/access.lua; location /boxs/hardware {access_by_lua_file /www/server/nginx/conf/hardware.lua;}...........
}


 

http://www.lryc.cn/news/460249.html

相关文章:

  • go-delve的使用
  • Python网络爬虫技术详解
  • Golang | Leetcode Golang题解之第474题一和零
  • 算法刷题技巧
  • BMS、EMS PCS 简介
  • spug3发布项目
  • 鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍
  • mac 桌面版docker no space left on device
  • 基于CIM的街镇基层治理统一指挥平台建设方案
  • PostgreSQL学习笔记三:数据类型和运算符
  • ROS理论与实践学习笔记——6 ROS机器人导航(仿真)
  • uniapp开发微信小程序,button的open-type=“share“ 分享给个人跳转到首页问题
  • 【jQuery】 jQuery基础及选择器介绍(基本选择器 层次选择器 属性选择器 过滤选择器)
  • 网站在对抗机器人攻击的斗争中失败了
  • Centos7 搭建logstash
  • 面试题:Redis(五)
  • LeetCode18.四数之和
  • jmeter出参保存到文件,保存失败解决
  • 黑龙江网络安全等级保护办理机制
  • 小红的行列式构造
  • pyflink过滤kafka数据
  • Webpack 完整指南
  • 如何在 Ubuntu20.04 安装FTP Server vsftpd
  • 基于FPGA的DDS信号发生器(图文并茂+深度原理解析)
  • QT:绘制事件和定时器
  • 【算法——递归回溯】
  • 手机在网状态接口的使用和注意事项
  • WebGl 使用uniform变量动态修改点的颜色
  • Leetcode 划分字母区间
  • 可编辑div遇到的那些事