蜗牛历险记(二) 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 ...
随机推荐
- 打造强大的BaseModel(1):让Model自我描述
前言 从事iOS开发已经两年了,从一无所知到现在能独立带领团队完成一系列APP的开发,网络上的大神给了我太多的帮助.他们无私地贡献自己的心得和经验,写出了一篇篇精美的文章.现在我也开始为大家贡献自己的 ...
- CSS内容
选择器 框模型 背景和边框 文本效果 2D/3D 转换 动画 多列布局 用户界面 CSS3 边框 border-radius box-shadow border-image
- 【shell】 I/O重定向
1.基本概念 a.I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b.常用FD有3个,为0(stdin,标准输入).1(stdout,标准输出).2(stderr,标准错 ...
- 灯笼Lantern下载及使用教程
http://www.iyaxi.com/2015-11-17/732.html 最新科学上网QQ群群号:465166189点击链接加入群[翻越长城三群]:http://jq.qq.com/?_wv= ...
- 【转】ArrayList的toArray,也就是list.toArray[new String[list.size()]];,即List转为数组
[转]ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: 1.list.toArray(); 2.l ...
- 开源Pull_To_Refresh控件使用
学习知识点 onTouch事件传递机制. Lisenter监听 ImageView的src background scaleType不同属性的显示情况. onTouch滑动抬起调用的MotionEve ...
- SSH无密码登陆问题解决
转载 http://my.oschina.net/hunzi/blog/10687 安装好Cygwin后,SSH需要设置为无密码登陆, 首先查看是ssh还是ssh2:ls -l `which ssh` ...
- SQL Server 负载均衡集群方案之Moebius
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...
- vs2010开发android的准备工作
安装 Mono for Android for Visual Studio 2010 需要下面4个步骤: 安装 JDK 安装 Android SDK 配置模拟器 安装 Mono for Android ...
- CSS3的几个标签速记3
transition:CSS3过渡 css3里很好的一个标签,可以非常方便的完成需要很多JS才能完成的动态效果 例语法:transition:width 2S,height 2S,transf ...