蜗牛历险记(二) Web框架(下)
Web框架第三篇--缓存篇
缓存的优劣很大程度上决定了框架的效率,一个有节操的缓存它应该是高效的,利用率高的,具备更多扩展功能的。
一、介绍之前
计算机各个硬件的运行效率是不一样的,CPU>>一级缓存>>二级缓存>>内存>>硬盘。如何提供CPU、一级缓存、二级缓存的使用率是操作系统的课题。我们需要做的就是如何提高内存使用效率,减少磁盘IO。
目前我们熟知的跟缓存有关的产品:.Net Mvc的CacheManager,Redis,Memcached
二、使用范围
缓存的作用就是将频繁需要的数据从原先存储效率相对低的磁盘存放到存储效率高的内存中,由于磁盘相对廉价而内存相对昂贵,我们对存放进入内存的数据也应该是有取舍的。按我个人理解来说,我觉得符合以下规则的可以考虑放入缓存中:
1.数据使用频繁的
2.改变较少,查询较多的
3.数据量总体不是很大的
总体而言,缓存不应该多度占用系统正常运行所需资源,尽量提高缓存命中率,降低缓存高频更改。
三、初始化
同样的,为了解耦与具体缓存框架的关系,我们需要自己订立一套标准的缓存接口
- public interface IMemoryCacheManager {
- /// <summary>
- /// 从缓存块获取缓存项
- /// </summary>
- /// <typeparam name="TKey">关联缓存的类型</typeparam>
- /// <typeparam name="TResult">存储的缓存项类型</typeparam>
- /// <param name="key">与缓存项关联的键值</param>
- /// <param name="acquire">获取配置</param>
- /// <returns></returns>
- TResult Get<TKey, TResult>(TKey key, Func<AcquireContext<TKey>, TResult> acquire);
- /// <summary>
- /// 获取缓存块
- /// </summary>
- /// <typeparam name="TKey">关联缓存的类型</typeparam>
- /// <typeparam name="TResult">存储的缓存项类型</typeparam>
- /// <returns></returns>
- ICache<TKey, TResult> GetCache<TKey, TResult>();
- }
acquire的委托就是当缓存中不存在key时,通过执行acquire,将结果存入缓存,同时可以在AcquireContext<TKey>入参中设置缓存失效参数(比如失效时间、失效触发文本等会)。
目前基于这个接口,我实现了纯内存式的缓存接口和基于Redis缓存的缓存接口。
四、总结
Web框架的总结基本结束了。之后可能会针对某一个技术进行重点详细地分析。目前计划下一步介绍具体业务应用的设计和实现。
蜗牛历险记(二) Web框架(下)的更多相关文章
- 蜗牛历险记(二) Web框架(中)
上篇简单介绍了框架所使用的Autofac,采用Autofac提供的Ioc管理整个Web项目中所有对象的生命周期,实现框架面向接口编程.接下来介绍框架的日志系统. 一.介绍之前 框架日志是否有存在的必要 ...
- 蜗牛历险记(二) Web框架(上)
接上篇所说,本篇主要内容是讲述如何使用Autofac来管理整个平台的生命周期(初级). 一.简述 插件式Web开发的同学应该还会记得PreApplicationStartMethod这个Assembl ...
- Web框架下安全漏洞的测试反思
此文已由作者王婷英授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在平时的测试中,一般情况下,我们都是比较关注功能业务测试,以及对应的接口测试,很少去关注对应的业务设计上存在 ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)
一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- JEECG(二) JEECG框架下调用webservice java springmvc maven 调用 webservice
JEECG系列教程二 如何在JEECG框架下使用webservice 本文所使用的webservice是c#开发的 其实无论是什么语言开发的webservice用法都一样 java springmvc ...
- 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面
SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...
- 二、Web框架实现
一.简单web(socket) 在前一篇WEB框架概述一文中已经详细了解了:从浏览器键入一个URL到返回HTML内容的整个过程.说到底,本质上其实就是一个socket服务端,用户的浏览器其实就是一个s ...
随机推荐
- Mysql在windows下的免安装配置步骤和重新安装的步骤
windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...
- DHCP服务自动分配IP地址原理
转载自:http://blog.csdn.net/lycb_gz/article/details/8499559 DHCP在提供服务时,DHCP客户端是以UDP 68号端口进行数据传输的,而DHCP服 ...
- [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)
operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...
- LogstashL reference 重要章节
配置文件结构说明 https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html Event相关配 ...
- 关于ER图和UML图之间的对比
ER图与UML图 ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来 ...
- BLOCKED和WAITING的区别
/** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state ...
- javascript 获取下一个节点
下一个节点: nextElementSibling 上一个节点 previousElementSibling <div> <select onchange="alert(t ...
- 自己写http获取网络资源和解析json数据
虽然github上有很多开源的,方便的jar报,用起来也很方便,但我们也需要了解其中的原理,如何自己不用第三方jar包来获取网络资源 主要代码如下: 因为联网是耗时的操作,所以需要另开一个线程来执行 ...
- Exchanger, Changing data between concurrent tasks
The Java concurrency API provides a synchronization utility that allows the interchange of data betw ...
- 第一章 认识jQuery
jQuery是一个优秀的JavaScript库,它凭借简洁地语法和跨平台的兼容性,极大地简化了开发人员遍历HTML文档,操作DOM,处理事件,执行动画和开发Ajax操作. jQuery优势:1.轻量级 ...