Nginx 连接 Redis 实现数据库操作
Nginx 连接 Redis 实现数据库操作
实现的功能:当有新的连接到达Nginx时,在redis记录连接数量。
1. redis 创建数据库
安装完成redis之后,通过set connums 0
创建数据。(redis基本使用参照官方文档即可)。
2. 更改 Nginx 源码
由于是要在新建连接时进行连接计数加一,因此需要在nginx accept新的连接时进行计数操作,首先找到 Nginx 处理新连接的函数所在文件nginx/src/event/ngx_event_accept.c
,在该文件中能够找到建立连接的函数为:ngx_event_accept
。在代码中添加连接redis数据库的方法以及连接计数增加的代码,新增的代码如下(省略号表示中间穿插有nginx的源码):
#include <hiredis/hiredis.h>
.........redisContext *conn = redisConnect("127.0.0.1",6379); //建立连接,都位于一台机器if(conn != NULL && conn->err){printf("connection error: %s\n",conn->errstr);return ;}......redisReply *reply = redisCommand(conn,"incr connums");//自增reply = redisCommand(conn,"get connums"); // 获取数值printf("%s\n",reply->str);freeReplyObject(reply); //释放...........redisFree(conn); //释放连接
编译nginx
由于更改了nginx源码所以需要重新编译nginx,并且由于以上的信息是通过printf
函数输出的,因此需要通过nginx配置文件的daemon off;
选项,使得printf
能够进行输出。
- 修改 daemon 选项
- 修改 Makefile 文件,进入nginx源码中,找到Makefile文件内容如下:
default: build
clean:
rm -rf Makefile objs
build:
$(MAKE) -f objs/Makefile # 可以看到makefile使用的是这个文件,因此需要去该目录下的Makefile文件中进行修改
install:
$(MAKE) -f objs/Makefile install
modules:
$(MAKE) -f objs/Makefile modules
upgrade:
/usr/local/nginx/sbin/nginx -t
kill -USR2cat /usr/local/nginx/logs/nginx.pid
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUITcat /usr/local/nginx/logs/nginx.pid.oldbin
- 修改
nginx/obj/Makefile
,在该文件中添加-lhiredis
来实现编译。nginx/obj/Makefile
文件的前几行如下:
CC = cc
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g
CPP = cc -E
LINK = $(CC)
因此第一反应便是将-lhiredis
加到 CFLAGS 后面,但是实践过后会发现,会报错如下:
而上图中圈起来的部分正是真真的错误原因,需要将-lhiredis
添加到 -lz
的后面,才能真正通过编译。至于原因,应该是跟Nginx的编译方式有关,有待研究。
结果
通过浏览器访问nginx页面能实现计数的自增。
问题说明
- Nginx有极好的模块化编程,这种直接更改的方式无疑会破坏Nginx的模块化,因此并不推荐,此处只是作为实验。
- 与redis的连接创建是每次有新连接到来时创建,连接处理结束时销毁,这种方式也会对Nginx的处理性能造成破坏。
- 由于是初次使用,对hiredis的连接方式以及协议等方面不够了解,使用也停留在最基本的层面,后续可以研究通过异步非阻塞的方式实现redis的连接。
- redis的自增没有在nginx重启后置0,这可以实现也可以不实现,取决于需求。
- 一次连接请求会产生两次计数,应该是nginx连接建立机制的问题,后续继续研究。
Nginx 连接 Redis 实现数据库操作相关推荐
- Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例
学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...
- VBA连接SQL SERVER数据库操作Excel
VBA连接SQL SERVER数据库操作Excel. Sub 按钮1_Click() Dim i As Integer, j As Integer, sht As Worksheet 'i,j为 ...
- Spring boot 连接Redis实现HMSET操作
这篇文章记录使用spring-boot-starter-redis访问Redis.Redis相关的的配置文件放在Resources目录下的application.yml文件中,如下所示: spring ...
- idea连接sqlserver及数据库操作
idea连接sqlserver及操作 一.在连接过程中遇到的问题: (1)数据库登录失败 (2)登录成功之后 数据库端口号怎么查看 二.代码连接数据库 ①加载驱动和连接数据库 三.数据库操作 连接详解 ...
- python连接sql sever_R和python连接SQL sever 数据库操作
在R的使用中,为了方便提取数据, 我们经常要进行数据库进行操作,接下来我们尝试使用R进行连接数据. 这里我们使用R中的RODBC进行操作, 首先,我们需要先配置ODBC资源管理器 通过任务管理器或者w ...
- thinkphp5.0连接mysql_thinkphp5.0数据库操作
ThinkPHP数据库处理: 1.MySQL的数据库连接 首先配置database.php文件 使用{dump(config('database));}来查看数据库的配置项 使用 {$res = Db ...
- medoo连接mysql_Medoo PHP数据库操作类
Medoo是一个加速网站开发的最轻量的PHP数据库框架类!Medoo可以极大地加快你的PHP项目的开发.在进行Web开发的时候,很大一部分企业或个人都会选择使用PHP语言,而Medoo则可以起到锦上添 ...
- cyq.data 连接mysql_底层数据库操作类库CYQ.DATA查询
单表查询: using (MAction action = new MAction("COMP","K3")) { //查询的字段 string colstr ...
- python数据库操作——连接SQLite
python数据库操作--连接SQLite hello!我是wakeyo_J,每天一个konwledge point,一起学python,让技术无限发散. 连接SQLite python数据库操作 ...
最新文章
- mysql 所有表的字段信息_mysql如何查询所有表和字段信息
- AI一分钟|欧盟将对Google开出天价罚单;智能家居制造商Nest并入Google;沃尔玛与微软合作挑战AWS...
- 在执行ab压力测试时出现socket: Too many open files (24)的解决方法
- 在线编译工具 Jenkins Hudson 的关系
- kdj超卖_三分钟学会KDJ三大买卖绝技,简单高效,把握最佳买卖点,不懂KDJ的股民值得一看!...
- 设计模式之_Strategy_05
- ArcGIS Server安装的几个问题
- 开发人员需要了解的有关xPaaS的一切
- nginx 启动命令_Nginx实战001:Window中配置使用Nginx入门
- 学而思“变身”乐读后宣布下架,已收家长费用“多退少不补”
- vue 传递 对象 路由_javascript – 如何在Vue中提交表单,重定向到新路由并传递参数?...
- AppWeb服务后台登陆及配置的方法解答
- 请求支付宝渠道报错:40006,Insufficient Permissions,ISV权限不足
- 服务器系统怎么安装网卡驱动,Windows7系统怎么安装8139网卡驱动
- 基于B_spline 的非刚性形变
- 服务器 战地4 无限载入,战地4卡在loading界面无限载入_战地4无限载入解决方法...
- 格式化代码 format.js
- Ubuntu通过samba winbind集成AD账号
- PC版QQ的“版本太旧, 无法继续使用“ 及升级后的R6030运行时错
- 攻防世界_难度8_happy_puzzle