您现在的位置是:主页 > news > 东莞网站制作实力乐云seo/比较靠谱的推广公司

东莞网站制作实力乐云seo/比较靠谱的推广公司

admin2025/5/3 19:00:14news

简介东莞网站制作实力乐云seo,比较靠谱的推广公司,做网站维护要学些什么·,宝安三网合一网站建设Nginx 连接 Redis 实现数据库操作 实现的功能:当有新的连接到达Nginx时,在redis记录连接数量。 1. redis 创建数据库 安装完成redis之后,通过set connums 0 创建数据。(redis基本使用参照官方文档即可)。 2. 更改 …

东莞网站制作实力乐云seo,比较靠谱的推广公司,做网站维护要学些什么·,宝安三网合一网站建设Nginx 连接 Redis 实现数据库操作 实现的功能:当有新的连接到达Nginx时,在redis记录连接数量。 1. redis 创建数据库 安装完成redis之后,通过set connums 0 创建数据。(redis基本使用参照官方文档即可)。 2. 更改 …

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能够进行输出。

  1. 修改 daemon 选项
    在这里插入图片描述
  2. 修改 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 -USR2 cat /usr/local/nginx/logs/nginx.pid
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT cat /usr/local/nginx/logs/nginx.pid.oldbin

  1. 修改 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页面能实现计数的自增。

问题说明

  1. Nginx有极好的模块化编程,这种直接更改的方式无疑会破坏Nginx的模块化,因此并不推荐,此处只是作为实验。
  2. 与redis的连接创建是每次有新连接到来时创建,连接处理结束时销毁,这种方式也会对Nginx的处理性能造成破坏。
  3. 由于是初次使用,对hiredis的连接方式以及协议等方面不够了解,使用也停留在最基本的层面,后续可以研究通过异步非阻塞的方式实现redis的连接。
  4. redis的自增没有在nginx重启后置0,这可以实现也可以不实现,取决于需求。
  5. 一次连接请求会产生两次计数,应该是nginx连接建立机制的问题,后续继续研究。