OpenResty+Lua+redis+mysql实现高性能高可用限流缓存

OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台.并发性能可在10k-1000k

OpenResty安装

1.添加仓库执行命令

 

yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

2.执行安装

yum install openresty

3.安装成功后 会在默认的目录如下:

/usr/local/openresty

默认已经安装好了nginx,在目录:/usr/local/openresty/nginx 下。

修改/usr/local/openresty/nginx/conf/nginx.conf ,将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。

#user nobody; 配置文件第一行原来为这样, 现改为下面的配置
user root root;

 

 

 

缓存预热和二级缓存查询

 

在/root/lua目录下创建ad_load.lua ,实现连接mysql 查询数据 并存储到redis中。

ngx.header.content_type="application/json;charset=utf8"
local cjson = require("cjson")
local mysql = require("resty.mysql")
local uri_args = ngx.req.get_uri_args()
local position = uri_args["position"]local db = mysql:new()
db:set_timeout(1000)  
local props = {  host = "192.168.41.188",  port = 3306,  database = "changgou_business",  user = "root",  password = "123456"  
}local res = db:connect(props)  
local select_sql = "select url,image from tb_ad where status ='1' and position='"..position.."' and start_time<= NOW() AND end_time>= NOW()"  
res = db:query(select_sql)  
db:close()  local redis = require("resty.redis")
local red = redis:new()
red:set_timeout(2000)local ip ="192.168.41.188"
local port = 6379
red:connect(ip,port)red:set("ad_"..position,cjson.encode(res))
red:close()ngx.say("{flag:true}")

修改/usr/local/openresty/nginx/conf/nginx.conf文件:

./nginx -s reload

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenResty(nginx)限流配置实现

一般情况下&#xff0c;首页的并发量是比较大的&#xff0c;即使有了多级缓存&#xff0c;如果有大量恶意的请求&#xff0c;也会对系统造成影响。而限流就是保护措施之一。 nginx提供两种限流的方式&#xff1a; 一是控制速率 二是控制并发连接数 控制速率 控制速率的方式…

数据同步的解决方案Canal

Canal实现数据同步的原理&#xff1a; 1.是根据模拟mysql slave的主从交互协议&#xff0c;伪装自己是mysql slave&#xff0c;向mysql master发送dump请求。 2.mysql master收到dump请求后,开始推送 binary log给canal 3.canal解析binary log对象&#xff08;原始byte流&am…

复习……方法的重载

Lesson Six                         2018-04-20  00:48:57 1.一个项目或工程&#xff0c;一定是由一个一个类构成的。2.类是抽象的&#xff0c;比如建筑图纸。而具体的建筑&#xff0c;是根据图纸建设成的&#xff0c;实际上就是类的实例化3.完成一…

对Kafka的总结

定位&#xff1a;kafka是一款分布式&#xff0c;高吞吐量&#xff0c;基于发布/订阅的消息中间件。 核心组件&#xff1a; broker&#xff1a;kafka服务器&#xff0c;负责消息的存储和转发。 topic&#xff1a;主题&#xff0c;消息的类别&#xff0c;kafka按照topic分类消…

Ribbon中的负载均衡算法实现

Ribbon响应时间权重负载均衡算法&#xff0c;假设有3台服务器A,B&#xff0c;C响应时间为10&#xff0c;40&#xff0c;80ms。 算法公式&#xff1a;weighsofar 总响应时长- 本服务器平均响应时长 A&#xff1a;0130-10120 B:120130-40210 C:210130-80260 将3个轮询数值放…

maven私服配置

环境&#xff1a; eclipse 、maven、nexus。 1、配置setting.xml文件 1.1、配置本地仓库位置&#xff1a;文件中&#xff0c;存在节点 “localRepository”&#xff0c;默认是注释&#xff0c;也就是本地仓库使用默认地址“Default: ~/.m2/repository”&#xff0c;一般为系统…

NAT模式下虚拟机与主机网络关系配置

哎&#xff0c;又是烦人的网络关系耽误了好长时间。 当前情况是使用NAT模式使得主机与虚拟机与外网连通 具体配置如下&#xff1a; 这是VM上配置 如下是虚拟机ip配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 vi /etc/resolv.conf service network restart

python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...

