博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx 学习笔记(五)nginx_lua 如何连接redis
阅读量:6471 次
发布时间:2019-06-23

本文共 2628 字,大约阅读时间需要 8 分钟。

hot3.png

安装redis

下载

wget http://download.redis.io/releases/ redis-5.0-rc4.tar.gz

 解压安装配置

make, sudo make install

运行redis

配置文件:redis.conf可以编辑相关内容,默认端口是6379

启动redis

切换到 redis解压的目录的src下面执行 ./redis-server & 使其后台运行

 

1、对应的nginx.conf配置如下,需要在http模块中添加如下配置,不然在redis.lua中引入的包会报找不到对应的引用错误。

http {   lua_package_path   "/usr/local/openresty/nginx/conf/waf/?.lua;/usr/local/openresty/lualib/resty/?.lua;;";   lua_package_cpath "/usr/local/openresty/lualib/?.so;;";   lua_shared_dict limit 10m;   init_by_lua_file /usr/local/openresty/nginx/conf/waf/init.lua;   access_by_lua_file /usr/local/openresty/nginx/conf/waf/waf.lua;......其他省略.........}

 

2、nginx_lua 如何连接redis,对应的lua脚本(redis.lua)如下。

local cjson = require "cjson"local redis = require "resty.redis" -- 是否需要开启redis的日志attackredislog = "on"--log存储目录,该目录需要用户自己新建,切需要用户的可写权限logdir = "/usr/local/openresty/nginx/logs/hack/"function redislog(method,data)    if attackredislog then	    local servername=ngx.var.server_name		line = ""..method.." \""..data.."\" \n"        local filename = logdir..'/'..servername.."_"..ngx.today().."_redis.log"        write(filename,line)    endendfunction write(logfile,msg)    local fd = io.open(logfile,"ab")    if fd == nil then return end    fd:write(msg)    fd:flush()    fd:close()end--------------------------------------------------------local function close_redis(red)    if not red then        return    end    --释放连接(连接池实现)    local pool_max_idle_time = 10000 --毫秒    local pool_size = 100 --连接池大小    local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)     if not ok then	   redislog("redis keepalive","set redis keepalive error,"..err.."")    endend local red = redis:new()red:set_timeout(1000)local ip = "127.0.0.1"local port = 6379local ok, err = red:connect(ip,port)if not ok then    return close_redis(red)endfunction setRedis(key, val)  local ok, err = red:set(key, val)   -- 设置值的有效期为60秒   ok, err = red:expire(key,60)   if not ok then    redislog("redis set","failed to set "..key..","..err.."")    return    endend function getRedis(key)    local res, err = red:get(key)    if not res then	redislog("redis get","failed to get,"..err.." ")    return    end   if res == ngx.null then    redislog("redis get"," "..key.." not found")    return nil  else    return res  endendlocal ck = ngx.var.http_cookielocal scheme = ngx.var.scheme  local server_name = ngx.var.server_namelocal request_uri = ngx.var.request_urilocal server_port = ngx.var.server_portlocal url = scheme.."://"..server_name..":"..server_port..request_urilocal valueif (ck ~= nil) then value = getRedis(ck)endclose_redis(red)

 

转载于:https://my.oschina.net/u/3370769/blog/1936152

你可能感兴趣的文章
Android中的SurfaceView详解
查看>>
Flutter之MaterialApp使用详解
查看>>
DataBinding最全使用说明
查看>>
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
白洋淀周末游
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室
查看>>
ImageOptim-无损图片压缩Mac版
查看>>
12 Go语言map底层浅析
查看>>
vue-resumer 项目中 element-ui 遇到的 textarea autosize 问题
查看>>
以主干开发作为持续交付的基础
查看>>
PHP扩展库PEAR被攻击,近半年下载者或被影响
查看>>