node与内存数据库redis以及nginx
在说redis之前,还需要去说到一个问题,就是对于浏览器中session的设置问题
1.在之前session直接就是js变量,放在node.js进程当中,因此就会产生下面的问题,进程的内存是有限的如果当进程
的内存暴增时,应该怎么办(在32位的电脑中进程内存大概在1.6g左右,在64位电脑中进程的内存大概在3g左右)
2.正式线上运行时多线程的,进程之间内存是无法共享的
进程内存模型:由stack于heap组成,session是存在heap当中的,heap中的内容很容易就会爆满。
因此基于这个问题就需要对其做一个解决方案,解决的方案就是采用内存数据库redis
因此基于这些问题需要采用redis内存数据库,其有以下的特点
1.是web server最常用的缓存数据库,数据存放在内存当中
2.相比于,mysql其访问的速度更快
3.其成本比较搞,可存储的数据量更小(内存的硬伤)
解决redis方案
1.可以将web server和redis拆分为两个单独的服务
2.双方都是独立的,都是可以扩展的(例如:可以扩展成集群等)
3.保存mysql也是一个单独的服务,可以扩展
session适用于redis的原因有以下几点:
1.session访问频繁,对性能要求更高
2.session可以不考虑断电丢失数据等问题
3.session数据量不会太大(相比于MySQL中存储的数据而言)
网站数据不采用redis而是采用MySQL的原因
1.操作频率不是太高(相比于session而言)
2.断电不能丢失,必须保留
3.数据量太大,对于内存而言其成本太高
因此在下面就讲解使用nodeJS如何去连接redis:
1.首先去下载redis,下载的过程就不过多的叙述,打开redis的方式在下载redis的目录下,然后输入redis-server.exe redis.windows.conf连接redis。在这里所说的是有关于windows中如何去连接redis的方式,具体其他的方式请参照https://www.runoob.com/redis/redis-install.html在这个网址里面有关于如何去安装redis的方法。
2.然后接着就是引用redis,与mysql一样需要引入redis的端口号与服务器的ip地址。首先需要在具体的项目中使用npm insatll redis --save 去安装这个依赖包,这样就可以调用redis数据库。接下来看一个实际的测试redis的代码:
const redis = require('redis');
//创建客户端,第一个参数表示启动redis的端口号,第二个表示当前的本地服务器
const redisClient = redis.createClient(6379,'127.0.0.1');
redisClient.on('error',err => {
console.log(err);
})
//测试
redisClient.set('myName','wangermazi',redis.print);
redisClient.get('myName',(err,val) => {
if(err){
console.log(err);
return
}
console.log('val is', val);
//退出
redisClient.quit();
})
那么在实际的开发中,其实也非常的简单,就是如果处理mysql一样,将redis做一个拆分,有关于技术实现逻辑部分放在一个文件中,对于处理数据逻辑的部分就放在另外的一个文件当中。当然redis与mysql一样,也需要做一个线上运行与线下开发的端口与服务器地址的区别。了解完redis之后就需要进行以下的实际运用了
1.将session更新在redis当中,在对整个项目进行数据连通的过程中一定需要注意的就是打开redis和mysql
以及运行整个项目
将session存放在redis当中,首先需要的就是将username和realname存放在入redis当中
实现的代码如下:
req.session.username = data.username;
req.session.realname = data.realname;
//同步到redis当中
set(req.sessionid, req.session);
2.登录验证,只有登录了之后才能进行之后的一些操作,也就是对于博客的新建 更新 删除
3.将之前关于useename的假数据做更改,username是通过session获取到的因此只需要
req.session.username赋值给req.body.author即可
nginx反向代理
使用nginx做反向代理,使用nginx主要是解决跨域问题,简单的叙述其原理,当连接后台服务器时,当前的服务器与后台的服务器之间是受到同源策略所影响的,因此在这里使用nginx的主要目的就是来解决这个问题。通过代理可以使本地服务器与本地的浏览器先做连接,因为两者是同源的,因此就不会存在同源策略的限制,然后本地的服务器再去访问后台所要连接到的服务器,因为服务器与服务器之间是不受同源策略的影响。因此就可以完成访问。总结以下,对于nginx作用
1.解决跨域问题,其原理是使你的浏览器去访问你本地的服务器,然后通过你本地的服务器去访问别的浏览器这样来解决
跨域问题
2.做静态服务 负载均衡
具体关于nginx的使用方式是在cong文件中去做配置,然后去访问这个端口即可
在这里还需要去补充一点,通常情况下,我们直接通过编译器打开所做的网页直接显示的是该文件的路径,如果需要打开其ip则需要npm install http-server -g 然后使用 http-server -p 8001(在这里设置端口号)打开即可。
对于nginx在window端与mac端是如何配置的在这里就不过多的去说,在网上搜索便知。