继续来说函数的后续知识点&#xff0c;主要是函数返回多个值&#xff0c;匿名函数&#xff0c;三元运算符&#xff0c;算是比较小的知识点。 一、汉字转拼音模的使用 1、安装模块 #install xpinyin 2、如果使用 结果&#xff1a; 二、函数返回多个值 1、python的函数可以同时返…

EasyExcel项目使用

2.0.5版本做了很大改变&#xff0c;记录2.1.6的所使用的工具类及方法 其实持续对easyexcel的git进行关注是最方便的&#xff0c;上面也有完整的demo以及工具类等等 1.easyExcel的pom坐标 <!-- easyexcel --><dependency><groupId>com.alibaba</groupId&g…

c# vs2010 excel 上传oracle数据

excel 数据表上传到oracle数据库。过程例如以下&#xff1a; 1、打开本地excel文件 2、用OleDb连接excel文件 3、将来excel的数据读取到dataset中 4、把dataset 中数据insert到oracle中对应的表中 以下截图说明&#xff1a; 建立项目文件。非常easy。就是建立普通的winform项目…

Nacos配置文件覆盖问题

近期新项目上cloud alibaba架构 用的注册和配置中心就是用的nacos Nacos作为配置中心给我的感觉也是不是很好用&#xff0c;大概配置中心都不是很好用吧&#xff0c;可能用多了会好点 首先说一下遇到的问题&#xff0c; nacos有几个范围性的概念 我就不说了 1.首先是命名空…

leetCode题解之Reshape the Matrix

1、题目描述 2、分析 使用了一个队列。 3、代码 1 vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {2 3 if( nums.size() * nums[0].size() ! r * c )4 return nums;5 vecto…

515Nod 1126 求递推序列的第n项【矩阵快速幂】

有一个序列是这样定义的&#xff1a;f(1) 1, f(2) 1, f(n) (A * f(n - 1) B * f(n - 2)) mod 7.给出A&#xff0c;B和N&#xff0c;求f(n)的值。Input输入3个数&#xff1a;A,B,N。数字之间用空格分割。(-10000 < A, B < 10000, 1 < N < 10^9) Output输出f(n)的…

特殊表情存数据库处理

开发途中遇到评价的功能&#xff0c;需要存入表情符号比如&#xff1a; 以及这种 存入数据库的时候会抛出异常&#xff0c;\x86\啥的 百度解决办法是 数据库改utf8mb4 但是测试改表的字符集并没有用&#xff0c; 然后我也没敢改库的字符集仍然使用utf8 我的解决办法是代码层…

转 【MQTT】在Windows下搭建MQTT服务器

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议&#xff0c;设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有&#xff1a; 使用发布/订阅消息模式&#xff0c;提供一对多的消息发布&#xff0c;解除应用程序耦合。…

记录一次StackOverflowError问题

StackOverflowError Idea启动一直抛出StackOverflowError栈溢出&#xff0c;大概率是跟刚写的代码相关 public class WebServiceConfig {private static WebServiceConfig cfg new WebServiceConfig();// Web服务的URLprivate String address;// Web服务接口private Class s…

多数据源处理-苞米豆-dynamic

微服务项目虽然每个服务可以单独使用一个库&#xff0c;但是某些特定服务&#xff0c;如调度中心服务&#xff0c;定时任务等&#xff0c;如果还是使用rpc或者fegin频繁进行远程调用&#xff0c;总感觉不是很合适 所以对单服务进行了多数据源处理 使用的是苞米豆的 dynamic-d…

Druid的外网访问异常

本地启动访问无异常&#xff0c;部署至Linux服务器后无法访问 #合并多个DruidDataSource的监控数据use-global-data-source-stat: truestat-view-servlet:login-username: adminlogin-password: adminreset-enable: falseurl-pattern: /druid/*# 添加IP白名单allow: "&quo…

Linux项目第一次访问非常慢,后来很快的异常

最近项目本地访问和测试服务器访问都没出现访问很慢的问题。 近期要上生产部署&#xff0c;所以对生产环境的组件及各服务进行了部署&#xff0c;部署完成后进行测试发现请求耗时异常 比如一个订单查询请求&#xff0c;第一次请求耗时5m 或者15s 而且很有规律&#xff0c;不多…

spring注解大全

【转载】https://www.cnblogs.com/zxf330301/articles/6559210.html spring component的作用 1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &am…