使用OpenResty进行限流的基本配置
以商城轮播广告为例
采用多级缓存的方式来减少下游系统的服务压力。
先查询openresty本地缓存 ,如果没有,再查询redis中的数据,如果没有,再查询mysql中的数据,但凡有数据 则返回即可。
记录使用OpenResty(Nginx+lua)进行限流最基础的配置。
1.安装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
2.安装nginx
默认已经安装好了nginx,在目录:/usr/local/openresty/nginx 下。
修改/usr/local/openresty/nginx/conf/nginx.conf,将配置文件使用的根设置为root,目的就是将来要使用lua脚本的时候 ,直接可以加载在root下的lua脚本。
cd /usr/local/openresty/nginx/conf
vi nginx.conf
修改代码如下:
3.测试访问
重启下centos虚拟机,然后访问测试Nginx
访问地址:http://192.168.211.132/
4.广告的载入和读取
实现思路:
先查询openresty本地缓存 如果 没有
再查询redis中的数据,如果没有
再查询mysql中的数据,但凡有数据 则返回即可。
1.声明nginx缓存
lua_shared_dict dis_cache 128m;
2.在/root/lua目录下创建read_content.lua:
ngx.header.content_type="application/json;charset=utf8"
local uri_args = ngx.req.get_uri_args();
local id = uri_args["id"];
--获取本地缓存
local cache_ngx = ngx.shared.dis_cache;
--根据ID 获取本地缓存数据
local contentCache = cache_ngx:get('content_cache_'..id);
if contentCache == "" or contentCache == nil then
local redis = require("resty.redis");
local red = redis:new()
red:set_timeout(2000)
red:connect