ViewResolver视图解析器
ViewResolver进行视图解析,将逻辑视图名解析成真正的视图,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
1 | public interface ViewResolver { |
HandlerMapping通过request找到了handler,HandlerAdapter是具体使用Handler来干活的,每个HandlerAdapter封装了一种Handler的具体使用方法
由于Spring经过很长时间的版本迭代,为了适配老版本,Spring 中的处理器的实现有很多种方式,比如可以实现 Controller 接口,也可以用 @Controller+@RequestMapping 注解将方法作为一个处理器等,这就导致 Spring 不知道怎么调用用户的处理器逻辑。因此需要一个处理器适配器,由处理器适配器去调用处理器的逻辑
HandlerAdapter按照特定规则去执行Handler,通过扩展适配器可以对更多类型的处理器进行执行
1 | public interface HandlerAdapter { |
作用是根据request找到相应的处理器Handler和Interceptors,然后封装成HandlerExecutionChain对象返回
1 | HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; |
HandlerMapping帮助DispatcherServlet进行web请求的url到具体处理类的匹配,用来根据请求的url查找Handler,内部维护的Map<String, Object>
映射,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
1 | private final Map<String, Object> handlerMap = new LinkedHashMap<String, Object>(); |
Lazy Expiration(延迟过期)
Memcached不会监控记录是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此称为Lazy Expiration。
LRU(Least Recently Used 最近最少使用)
当空间不足的时候,Memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用。
懒惰删除机制
删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用
当某个值过期后,并没有从内存删除,因此,stats 统计时,curr_item 有其信息,当某个新值去占用它的位置时,当成空 chunk 来占用,当 get 值时,判断是否过期,如果过期,返回空并且清空,curr_item 就减少了.
这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,这个称为 lazy expiration,惰性失效,这样做的好处是节省了 cpu 时间和检测的成本
memcached使用的是lru(least recently used 最近最少使用)删除机制
当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用,就把谁踢出
即使某个 key 是设置的永久有效期,也一样会被踢出来,称为永久数据被踢现象