自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 SpringMVC之完整的处理流程

在这篇文章中,将要完整的跟踪一下SpringMVC的执行流程我们会在浏览器里输入http://localhost:8060/articles/67/comment?comment=sssss2ssssk1k1最终的效果是下面就开始走进源码:protected void service(HttpServletRequest request, HttpServletResponse re...

2018-11-24 20:26:47 1261

原创 SpringMVC之原理总结

SpringMVC的本质是一个Servlet,Servlet接口一共定义了5个方法,其中init方法和destroy用于初始化和销毁Servlet,整个生命周期只会被调用一次,service方法实际处理请求,getServletConfig方法返回ServletConfig,可以获取到配置Servlet时使用init-param配置的参数,还可以获取ServletContext,getServle...

2018-11-24 14:33:21 165

原创 SpringMVC之ModelFactory

ModelFactory是用来维护Model的,具体包含两个功能1、初始化Model2、处理器执行后将Model中相应的参数更新到SessionAttributes中public void initModel(NativeWebRequest request, ModelAndViewContainer mavContainer, HandlerMethod handlerMethod) ...

2018-11-24 13:38:06 567

原创 SpringMVC之RequestMappingHandlerAdapter

下面是HandlerAdapter的接口定义:public interface HandlerAdapter { /** * Given a handler instance, return whether or not this {@code HandlerAdapter} * can support it. Typical HandlerAdapters will base th...

2018-11-24 12:58:32 726

原创 SpringMVC之HandlerMapping

AbstractHandlerMapping是HandlerMapping的抽象实现,所有HandlerMapping都继承自AbstractHandlerMapping。AbstractHandlerMapping采用模板模式设计了HandlerMapping实现的整体接口,它继承了WebApplicationObjectSupport,初始化时会自动调用模板方法initApplicationC...

2018-11-23 12:53:16 153

原创 SpringMVC之组件概览

在这里会对各个组件进行宏观的介绍,在之后会详细介绍每个组件HandlerMapping它会根据request找到对应的处理器protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception { for (HandlerMapping hm : this.handlerMappin...

2018-11-22 22:04:47 150

原创 SpringMVC之处理请求

接下来将会分析SpringMVC是怎么处理请求的,首先会分析HttpServletBean、FrameServlet和DispatcherServlet,然后再看一下核心方法doDispatchHttpServletBean主要参与创建工作,没有涉及请求的处理FrameworkServlet:servlet的处理流程是:首先从Servlet接口的service方法开始,然后在HttpServ...

2018-11-22 17:51:00 200

原创 SpringMVC创建过程

SpringMVC核心就是一个DispatcherServlet,所有请求的处理都是由它来做的,下面我们就来看一下它的创建过程:Servlet创建时可以直接调用HttpServletBean中的无参数的init方法public final void init() throws ServletException { if (logger.isDebugEnabled()) { logg...

2018-11-22 16:45:07 286

原创 常见HTTP状态码

100, client应该继续发送请求,即继续。101, server通知client修改协议,也就说,client需要采用新的协议版本去访问 server。200, 请求已成功。200 ~ 207300 Multiple Choices 如果请求一个指向多个资源的URL时,会返回这个状态码,比如某个服务器上有某个HTML文件的中文和英文版本。301永久重定向302临时重定向,HTTP...

2018-11-05 18:55:24 119

原创 mysql优化的几点建议

1、硬件配置优化(1)CPU选择:多核的CPU,主频高的CPU(2)内存:更大的内存(3)磁盘选择:更快的转速、RAID、阵列卡(4)网络环境2、mysql设计优化(1)存储引擎的选择①Myisam:数据库并发不大,读多写少,而且都能很好的用到索引,sql语句比较简单②Innodb:并发访问大,写操作比较多,有外键,事务等需求(2)命名规则①多数开发语言命名规则:MyAdres...

2018-11-05 18:20:20 110

原创 CAP为什么不能同时满足三个特性

在分布式系统中一致性、可用性、分区容错性不可能三个同时满足,先来解释以下这三个原则的意思:一致性:在分布式系统中的任意一个节点都会查询到相同的信息可用性:服务一直可用,而且是正常响应时间,好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。分区容错性:当分布式系统中一部分节点崩溃的时候,当前系统仍旧能够正常对外提供服务现在我们来证明以下为什么分布...

2018-11-05 17:20:21 1400

原创 Redis值notify.c阅读

keyspaceEventsStringToFlags:对传入的字符串参数进行分析, 给出相应的 flags 值int keyspaceEventsStringToFlags(char *classes) { char *p = classes; int c, flags = 0; while((c = *p++) != '\0') { switch(c...

2018-11-05 14:06:09 224

原创 Redis之发布订阅

redis的发布与订阅功能有PUBLISH、SUBSCRIBE、PSUBSRIBE等命令组成。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。通过执行PSUBSCRIBE命令订阅一个或多个消息模式,从而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时,消息不仅会被发送...

2018-11-05 11:42:55 93

原创 Redis之集群

redis集群是redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。节点一个redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,他们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群。命令格式如下:CLUSTER MEET <ip><port&g...

2018-11-05 11:11:54 162

原创 Redis之Sentinel

Sentinel是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。当server1的下线时长超过用户设定的下线时长上限时,Sentinel系统就会...

2018-11-04 20:00:52 119

原创 Redis之复制

在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器,我们称呼被复制的服务器为主服务器,而对主服务器进行复制的服务器则被称为从服务器。旧版复制功能的实现redis的复制功能分为同步和命令传播两个操作:1、同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态2、命令传播操作则用于在主服务器的数据库状态被修改,导致主从服务...

2018-11-04 19:11:28 153

原创 Redis之数据库实现源码阅读

lookupKey:查找指定的键,如果存在返回对应的值robj *lookupKey(redisDb *db, robj *key) { // 查找键空间 dictEntry *de = dictFind(db->dict,key->ptr); // 节点存在 if (de) { // 取出值 r...

2018-11-04 15:03:30 256

原创 Redis值集合对象源码阅读

setTypeCreate:返回一个集合对象robj *setTypeCreate(robj *value) { if (isObjectRepresentableAsLongLong(value,NULL) == REDIS_OK) return createIntsetObject(); return createSetObject();}setTy...

2018-11-04 14:16:14 124

原创 Redis之列表对象源码阅读

listTypeTryConversion:尝试将列表对象转换成linkedlist编码void listTypeTryConversion(robj *subject, robj *value) { // 确保 subject 为 ZIPLIST 编码 if (subject->encoding != REDIS_ENCODING_ZIPLIST) return; ...

2018-11-04 13:56:19 212

原创 Redis之哈希对象源码阅读

hashTypeTryConversion:对传入的参数进行检查是否需要从ziplist转换成hashtablevoid hashTypeTryConversion(robj *o, robj **argv, int start, int end) { int i; // 如果对象不是 ziplist 编码,那么直接返回 if (o->encoding != RE...

2018-11-04 13:22:16 302

原创 Redis之事件

redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:1、文件事件:redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象,服务器与客户端的通信会产生相应的文件事件,,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。2、时间事件:redis服务器中的一些操作(比如serverCron函数)需要在给定的事件点执行,而时间事件就是服务器对这类定时操作...

2018-11-04 12:57:19 124

原创 Redis之AOF持久化

AOF持久化是通过保存redis服务器所执行的写命令来记录数据状态的:AOF持久化功能的实现可以分为追加、文件写入、文件同步三个步骤命令追加当AOF持久化功能处于打开状态时,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾AOF文件的写入与同步redis的服务器进程就是一个事件循环,这个循环中的文件事件负责接收客户端的命令请求,以及...

2018-11-04 12:21:39 146

原创 Redis之RDB持久化

RDB文件的创建与载入有两个redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。SAVE命令会阻塞redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程继续处理命令请求。RDB文件的载入工作是在服务器启动时自动执行的,只要redis服务器在启动...

2018-11-04 11:56:08 144

原创 redis之数据库

redis服务器将所有数据库都保存在服务器状态redisServer结构的db数组中,db数组的每个项都是一个redisDb结构,每个redisDb代表一个数据库默认情况下,redis服务器会创建16个数据库每个redis客户端都有自己的目标数据库,默认情况下,redis客户端的目标数据库为0号数据库,但是客户端可以通过执行select命令来切换数据库。在服务器内部,客户端状态redisC...

2018-11-03 22:21:00 152

原创 Redis之字符串对象源码阅读

checkStringLength:检查字符串的大小是否超过512MB,超过返回 REDIS_ERR ,未超过返回 REDIS_OKstatic int checkStringLength(redisClient *c, long long size) { if (size > 512*1024*1024) { addReplyError(c,"string ex...

2018-11-03 21:15:06 188

原创 Redis之object源码阅读

在这片博客中,我们将对object.c这个文件的其中一些方法进行阅读,大部分代码都是类似的:createObject:创建一个新对象robj *createObject(int type, void *ptr) { robj *o = zmalloc(sizeof(*o)); o->type = type; o->encoding = REDIS_ENC...

2018-11-03 20:43:05 153

原创 Redis之对象

redis并没有直接使用我们之前介绍的那些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。通过这五种不同类型的对象,redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。除此之外,redis的对象系统还实现了基于引用计数...

2018-11-03 20:17:57 114

原创 Redis之压缩列表

压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来做列表键的底层实现。压缩列表的构成压缩列表是redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。上图就是一个压缩列表的结构...

2018-11-03 18:19:29 112

原创 Redis之整数集合

整数集合是集合键的底层实现之一,当一个结合只包含整数值元素,并且这个集合的元素数量不多时,redis就会使用整数集合作为集合作为集合键的底层实现。我们先来看一下它的结构:typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数...

2018-11-03 17:54:51 206

原创 Redis之跳跃表

跳跃表是一种有序数据结构,他通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比较长的字符串时,redis就会使用跳跃表来作为有序集合键的底层实现。我们这节主要来看一下跳跃表的具体实现:typedef struct zskiplist { // 表头...

2018-11-03 17:09:30 167

原创 Redis之字典

字典是一种用于保存键值对的抽象数据结构,一个键和一个值进行关联,字典中的每个键都是独一无二的,程序可以在字典中根据键查找与之关联的值,或者通过键来更新值,又或者根据键来删除整个键值对等等。Redis构建了自己的字典实现,对数据库的增删改查都是构建在字典的操作之上的。下面我们看一下哈希表的定义:typedef struct dictht { // 哈希表数组 dict...

2018-11-03 15:31:04 478

原创 Redis之链表实现

链表提供了高效的节点重排功能,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度,在redis中,发布与订阅、慢查询、监视器等功能也用到了链表,redis服务器本身还是用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区。我们看一下redis中链表节点的定义:typedef struct listNode { // 前置节点 struct l...

2018-11-03 14:40:29 467

原创 Redis之sds实现

在Redis中没有直接使用C语言中的传统字符串,它自己构建了一套动态字符串,我们来看一下它的结构:struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf[];}在这个结构体里面有buf字符数组保存字符信息,另外还保存了...

2018-11-03 14:15:55 398

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除