当前位置: 首页 > 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;}...........
}


 

相关文章:

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

系统几万台设备有windows有安卓还有linux系统,每个设备三分钟就会向服务器post设备的硬件信息,数据格式json,后台管理界面只需要最新的数据,不需要历史数据,业务逻辑非常简单,PHP代码就几行,已经…...

go-delve的使用

go-delve的非交互使用方式: dlv要执行的命令文件:cmd.dlv goroutines exit 执行非交互命令: yes n | dlv --allow-non-terminal-interactivetrue attach $pid --init cmd.dlv --end--...

Python网络爬虫技术详解

Python网络爬虫技术详解 引言 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…...

Golang | Leetcode Golang题解之第474题一和零

题目: 题解: func findMaxForm(strs []string, m, n int) int {dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for _, s : range strs {zeros : strings.Count(s, "0")ones : len(s) - zerosfor j : m; j > zeros; j--…...

算法刷题技巧

算法题:https://leetcode.cn/studyplan/top-100-liked/ 哈希表 使用哈希表,增删改查的时间复杂度均为O(1)。何时使用哈希表? 在某个区域内查找一个已知元素,可以使用哈希表作为这个区域根据一个特征对元素进行分类,特征…...

BMS、EMS PCS 简介

1 储能系统的构成 完整的电化学储能系统主要由电池组、电池管理系统(BMS)、能量管理系统(EMS)、储能变流器(PCS)以及其他电气设备构成。 在储能系统中,电池组将状态信息反馈给电池管理系统BMS&…...

spug3发布项目

一、启动spug项目 1.spug代码仓库地址: spug: 开源运维平台:面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。 - Gitee.com 注…...

鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍

文章目录 一、访问控制二、应用权限1、应用权限管控2、权限使用的基本原则3、授权方式4、权限等级 三、申请应用权限1、选择申请权限的方式2、声明权限3、声明样例4、二次向用户申请授权5、具体实现示例6、效果展示 四、应用权限列表1、system_grant(系统授权&#…...

mac 桌面版docker no space left on device

报错信息 docker pull镜像时报: failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。...

基于CIM的街镇基层治理统一指挥平台建设方案

1 项目概述 1.1 建设背景 社区作为人民生活的重要区域,往往需要对社区内人员、房屋、基本设施、日常业务进行规范管理,以保证其正常运行,但是传统的社区治理方式已不能满足新时代社会发展的要求,如人工采集录入信息、人员现场巡逻等,这些工作方式不仅工作量大,而且效率…...

PostgreSQL学习笔记三:数据类型和运算符

数据类型和运算符 PostgreSQL 支持多种数据类型和运算符,以下是一些常见的数据类型和运算符的概述: 数据类型 基本数据类型 整数类型: SMALLINT:2 字节,范围 -32,768 到 32,767。INTEGER:4 字节&#xff0…...

ROS理论与实践学习笔记——6 ROS机器人导航(仿真)

在 ROS 中,机器人导航(Navigation)是由多个功能包组合而成的系统,统称为导航功能包集(navigation stack)。它提供了一个全面的框架,使得移动机器人能够自主导航到指定目标点,同时避开…...

uniapp开发微信小程序,button的open-type=“share“ 分享给个人跳转到首页问题

当使用button标签带上open-type"share"属性,点击之后可分享当前页面给微信好友,但是分享之后朋友点开跳转到了首页问题。 需要使用 onShareAppMessage 函数 export default {onShareAppMessage(res) {if (res.from button) {// 来自页面内分…...

【jQuery】 jQuery基础及选择器介绍(基本选择器 层次选择器 属性选择器 过滤选择器)

文章目录 jQuery基础1. 优势2. 版本3. 基本语法4. 选择器基本选择器层次选择器属性选择器过滤选择器基本过滤选择器可见性过滤选择器 注意事项 jQuery基础 jQuery 是一个功能强大且易于使用的 JavaScript 库,它极大地简化了前端开发的工作。无论是 DOM 操作、事件处…...

网站在对抗机器人攻击的斗争中失败了

95% 的高级机器人攻击都未被发现,这一发现表明当前的检测和缓解策略存在缺陷。 这表明,虽然一些组织可能拥有基本的防御能力,但他们没有足够的能力应对更复杂的攻击。 例如利用人工智能和机器学习来模仿人类行为的攻击。 这些统计数据强调…...

Centos7 搭建logstash

下载并安装公共签名密钥: sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 创建一个名为 /etc/yum.repos.d/logstash.repo 的文件,并添加以下内容: [logstash-7.x] nameElastic repository for 7.x packages baseu…...

面试题:Redis(五)

1. 面试题 面试问 记录对集合中的数据进行统计 在移动应用中,需要统计每天的新增用户数和第2天的留存用户数; 在电商网站的商品评论中,需要统计评论列表中的最新评论; 在签到打卡中,需要统计一个月内连续打卡的用户数&…...

LeetCode18.四数之和

题目链接:18. 四数之和 - 力扣(LeetCode) 这道题是在三数之和上改编出来的,在写这道题之前可以尝试以下三数之和(15. 三数之和 - 力扣(LeetCode)); 1.常规解法&#xf…...

jmeter出参保存到文件,保存失败解决

1、添加JSON提取 2、添加beanshell FileWriter writer new FileWriter("C:/Users/xxx/Desktop/signUrl.csv", true); writer.write(vars.get("company_name")"\t"vars.get("signUrl")"\n"); writer.close(); 写文件的两个…...

黑龙江网络安全等级保护办理机制

黑龙江的网络安全等级保护机制根据《网络安全法》和相关法规要求,信息系统按照安全等级从低到高分为五级,分别为一般、重要、非常重要、特别重要和特别敏感。不同等级的信息系统必须实施相应的安全措施,以确保系统免受内外部威胁,…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...