0%

Nginx缓存

一般情况下系统用到的缓存有三种

  • 服务端缓存:缓存存在后端服务器,如redis
  • 代理缓存:缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地
  • 客户端缓存:缓存在浏览器
    • [ ] 什么时候会出现304? 服务器响应中包含有ETaglast-modified,浏览器下次去请求时会发送这两个标签,直接返回304 Not Modified来告诉浏览器该资源没有修改,不需要从服务器获取最新的,浏览器就会直接使用本地缓存

Nginx使用的缓存属于代理缓存

阅读全文 »

服务开机自启

Centos有两种方式,一是修改/etc/rc.local文件,二是使用chkconfig来管理开机自启(chkconfig无法自启动源码包)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# /etc/init.d/目录下必须有启动脚本
ls /etc/init.d/httpd

# 添加服务,以便让chkconfig指令管理它,开机启动
chkconfig --add httpd
# 删除指定的服务,不再让chkconfig指令管理它,开机不启动
chkconfig --del httpd

# 设置开机运行该服务,默认是设置2345等级开机运行服务
chkconfig httpd on
# 指定等级
chkconfig --level 35 httpd on
# 设置开机不运行服务
chkconfig httpd off

# 列出所有被chkconfig管理的服务,后边可以加服务名,来查看某个服务开机启动的情况
chkconfig --list

阅读全文 »

日志框架

现在市面上的日志框架有很多,许多人不知道选什么,而且有时候问起某些人用的是什么日志框架,也说不出个所以然来,现在的日志组件主要分为两类,一类为日志接口,一类为日志实现

日志接口

主要有两个,commons-logging(jcl)、slf4j,使用门面模式对外提供统一的日志接口,日志实现由配置决定使用Log4j、Logback、Log4j2,可以在不改变应用代码的前提下切换底层的日志实现

阅读全文 »

redis解析命令

以string的set命令为例

1
2
3
4
5
6
7
8
9
10
11
12
void setCommand(client *c) {
robj *expire = NULL;
int unit = UNIT_SECONDS;
int flags = OBJ_NO_FLAGS;

if (parseExtendedStringArgumentsOrReply(c,&flags,&unit,&expire,COMMAND_SET) != C_OK) {
return;
}

c->argv[2] = tryObjectEncoding(c->argv[2]);
setGenericCommand(c,flags,c->argv[1],c->argv[2],expire,unit,NULL,NULL);
}
阅读全文 »

Servlet接口

什么是Servlet?

Servlet是一种基于Java技术的Web组件,用于生成动态内容,由容器管理,是平台无关的Java类组成,并且由Java Web服务器加载执行,是Web容器的最基本组成单元

什么是Servlet容器?

Servlet容器作为Web服务器或应用服务器的一部分,通过请求和响应提供Web客户端与Servlets交互的能力,容器管理Servlet实例以及它们的生命周期(创建、初始化、提供服务、销毁等)

在java web中不管是使用J2EE原生的servlet/jsp还是使用springmvc/springboot,在web服务器看来只是对外暴露出来的Servlet,而这个Servlet是javax.servlet.Servlet接口,该接口定义了Servlet引擎与Servlet程序之间通信的协议约定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Servlet的加载和实例化可以发生在容器启动时,也可以延迟初始化直到有请求需要处理时
public interface Servlet {
// 负责初始化Servlet对象,容器创建好Servlet对象后由容器调用调用,只执行一次
// 当load-on-startup设置为负数或者不设置时会在Servlet第一次用到时才被调用
void init(ServletConfig config) throws ServletException;
// 获取该Servlet的初始化参数信息
ServletConfig getServletConfig();
// 负责响应客户端的请求,当容器接收到客户端要求访问特定Servlet对象的请求时,会调用该Servlet对象的service()方法,每次请求都会执行
void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
// 返回Servlet信息,包含创建者、版本、版权等信息
String getServletInfo();
// Servlet结束生命周期时调用,释放Servlet对象占用的资源
void destroy();
}
阅读全文 »