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框架(下)的更多相关文章

  1. 蜗牛历险记(二) Web框架(中)

    上篇简单介绍了框架所使用的Autofac,采用Autofac提供的Ioc管理整个Web项目中所有对象的生命周期,实现框架面向接口编程.接下来介绍框架的日志系统. 一.介绍之前 框架日志是否有存在的必要 ...

  2. 蜗牛历险记(二) Web框架(上)

    接上篇所说,本篇主要内容是讲述如何使用Autofac来管理整个平台的生命周期(初级). 一.简述 插件式Web开发的同学应该还会记得PreApplicationStartMethod这个Assembl ...

  3. Web框架下安全漏洞的测试反思

    此文已由作者王婷英授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在平时的测试中,一般情况下,我们都是比较关注功能业务测试,以及对应的接口测试,很少去关注对应的业务设计上存在 ...

  4. Python之Web框架

    Python之Web框架: 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...

  5. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  6. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  7. JEECG(二) JEECG框架下调用webservice java springmvc maven 调用 webservice

    JEECG系列教程二 如何在JEECG框架下使用webservice 本文所使用的webservice是c#开发的 其实无论是什么语言开发的webservice用法都一样 java springmvc ...

  8. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  9. 二、Web框架实现

    一.简单web(socket) 在前一篇WEB框架概述一文中已经详细了解了:从浏览器键入一个URL到返回HTML内容的整个过程.说到底,本质上其实就是一个socket服务端,用户的浏览器其实就是一个s ...

随机推荐

  1. java递归所有文件

    import java.io.File; public class Filep { public static File f = new File("E:\\javatest"); ...

  2. PS基础

    1.仿制图章工具:[小  ]大   建立一个新的图层,可以进行图片某个部分的复制,完全复制之后,还可以调整大小(ctrl+t), 颜色(ctrl+u打开色相饱和度的菜单)等. 2.修复画笔工具:与仿制 ...

  3. 常用CentOS 6/7 扩展源

    1.系统自带 baseextrasupdates 2.epel yum install epel-release https://fedoraproject.org/wiki/EPEL 3.el(用于 ...

  4. JavaScript中的作用域与函数和变量声明的提升

      var foo = 1; function bar() {     if (!foo) {         var foo = 10;     }     alert(foo); } bar(); ...

  5. 【模拟】UVa 1030 - Image Is Everything

    1030 - Image Is Everything Time limit: 3.000 seconds Your new company is building a robot that can h ...

  6. 从lambda到函数式编程

    Object.send(:remove_const,'TRUE') Object.send(:remove_const,'FALSE') def to_integer(pro) pro[-> n ...

  7. 跨域方法之CORS

    跨域的方法非常之多,如果想了解其中CORS,不要浪费时间,看下面三个就够了 了解CORS   https://developer.mozilla.org/en-US/docs/Web/HTTP/Acc ...

  8. 理解Java的引用对象

    SoftReferenceWeakReference 的特性基本一致, 最大的区别在于 SoftReference会尽可能长的保留引用,不会在GC时就回收对象,而是直到JVM 内存不足时才会被回收(虚 ...

  9. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  10. oracle-替换 换行符和空格符

    --换行或空格: )), '') --换行及空格: update tableName set columnName= ), ), '')